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_not
与multiple 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!
我在 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_not
与multiple 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!