我是hibernate弹性搜索的新手。我已经浏览了官方文档,我发现,为了从弹性搜索中获取数据,我必须编写以下代码。
FullTextSession fullTextSession = Search.getFullTextSession(session);
QueryDescriptor query = ElasticsearchQueries.fromQueryString("title:tales");
List<?> result = fullTextSession.createFullTextQuery(query, ComicBook.class).list();
但是我试图理解如何将多个QueryDescriptor组合成BooleanJunction,因为它只接受lucene查询。
答案 0 :(得分:1)
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查询)。有关Query DSL的更多信息,请访问:https://docs.jboss.org/hibernate/stable/search/reference/en-US/html_single/#search-query