使用条件查询限制联接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查询为您进行过滤。