Elasticsearch 如何在 must_not 中添加 bool 查询并在 java API 中添加多个匹配项?

Elasticsearch How to add bool query inside must_not with multiple match in java API?

我在 Elasticsearch 中有这样的查询:

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

我试过下面code.but它只适用于单场比赛。

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

在javaAPI.Thanks.

中,must_notmultiple match的使用方法是什么?

好的开始!您可以根据需要多次调用 mustNot()

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

就这么简单 ;-)

看起来有点像原来的问题被误解了。如果您在一个 mustNot 系列中有多个条件,那么它并不像添加多个 .mustNot 那样容易。示例:

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

如果您想从华盛顿排除所有 Donalds,这不是正确的解决方案,因为它会排除所有 Donalds 和 ALL 来自华盛顿。 如果你想结合这两个属性,只需创建一个新的查询(想想你用括号编码......):

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!