我在Elasticsearch中有这样的查询:
{
"query": {
"bool": {
"must_not": [
{ "match": "filed1" : "value1"},
{ "match": "filed2" : "value2"}
]
}
}
}
我尝试了下面的代码,但仅适用于单个匹配。
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); boolQueryBuilder.mustNot(QueryBuilders.matchQuery(“ field1”,“ value1”);
在Java API中将must_not
与multiple match
一起使用的方式是什么。谢谢。
答案 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!