2013-01-15 110 views
2

對於我正在進行的項目,我有一個近1000萬個文檔的索引。對於範圍從10k到5m的文檔,我需要定期添加字段。批量更新策略lucene?

Lucene 4支持更新文檔(基本上刪除和添加)。將該字段添加到更大的文檔集合的方法是什麼?

我已經試過到目前爲止使用SearcherManager包裝一個IndexWriter,並且使小搜索那些尚未包含該領域的文件,但匹配在BooleanQuery包裝這些的Query我很感興趣, 。然後,我遍歷ScoreDocs,檢索文檔,添加我的新字段,並與每個文檔存儲的uuid調用writer.updateDocument。然後我打電話commitmaybeRefreshBlocking,重新獲取IndexSearcher並再次搜索。這有點慢,似乎是一種天真的做法。

回答

2

你只需要要求IndexSearcher的在你的搜索將返回根據您添加字段不同的結果。

如果您的搜索不會受到您添加的字段的影響,那麼您只需要在將文檔添加到索引時重新獲取IndexSearcher

因此,如果您只在必要時重新搜索IndexSearcher,而不是在每次搜索之前,它會簡化和加快速度。

+0

謝謝馬克。對於我的情況,我認爲需要重新獲得,因爲我只想處理那些沒有額外領域的文檔;最快(?)的方式來確定這是再次搜索..我想知道,雖然'正確的'批量將是,因爲可以在批處理更多的文件,搜索,承諾等更少的開銷。 – RobAu