问题描述
我正在使用 elasticsearch java api,我对构建特定查询的方式有疑问。
我在 java 中有一个实体作为过滤器,它有一些字段,这些字段必须匹配 elasticserach 元素。
例如:
public class FilterPerson{
private String name;
private String name2;
private String surname;
private String surname2;
...
}
private BoolQueryBuilder generateQuery(FiltroActaReconocimiento filtro){
List<MatchQueryBuilder> list=new ArrayList();
if(!StringUtils.isBlank(filtro.getName())){
list.add(QueryBuilders.matchQuery("name",filtro.getName()));
}
if(!StringUtils.isBlank(filtro.getName2())){
list.add(QueryBuilders.matchQuery("name2",filtro.getName2()));
}
if(!StringUtils.isBlank(filtro.getSurname())){
list.add(QueryBuilders.matchQuery("surname",filtro.getSurname()));
}
....
if(!list.isEmpty()){
BoolQueryBuilder query = QueryBuilders.boolQuery();
for(MatchQueryBuilder a:list){
query.must(a);
}
return query;
}
如您所见,如果过滤器的值为 name="jhon" 和 surname="smith",则查询将类似于: 获取 (name="jhon" 和 surname="smith") 的元素
既然你知道了我的程序的逻辑,我将解释我的问题: 在 elasticsearch 中,我有一个索引,它有: 母亲姓名,母亲姓名 2,母亲姓氏,母亲姓氏 2 父亲姓名,父亲姓名2,父亲姓氏,父亲姓氏2
使用相同的 FilterPerson 过滤器(只有一组名称),我必须在 elasticsearch 中搜索,可能字段 name、name2、surname 和 surname2 可能来自父亲或来自母亲,例如如果 name='Susan' 和 surname='Potts' 查询必须是这样的: ((motherName='Susan' ORfatherName='Susan')AND(motherSurname='Potts'ORfatherSurname='Potts'))
我知道“应该”我可以做 OR 部分,例如:
(motherName='Susan' OR FatherName='Susan')
if(!StringUtils.isBlank(filtro.getName())){
List<MatchQueryBuilder> listName=new ArrayList();
listName.add(QueryBuilders.matchQuery("motherName",filtro.getName()));
listName.add(QueryBuilders.matchQuery("fatherName",filtro.getName()));
BoolQueryBuilder query = QueryBuilders.boolQuery();
for(MatchQueryBuilder a:listName){
query.should(a);
}
}
但我不知道如何做包含两个 OR 的 AND 部分。 一些帮助会很棒,谢谢
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)