我有一个产品表,它包含字段名称、SKU、描述和产品类别(与产品类别表的多对一关系)。我使用 Hibernate Search 对产品建立了索引,并编写了以下代码来执行搜索:
FullTextEntityManager fullTextEntityManager = org.hibernate.search.jpa.Search
.getFullTextEntityManager(getEntityManager());
QueryBuilder qb = fullTextEntityManager.getSearchFactory()
.buildQueryBuilder().forEntity(Product.class).get();
org.apache.lucene.search.Query query = qb.keyword().fuzzy()
.onFields("name", "sku", "uniqueid", "description")
.matching(value).createQuery();
javax.persistence.Query persistenceQuery = fullTextEntityManager
.createFullTextQuery(query, Product.class);
现在我想在产品类别上添加一个 where 条件。例如,我只想搜索productCategory.Id=101的产品。
有人可以建议我如何做到这一点吗?
感谢和问候 维杰
最佳答案
类似的东西应该可以工作(您需要使用bool组合查询):
Query fuzzyQuery = qb.keyword()
.fuzzy()
.onFields("name", "sku", "uniqueid", "description")
.matching(value)
.createQuery();
Query categoryQuery = qb.keyword()
.onField("productCategory.Id")
.matching("101")
.createQuery();
Query luceneQuery = qb
.bool()
.should( fuzzyQuery )
.must( categoryQuery )
.createQuery();
类似这样的事情。这实际上取决于您如何准确配置实体。实际上,在制作示例时,您应该讨论实体而不是表格,并且应该发布带注释的实体的代码。
关于hibernate - 如何在 hibernate 搜索的ManytoOne Join字段上应用where子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13486751/