如何在休眠弹性搜索中组合多个QueryDescriptor

How to combine multiple QueryDescriptor in hibernate elastic search

我是休眠弹性搜索的新手。我看了官方文档,发现要从弹性搜索中获取数据,我必须编写以下代码。

FullTextSession fullTextSession = Search.getFullTextSession(session);
QueryDescriptor query = ElasticsearchQueries.fromQueryString("title:tales");
List<?> result = fullTextSession.createFullTextQuery(query, ComicBook.class).list();

但我想了解如何将多个 QueryDescriptor 组合到 BooleanJunction 中,因为它只采用 lucene 查询。

ElasticsearchQueries.fromQueryString 是一种避免 Hibernate Search DSL 的方法,其中特别包括 BooleanJunction。您可以使用 ElasticsearchQueries.fromQueryString 或 Hibernate Search DSL,但不能在同一查询中同时使用两者。

如果你真的想坚持使用ElasticsearchQueries.fromQueryString,这就变成了理解Elasticsearch查询语法的问题。类似的东西应该可以解决问题

FullTextSession fullTextSession = Search.getFullTextSession(session);
QueryDescriptor query = ElasticsearchQueries.fromQueryString("title:tales AND someOtherField:someOtherValue");
List result = fullTextSession.createFullTextQuery(query, ComicBook.class).list();

您可以查看 Elasticsearch 文档以获取有关语法的更多信息:https://www.elastic.co/guide/en/elasticsearch/reference/2.4/query-dsl-query-string-query.html

请注意,除非您的查询特别复杂,否则您不需要使用 ElasticsearchQueries.fromQueryString; Hibernate Search DSL 应该工作得同样好,并且可能会节省您一些时间来尝试修复您的查询(因为您将使用 Java 代码,这些代码主要在编译时检查,而不是在运行时验证的 String 查询)。可以在此处找到有关查询 DSL 的更多信息:https://docs.jboss.org/hibernate/stable/search/reference/en-US/html_single/#search-query