Lucene使用docIds过滤

时间:2012-05-16 22:28:06

标签: filter lucene

我正在尝试执行以下操作:我想通过分别查询每个字段然后将前k个匹配添加到此集来创建一组候选项。完成后,我需要对此候选集运行另一个查询。 我现在实现它的方式是使用带有BooleanQuery的QueryWrapperFilter,该BooleanQuery匹配每个候选文档的唯一id字段。但是,这意味着我必须为每个候选文档调用IndexSearcher.doc()。get(“docId”),然后才能将它添加到我的BooleanQuery中,这是主要的瓶颈。我只是通过MapFieldSelector(“docId)”加载docId字段。

我想创建自己的Filter类,但我不能直接使用内部Lucene doc ids,因为它们是按段指定的。有关如何处理此事的任何想法?

1 个答案:

答案 0 :(得分:1)

而不是读取存储的docId,索引字段(可能已经是)并使用FieldCache更快地检索docId。然后,不要在BooleanQuery中使用docIds,而是尝试使用TermsFilterFieldCacheTermsFilter。后面的文档描述了性能权衡。