如何使用Hibernate Search查询DSL匹配多个术语?

时间:2017-12-21 17:57:56

标签: lucene querydsl hibernate-search

当我搜索“汽车蓝”时,我得到的每一个结果都匹配“汽车”或“蓝色”,但我需要将它们都匹配。我已经阅读过关于将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

1 个答案:

答案 0 :(得分:2)

我认为您正在寻找简单查询字符串功能。

有关详细信息,请参阅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/