2011-03-21 54 views
4

我有一個程序運行了2天,爲大約1.6億個文本文件構建了一個Lucene索引,並且在程序結束後,我嘗試搜索索引並找到索引沒有正確構建,indexReader.numDocs()返回0.我檢查了索引目錄,它看起來不錯,所有的索引數據似乎在那裏,目錄是1.5千兆字節大小。在將索引文件添加到索引後忘記關閉Lucene IndexWriter

我檢查了我的代碼,發現我忘記調用indexWriter.optimize()和indexWriter.close(),我想知道是否有可能重新優化()索引,所以我不需要從頭重建整個索引?我真的不希望該計劃再花2天時間。

+1

你怎麼知道,索引是腐敗的?嘗試在LUKE http://www.getopt.org/luke/中打開,看它是否可以顯示文檔! – Narayan 2011-03-21 06:27:13

回答

3

調用IndexWriter.optimize()不是必需的,可以通過重新打開索引在以後調用。它只是優化索引中的文檔以獲得更好的讀取性能,並且不會影響任何內容。

但是,如果您忘記了撥打IndexWriter.close(),那麼您的索引可能不完整。由於您處理了很多文檔,因此可能會沖刷大部分文檔,因此希望您只需重新編制最後一個文檔。使用Luke爲用戶界面建議快速瀏覽索引,看看它在什麼狀態。

+0

感謝您的回覆。我想我需要重新索引所有文件,因爲我不知道哪些文件沒有被刷新,我需要的索引是準確的。 – neevek 2011-03-21 09:14:33

+0

您可以遍歷索引中的文檔以確定哪些文檔存在,然後重新索引所有內容。見http://stackoverflow.com/questions/2311845/is-it-possible-to-iterate-through-documents-stored-in-lucene-index – WhiteFang34 2011-03-21 09:35:18