【问题标题】:Hibernate Search Restricting ResultsHibernate 搜索限制结果
【发布时间】:2013-10-11 19:12:14
【问题描述】:

我从hibernate 文档构建了一个非常基本的hibernate 搜索。我很难限制结果,并且想就我做错的事情提出一些建议。

场景

假设我正在使用一个带有这样描述标题的实体

@Field(index=Index.YES, analyze=Analyze.YES, store=Store.NO)
private String name;

将以下数据添加到索引中

1. Dell Laptop
2. Dell Desktop
3. HP Desktop

我的搜索看起来像这样,

    FullTextSession fullTextSession = Search.getFullTextSession(sessionManager.getSession());
    QueryBuilder queryBuilder = fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(Computer.class).get();
    Query luceneQuery = queryBuilder.keyword().onFields("name").matching(keyword).createQuery();

    org.hibernate.search.FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery(luceneQuery, Computer.class);

现在,当您使用以下内容进行关键字搜索时,一切都会正常运行,

Dell returns Dell Laptop, Dell Desktop
Desktop returns Dell, HP

但是,当您进行这样的搜索时,它不会正确限制结果

Dell Desktop returns Dell Laptop, Dell Desktop, HP Desktop. 

如何将结果限制为只返回一个匹配项?

【问题讨论】:

    标签: hibernate lucene hibernate-search


    【解决方案1】:

    “Dell Desktop”可能不是一个单一的术语。您应该尝试将其作为短语进行搜索。

    Query luceneQuery = queryBuilder.phrase().onField("name").sentence(keyword).createQuery();
    org.hibernate.search.FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery(luceneQuery, Computer.class);
    

    您还可以使用示例 5.2 中的 Hibernate Search 文档 Chapter 5 中记录的查询解析器

    【讨论】:

      猜你喜欢
      • 2016-10-02
      • 1970-01-01
      • 1970-01-01
      • 2012-01-24
      • 2017-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-24
      相关资源
      最近更新 更多