如何故意忽略 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
?我还有另一个过滤器和排序应该适用于两者。
过滤器应用于整体搜索结果。它们不适用于组合查询的部分。我想你最好的办法是将标题查询本身写成布尔查询,它由两部分组成——一部分用于匹配标题,另一部分用于匹配类型。据我了解,这就是您想要实现的目标。
我会尽量描述问题。 假设我们有包含字段 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
?我还有另一个过滤器和排序应该适用于两者。
过滤器应用于整体搜索结果。它们不适用于组合查询的部分。我想你最好的办法是将标题查询本身写成布尔查询,它由两部分组成——一部分用于匹配标题,另一部分用于匹配类型。据我了解,这就是您想要实现的目标。