结合hibernate全文搜索和JPA查询
Posted
技术标签:
【中文标题】结合hibernate全文搜索和JPA查询【英文标题】:Combine hibernate full text search and JPA query 【发布时间】:2015-02-09 03:36:20 【问题描述】:我最近熟悉了 Hibernate 搜索 API。如何对实体进行全文搜索并按特定字段过滤结果?例如:
final FullTextEntityManager ftem = Search.getFullTextEntityManager(em);
final QueryBuilder qb = ftem.getSearchFactory()
.buildQueryBuilder().forEntity(Item.class).get();
final org.apache.lucene.search.Query query = qb
.keyword()
.onFields(Item_.CONTENT)
.matching(match)
.createQuery();
/* also here I want to filter the results for all the Items in which category equals to 2 */
final FullTextQuery persistenceQuery = ftem.createFullTextQuery(query, Item.class);
final List<Item> result = persistenceQuery.getResultList();
【问题讨论】:
我也有同样的问题!不幸的是,我还没有发现任何有用的东西。如果您找到解决方案,也请分享答案。 【参考方案1】:对于这种情况,您可以使用 Hibernate-search Filters。您还需要索引过滤所需的特定字段,但查询本身不需要它。
http://docs.jboss.org/hibernate/search/5.5/reference/en-US/html/ch05.html#query-filter
我自己用它,效果很好。
【讨论】:
感谢您的回答。但我不知道索引例如 userId 字段并对其应用过滤器是否正确!!就像我可能有 20,000,000 条记录,其中 1,000,000 条具有相同的 userId。在 userId 上创建过滤器是否足够快? 我不确定这是否真的有问题。如果您对该领域使用一些简单的分析器。如果您想在 SQL DB 中过滤该字段,您可能还会对该字段使用一些索引。以上是关于结合hibernate全文搜索和JPA查询的主要内容,如果未能解决你的问题,请参考以下文章
使用 JPA (Eclipselink) 在 H2 数据库中执行全文搜索
如何明智地结合 shingles 和 edgeNgram 来提供灵活的全文搜索?