Elasticsearch如何在Java API中的具有多个匹配的must_not中添加布尔查询?

时间:2018-10-11 07:34:44

标签: elasticsearch elasticsearch-6 elasticsearch-java-api

我在Elasticsearch中有这样的查询:

{
    "query": { 
        "bool": { 
          "must_not": [
            { "match": "filed1" : "value1"},
            { "match": "filed2" : "value2"}
          ]
        }
      }
}

我尝试了下面的代码,但仅适用于单个匹配。

  

BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();   boolQueryBuilder.mustNot(QueryBuilders.matchQuery(“ field1”,“ value1”);

在Java API中将must_notmultiple match一起使用的方式是什么。谢谢。

2 个答案:

答案 0 :(得分:0)

良好的开始!您可以根据需要简单地多次拨打mustNot()

BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); 
boolQueryBuilder.mustNot(QueryBuilders.matchQuery("field1","value1");
boolQueryBuilder.mustNot(QueryBuilders.matchQuery("field2","value2");

就这么简单;-)

答案 1 :(得分:0)

看起来有点像原来的问题被误解了。如果在一个mustNot星座中有多个条件,则添加多个.mustNot并不容易。示例:

BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); 
boolQueryBuilder.mustNot(QueryBuilders.matchQuery("name","Donald");
boolQueryBuilder.mustNot(QueryBuilders.matchQuery("hometown","Washington");

如果要从华盛顿排除所有唐纳德,这不是正确的解决方案,因为它将把所有唐纳德和所有唐纳德都排除在华盛顿之外。 如果要合并这两个属性,只需创建一个新的查询(就好像您用方括号对它进行编码...):

BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); 

BoolQueryBuilder subQuery = QueryBuilders.boolQuery(); 
subQuery.must(QueryBuilders.matchQuery("name","Donald"); // must (positive!)
subQuery.must(QueryBuilders.matchQuery("hometown","Washington"); // must (positive!)

queryBuilder.mustNot(subQuery); // negate subQuery!