如何使用 Hibernate Search 查询 DSL 匹配多个术语?
How to get many terms matched using Hibernate Search query DSL?
当我搜索 "cars blue" 时,我得到了匹配 "cars" 或 "blue" 的所有结果,但我需要将它们都匹配。我读过有关将 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();
此博客 post 解释此功能的基本原理也可能有帮助:http://in.relation.to/2017/04/27/simple-query-string-what-about-it/ .
当我搜索 "cars blue" 时,我得到了匹配 "cars" 或 "blue" 的所有结果,但我需要将它们都匹配。我读过有关将 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();
此博客 post 解释此功能的基本原理也可能有帮助:http://in.relation.to/2017/04/27/simple-query-string-what-about-it/ .