如何使用Hibernate Search查询DSL匹配多个术语?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Hibernate Search查询DSL匹配多个术语?相关的知识,希望对你有一定的参考价值。
当我搜索“汽车蓝”时,我得到的每一个结果都匹配“汽车”或“蓝色”,但我需要将它们都匹配。我已经读过关于设置一些defaultOperator
到AND
但是我找不到在哪里做,我也不能使用PhraseQuery
因为搜索查询中的术语顺序无关紧要,这是我的代码到目前为止,谢谢!
// create the query using Hibernate Search query DSL
QueryBuilder queryBuilder = fullTextEntityManager.getSearchFactory()
.buildQueryBuilder().forEntity(Articulo.class).get();
// a very basic query by keywords
BooleanJunction<BooleanJunction> bool = queryBuilder.bool();
bool.must(queryBuilder.keyword()
.onFields("description")
.matching(text)
.createQuery()
);
Query query = bool.createQuery();
FullTextQuery jpaQuery =
fullTextEntityManager.createFullTextQuery(query, Articulo.class);
return jpaQuery.getResultList();
注意:我正在使用Hibernate Search 5.6.4
答案
我想你正在寻找简单的查询字符串功能。
有关它的更多详细信息,请参阅http://docs.jboss.org/hibernate/stable/search/reference/en-US/html_single/#_simple_query_string_queries。
你有一个.withAndAsDefaultOperator()的例子:
Query luceneQuery = mythQB
.simpleQueryString()
.onField("history")
.withAndAsDefaultOperator()
.matching("storm tree")
.createQuery();
这篇博文解释了这个功能的基本原理也许也有帮助:http://in.relation.to/2017/04/27/simple-query-string-what-about-it/。
以上是关于如何使用Hibernate Search查询DSL匹配多个术语?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用带有通配符查询的 Hibernate Search 并输出结果对象列表
ElasticSearch search api的基础语法+Query DSL搜索+filter与query对比+组合查询+定位不合法的搜索