2010-04-21 45 views
1

我正在通過Lucene搜索PubMed中的文章。 20,000,000篇文章中的每一篇都有一個約250字的摘要和一個ID。用Lucene搜索時使用FieldSelector

目前,我在TopDocs對象中存儲了我的搜索,每個搜索都需要幾秒鐘。 搜索可以找到數千篇文章。 我只是對文章的ID感興趣。 Lucene是否將摘要內部加載到TopDoc中?

如果是這樣,我可以通過FieldSelectors阻止該行爲,或FieldSelectors只能與IndexReader一起使用,並且不能與IndexSearcher一起使用?

回答

1

你說得對。

當您從索引檢索文檔時,請嘗試使用SetBasedFieldSelector

正如另一張海報所指出的,重複瀏覽點擊將返回一個對象。這將爲您提供可用於使用與IndexSearcher關聯的IndexReader檢索文檔的文檔Id。

如果 IO是一個問題,因爲加載字段,你不感興趣,你應該在一個驚喜。

希望這會有所幫助,

2

不,Lucene不會將字段值加載到TopDoc中。 TopDocs僅包含每個匹配文檔的文檔編號和分數。

如果您遇到性能問題,這裏的另一個問題,SO,可以幫助你:

Optimizing Lucene performance

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