2

我有一个Product表,它有字段NameSKUDescriptionProduct category(与产品类别表的多对一关系)。我使用 Hibernate Search 对Product进行了索引,并编写了以下代码来执行搜索:

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 的产品。

谁能建议我如何做到这一点?

感谢和问候维杰

4

1 回答 1

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();

像这样的东西。这实际上取决于您如何准确地配置您的实体。确实,您在制作示例时应该谈论实体而不是表格,并且应该发布带​​注释的实体的代码。

于 2012-11-22T10:20:12.380 回答