【问题标题】:How to apply where clause on ManytoOne Join field on hibernate search?如何在休眠搜索中的 ManytoOne Join 字段上应用 where 子句?
【发布时间】:2013-01-03 17:47:13
【问题描述】:

我有一个 Product 表,它有字段 NameSKUDescriptionProduct类别(与产品类别表的多对一关系)。我使用 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 的产品。

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

感谢和问候 维杰

【问题讨论】:

    标签: hibernate lucene hibernate-search


    【解决方案1】:

    这样的事情应该可以工作(您需要使用 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();
    

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

    【讨论】:

    • 感谢您的回复。在我的产品域类中,我将类别注释为 -ManyToOne -JoinColumn(name="PL_PRODUCTCATEGORY_ID") -IndexedEmbedded private ProductCategory Productcategory;'在 ProductCategory 域类中,我将产品注释为 -OneToMany(mappedBy="Productcategory") -ContainedIn private List Products;
    • 你能建议我根据类别找出最好的方法吗?
    • 你提到的所有注解都是JPA(ORM)映射注解。要通过 Hibernate Search 索引和搜索关联,您需要使用 @IndexedEmbedded。查看文档以获取示例。
    猜你喜欢
    • 2017-04-25
    • 2014-08-13
    • 1970-01-01
    • 2015-02-01
    • 2019-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多