我有一个产品表,它包含名称, SKU ,描述和产品字段category (与产品类别表的多对一关系)。我使用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的产品。
有人能建议我怎么做吗?
谢谢&问候 维杰
答案 0 :(得分:2)
这样的事情应该有效(你需要使用 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();
像这样的东西。这取决于您实际配置的具体方式。实际上,在制作示例时,您应该讨论实体而不是表格,并且应该为已注释的实体发布代码。