3

我想知道您如何将以下两个查询连接在一起。

标准条件查询

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 加上一个关键字参数传入附加参数,我不想完全依赖关键字搜索。有人知道如何使这些一起工作吗?

谢谢。

4

3 回答 3

4

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

只能调整获取模式,不要应用任何其他限制。虽然已知它从 Hibernate Search 4 开始工作,但应尽可能避免在 Criteria 查询上使用限制(即 where 子句)。如果与有限制的 Criteria 结合使用,getResultSize() 将抛出 SearchException。

另见http://docs.jboss.org/hibernate/search/4.4/reference/en-US/html_single/index.html#d0e5722

于 2013-10-11T11:01:50.190 回答
2

对于将来可能需要此功能的任何人,这将演示如何使用休眠搜索进行额外的查询限制。

    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);
于 2013-10-11T06:53:22.323 回答
1

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

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

于 2013-10-13T15:14:13.100 回答