我們每隔7小時左右對Lucene索引和增量索引每7天進行一次全部重新索引(即從頭開始創建索引)。我們的索引大約有700,000個文檔,全部索引大約需要17個小時(這不是問題)。在Lucene中增加索引之後應該優化索引嗎?
當我們做增量索引,在過去的兩個小時之內發生變化,我們只有索引的內容,因此需要少得多的時間 - 半小時左右。但是,我們已經注意到這段時間(大概10分鐘)花費了很多時間來運行IndexWriter.optimize()方法。
的LuceneFAQ提到:
的的IndexWriter類支持壓實索引數據庫和加快查詢的優化()方法。執行文檔集的完整索引或索引的增量更新後,您可能想要使用此方法。如果您的增量更新頻繁添加文檔,您只需稍後執行一次優化,以避免優化的額外開銷。
...但這似乎沒有給出「頻繁」含義的定義。優化是CPU密集型和非常IO密集型的,所以我們寧願不這樣做,如果我們能夠擺脫它的話。在未優化的索引上運行查詢的命中率有多高(特別是在完全重新索引之後,與20個增量索引(例如50,000個文檔發生更改)後的查詢性能相比)?我們應該在每個增量指數之後進行優化還是性能不理想?
這些變化*是在黑暗中沒有它們的拍攝。 – 2008-09-23 11:18:21