如何在Hibernate Search中故意忽略过滤器的子查询?

时间:2015-10-30 07:28:58

标签: java hibernate lucene hibernate-search

我会尝试描述问题。 让我们假设我们有lucene文档,字段为TITLE,DESC,TYPE。 现在我按照这样的字段搜索:

org.​apache.​lucene.​search.Query titleQuery = prepareTitleQuery();
org.​apache.​lucene.​search.Query descQuery = prepareDescQuery();
org.​apache.​lucene.​search.Query mainQuery = queryBuilder.bool().should(titleQuery).should(descQuery).createQuery()
FullTextQuery fullTextQuery = fullTextEntityManager.createFullTextQuery(mainQuery, Class.class);
fullTextQuery.enableFullTextFilter("typeFilter").setParameter("types", types);

这是非常简化的代码,只是为了全面了解我正在做的事情。

现在示例:

TITLE | DESC | TYPE 
Some title | hibernate search | 1
Another title | lucene | 1, 3
Something here | search lucene | 2, 8, 3

我这样搜索:

TITLE:Another
DESC:lucene
TYPE:1

它只会找到第二行。但我需要第三行。有没有办法让过滤器仅适用于titleQuery,而不适用于descQuery?此外,我还有另一个适用于两者的过滤器和排序。

1 个答案:

答案 0 :(得分:0)

过滤器应用于整体搜索结果。它们不适用于组合查询的某些部分。我想你最好的是将标题查询写成一个布尔查询本身,由两部分组成 - 一个用于匹配标题,另一个用于匹配类型。据我所知,这是你想要达到的目标。