使用Lucene进行搜索时使用FieldSelector

时间:2010-04-21 14:24:23

标签: lucene

我正在通过Lucene在PubMed上搜索文章。 20,000,000篇文章中的每一篇都有一个约250字和一个ID的摘要。

目前,我在TopDocs对象中存储我的搜索,每次搜索需要几秒钟。 搜索可以找到数千篇文章。 我只是对文章的ID感兴趣。 Lucene是否将摘要内部加载到TopDocs中?

如果可以,我可以通过FieldSelectors阻止这种行为,或者FieldSelectors只能使用IndexReader而不能使用IndexSearcher吗?

3 个答案:

答案 0 :(得分:2)

不,Lucene不会将字段值加载到TopDocs中。 TopDocs仅包含每个匹配文档的文档编号和分数。

如果您遇到性能问题,这里有另一个可以帮助您的SO问题:

Optimizing Lucene performance

答案 1 :(得分:2)

默认情况下,Lucene不会加载任何存储的字段。如果您只想检索ID字段,并且您可以负担加载内存中的所有ID,那么您可以按如下方式加载所有值并重复使用它们。

String[] allIDs = FieldCache.DEFAULT.getStrings(indexReader, "IDFieldName")

请检查FieldCache的答案。 Best way to retrieve certain field of all documents returned by a Lucene search

答案 2 :(得分:1)

你说的是正确的。

从索引中检索文档时尝试使用SetBasedFieldSelector

正如另一张海报所指出的,迭代点击将返回ScoreDoc个对象。这将为您提供可用于使用与IndexSearcher关联的IndexReader检索文档的文档ID。

如果 IO因为您不感兴趣的加载字段而出现问题,那么您应该感到惊喜。

希望这有帮助,