如何使用Spring Data Elasticsearch使用OR逻辑创建对Elasticsearch的复杂查询?

问题描述 投票:0回答:4

我正在寻找最佳方法,以使用Java的OR逻辑对Elasticsearch进行复杂的查询。

我真的需要类似[[((A和B)或(C和D)或(E和F和G))。

现在我使用ElasticsearchTemplate和org.springframework.data.elasticsearch.core.query.Criteria.class

但是我无法在一个查询中实现OR逻辑,因此我必须对Elasticsearch进行单独的请求:

    一个代表(A和B),
  • 一个用于(C和D),依此类推...
java elasticsearch spring-data-elasticsearch
4个回答
1
投票
目前无法实现,为此需要一个Jira issue。这是我想尽快解决的问题之一,但目前我们正在努力使4.0版本准备就绪。

A,这需要对Criteria类进行整体重写才能具有此功能,但是我们当然不能破坏现有功能。因此,这不能通过快速修复来完成(否则,我已经在去年12月修复了它)。


1
投票
您可以使用布尔查询来为OR和AND查询建模:

在您的示例中为:

boolQuery().should(boolQuery().must(A).must(B)) .should(boolQuery().must(C).must(D)) .should(boolQuery().must(E).must(F).must(G));


0
投票
elasticSearch中的AND是必须OR或应该是,并且您也必须获得AND AND的MustNot

您可以通过bool查询将其连接起来,例如此示例https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html


0
投票
更新:抱歉,我的逻辑错误,因为AND运算符优先于OR运算符,只需删除括号即可。

我认为以下逻辑将起作用

(((A和B)或(C和D)或(E和F和G))= A和B或C和D或E和F和G
© www.soinside.com 2019 - 2024. All rights reserved.