使用条件查询限制联接hibernate搜索查询

使用条件查询限制联接hibernate搜索查询,hibernate,lucene,hibernate-search,Hibernate,Lucene,Hibernate Search,我想知道您如何将以下两个查询合并在一起 标准条件查询 Criteria result1 = session.createCriteria(Store.class).add(Restrictions.eq("department.name", category)); 还有一个完整的文本搜索 QueryBuilder queryBuilder = fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(Store.c

我想知道您如何将以下两个查询合并在一起

标准条件查询

Criteria result1 = session.createCriteria(Store.class).add(Restrictions.eq("department.name", category));
还有一个完整的文本搜索

    QueryBuilder queryBuilder = fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(Store.class).get();
    Query luceneQuery = queryBuilder.keyword().onFields("productTitle").matching(keyword).createQuery();

    // wrap Lucene query in a javax.persistence.Query
    org.hibernate.Query fullTextQuery = fullTextSession.createFullTextQuery(luceneQuery, Store.class);
    fullTextQuery.setMaxResults(15);
    fullTextQuery.setFirstResult(0);
我通过URL和关键字参数传递附加参数,我不想完全依赖关键字搜索。有人知道如何让这些一起工作吗


谢谢

对于将来可能需要此功能的任何人,这将演示如何使用hibernate search执行额外的查询限制

    QueryBuilder queryBuilder = fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(Store.class).get();
    Query luceneQuery = queryBuilder.keyword().onFields("productTitle").matching(keyword).createQuery();

    org.hibernate.search.FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery(luceneQuery, Store.class);

   Criteria query = session.createCriteria(Store.class)
            .createAlias("department", "department")
            .add(Restrictions.eq("department.name", category));

    fullTextQuery.setCriteriaQuery(query);
    fullTextQuery.setMaxResults(15);
    fullTextQuery.setFirstResult(0);

Hibernate搜索文档实际上不鼓励将
条件
查询与全文搜索查询结合使用(指定提取类型除外)

只能调整取回模式,不要应用任何其他模式 限制。虽然它在HibernateSearch4中工作,但是使用 您的条件查询的限制(即where子句)应该是 尽可能避免。如果发生以下情况,getResultSize()将引发SearchException 与带有限制的条件结合使用


另请参见

此问题的解决方案是使用可在此处找到的过滤器


我认为您的示例缺少“setCriteriaQuery(criteria);”你有什么建议可以更好地处理这些限制吗?最好的方法是索引查询所需的所有数据,然后执行一个Lucene查询。在您的例子中,您还需要输入部门名称,然后创建一个Lucene BooleanQuery。根据用例的不同,您还可以将查询与全文过滤器结合使用。查看文档以获得有关这些功能的更多信息。如果作者告诉他们为什么不鼓励这些功能,或者至少指出替代功能的方向,那就太好了。使用HQL过滤数据并对其进行全文搜索是一个不错的想法。相反,似乎应该使用Lucene查询为您进行过滤。