如何在 java api 中的 should/must 方法中添加 bool 查询?
How to add bool query inside a should/must method in java api?
我在 elasticsearch 中有这样的查询:
"query": {
"bool": {
"should": [
{"bool": {
"must": [
{"term": {
"field1": "value1"
}},
{"term": {
"field2": "value2"
}}
]}
},
{"bool": {
"should": [
{"term":{
"field1": "value3"
}}
]}
}
]
}
}
基本上是 ((field1 == value1 AND field2 == value2) OR (field1 == value3))
。但是我还没有找到在 Java API 中实现它的方法。我试过这样的事情:
BoolQueryBuilder filter = new BoolQueryBuilder()
.should(QueryBuilders.termQuery(field1, value3)
.should(QueryBuilders.boolQuery().must(QueryBuilders.termQuery(field1, value1))
.must(QueryBuilders.termQuery(field2, value2)))
);
但是 should
方法不使用 BoolQueryBuilder
。正确的做法是什么?非常感谢。
你快完成了,你搞砸了一个括号。但是让我们用更易读的代码重写您的查询:
BoolQueryBuilder first = QueryBuilders.boolQuery()
.must(QueryBuilders.termQuery(field1, value1))
.must(QueryBuilders.termQuery(field2, value2));
BoolQueryBuilder second = QueryBuilders.termQuery(field1, value3);
BoolQueryBuilder filter = new BoolQueryBuilder()
.should(first)
.should(second);
我在 elasticsearch 中有这样的查询:
"query": {
"bool": {
"should": [
{"bool": {
"must": [
{"term": {
"field1": "value1"
}},
{"term": {
"field2": "value2"
}}
]}
},
{"bool": {
"should": [
{"term":{
"field1": "value3"
}}
]}
}
]
}
}
基本上是 ((field1 == value1 AND field2 == value2) OR (field1 == value3))
。但是我还没有找到在 Java API 中实现它的方法。我试过这样的事情:
BoolQueryBuilder filter = new BoolQueryBuilder()
.should(QueryBuilders.termQuery(field1, value3)
.should(QueryBuilders.boolQuery().must(QueryBuilders.termQuery(field1, value1))
.must(QueryBuilders.termQuery(field2, value2)))
);
但是 should
方法不使用 BoolQueryBuilder
。正确的做法是什么?非常感谢。
你快完成了,你搞砸了一个括号。但是让我们用更易读的代码重写您的查询:
BoolQueryBuilder first = QueryBuilders.boolQuery()
.must(QueryBuilders.termQuery(field1, value1))
.must(QueryBuilders.termQuery(field2, value2));
BoolQueryBuilder second = QueryBuilders.termQuery(field1, value3);
BoolQueryBuilder filter = new BoolQueryBuilder()
.should(first)
.should(second);