lucene 如何先执行查询后执行过滤

版本: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 将会先执行查询,然后对查询结果执行过滤。