【问题标题】:How to get many terms matched using Hibernate Search query DSL?如何使用 Hibernate Search 查询 DSL 获得许多匹配的术语?
【发布时间】:2017-12-21 17:57:56
【问题描述】:

当我搜索“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

【问题讨论】:

    标签: lucene querydsl hibernate-search


    【解决方案1】:

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

    更多详情请见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/

    【讨论】:

    • 请注意,这需要 Hiberenate Search 5.8.0 或更高版本。
    • 不错的答案,但由于 Spring Boot,我使用的是 Hibernate Search 5.6.4.Final,有什么解决方法吗?
    • 好吧,您可以在仍然使用 Spring Boot 的同时升级您的 Hibernate Search。但是如果你想保留这个版本,DSL 帮不了你。在介绍 Simple Query String 特性之前,我使用了 Lucene 的 MultiFieldQueryParser 来构建查询并将其传递给 Hibernate Search。
    猜你喜欢
    • 2011-02-20
    • 1970-01-01
    • 2013-11-15
    • 2015-07-13
    • 1970-01-01
    • 2020-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多