我会尝试描述问题。 让我们假设我们有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
?此外,我还有另一个适用于两者的过滤器和排序。
答案 0 :(得分:0)
过滤器应用于整体搜索结果。它们不适用于组合查询的某些部分。我想你最好的是将标题查询写成一个布尔查询本身,由两部分组成 - 一个用于匹配标题,另一个用于匹配类型。据我所知,这是你想要达到的目标。