我正在寻找最佳方法,以使用Java的OR逻辑对Elasticsearch进行复杂的查询。
我真的需要类似[[((A和B)或(C和D)或(E和F和G))。
现在我使用ElasticsearchTemplate和org.springframework.data.elasticsearch.core.query.Criteria.class
。但是我无法在一个查询中实现OR逻辑,因此我必须对Elasticsearch进行单独的请求:
A,这需要对Criteria
类进行整体重写才能具有此功能,但是我们当然不能破坏现有功能。因此,这不能通过快速修复来完成(否则,我已经在去年12月修复了它)。
在您的示例中为:
boolQuery().should(boolQuery().must(A).must(B))
.should(boolQuery().must(C).must(D))
.should(boolQuery().must(E).must(F).must(G));
您可以通过bool查询将其连接起来,例如此示例https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html
我认为以下逻辑将起作用
(((A和B)或(C和D)或(E和F和G))= A和B或C和D或E和F和G