使用条件查询限制加入hibernate搜索查询

时间:2013-10-11 02:48:14

标签: hibernate lucene hibernate-search

我想知道如何将以下两个查询加入到一起。

标准条件查询

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和关键字参数传递了其他参数,我不想完全依赖关键字搜索。有人知道如何让这些工作在一起吗?

感谢。

3 个答案:

答案 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)

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

http://docs.jboss.org/hibernate/search/4.4/reference/en-US/html/search-query.html#query-filter