hibernate - 如何在 hibernate 搜索的ManytoOne Join字段上应用where子句?

标签 hibernate lucene hibernate-search

我有一个产品表,它包含字段名称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/

相关文章:

java - 执行 Lucene 通配符搜索

hibernate - hibernate 全文搜索-按相关性排序结果

hibernate - 对象的动态延迟加载不起作用

java - 无法执行语句更新

java - 没有枚举的状态模式和 hibernate

java - Lucene Apache 不保留我的旧索引

elasticsearch - Elasticsearch - 更像这个返回空结果的查询

java - Spring hibernate java.sql.SQLException : The result set is closed

hibernate - Elasticsearch 需要数据库吗?

java - Hibernate 搜索结果太多