0

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

我想创建自己的过滤器类,但我不能直接使用内部 Lucene 文档 ID,因为它们是按段指定的。关于如何解决这个问题的任何想法?

4

1 回答 1

1

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

于 2012-05-16T23:21:30.800 回答