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

How to intentionally ignore subquery of a filter in Hibernate Search?

我会尽量描述问题。 假设我们有包含字段 TITLE、DESC、TYPE 的 lucene 文档。 现在我按这样的字段搜索:

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?我还有另一个过滤器和排序应该适用于两者。

过滤器应用于整体搜索结果。它们不适用于组合查询的部分。我想你最好的办法是将标题查询本身写成布尔查询,它由两部分组成——一部分用于匹配标题,另一部分用于匹配类型。据我了解,这就是您想要实现的目标。