我想知道如何将以下两个查询加入到一起。
标准条件查询
Criteria result1 = session.createCriteria(Store.class).add(Restrictions.eq("department.name", category));
和FullTextSearch
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和关键字参数传递了其他参数,我不想完全依赖关键字搜索。有人知道如何让这些工作在一起吗?
感谢。
答案 0 :(得分:4)
Hibernate Search文档实际上不鼓励将Criteria
个查询与全文搜索查询结合使用(指定获取类型除外)。
只能调整获取模式,不要应用任何其他模式 限制。虽然它已知在Hibernate Search 4中使用,但使用 您的Criteria查询应该是限制(即where子句) 尽可能避免。如果getResultSize()将抛出SearchException 与限制条件一起使用。
另见http://docs.jboss.org/hibernate/search/4.4/reference/en-US/html_single/index.html#d0e5722
答案 1 :(得分:2)
对于将来可能需要此功能的任何人,这将演示如何使用hibernate搜索执行其他查询限制。
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);
答案 2 :(得分:1)