我从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.
如何将结果限制为仅返回一个匹配?
答案 0 :(得分:1)
“戴尔桌面”可能不是一个单一的术语。你应该尝试将其作为短语进行搜索。
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中记录的查询解析器