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

dsg*_*sgr 4 java elasticsearch spring-data-elasticsearch

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

我真的需要像((A and B) or (C and D) or (E and F and G)) 这样的东西

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

但是我无法在一个查询中实现 OR 逻辑,我必须向 Elasticsearch 发出单独的请求:

  • 一个用于(A 和 B),
  • 一个用于(C 和 D),等等......

Mar*_*lze 5

您可以使用布尔查询对 OR 和 AND 查询建模:

在您的示例中,它是:

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


P.J*_*sch 1

目前这是不可能的,有一个Jira 问题。这是我希望尽快解决的问题之一,但目前我们正在努力准备 4.0 版本。

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