版本:lucene3.6
问题:现在项目中即有query又有filter,filter中有一个去重过滤器,如何让lucene先执行查询后再执行filter?如果先按某字段去重了,再查询会导某些其它字段条件致数据丢失
在 Lucene 3.6 中,您可以使用 CachingWrapperFilter 类来将过滤器缓存到内存中,从而提高查询性能。这将先执行查询,然后对查询结果执行过滤。您可以使用以下代码进行操作:
Filter filter = new YourFilter();
CachingWrapperFilter cachingFilter = new CachingWrapperFilter(filter);
TopDocs results = searcher.search(query, cachingFilter, numHits);
或者,您也可以直接使用 BooleanQuery 类来组合查询和过滤器。首先,创建一个 BooleanQuery 并将查询和过滤器作为必需项添加到其中。然后,使用您的 Searcher 执行查询:
BooleanQuery.Builder booleanQuery = new BooleanQuery.Builder();
booleanQuery.add(query, BooleanClause.Occur.MUST);
booleanQuery.add(new QueryWrapperFilter(filter), BooleanClause.Occur.MUST);
TopDocs results = searcher.search(booleanQuery.build(), numHits);
这样,Lucene 将会先执行查询,然后对查询结果执行过滤。