2013-05-10 57 views
-1

當我使用DirectoryReader.open打開超過100G的某個目錄,但它打開了很長時間(lucene 4.2) 有人可以告訴我什麼策略/優化我應該用來加速讀者打開? 也許應該注意索引。如何加速IndexReader.open

也許我不夠清楚的描述。

每天有超過7000萬的數據被索引。 對於每個索引數據庫的存儲空間是40G。
如果檢索支持在一個月內(30 * 40G,其實需要支持更長)我必須打開所有的indexReader,將它們添加到MultiReader中並重用它們。打開它們非常慢。我只知道設置IndexWriter的mergeFactor值。 (較大的值加快了索引,但增加了需要同時打開的文件數量。)我可以設置一個很小的值進行優化。是否有其他參數或解決方案。

+2

你有什麼嘗試嗎? – acdcjunior 2013-05-10 01:31:09

+0

你最近合併了這個指數嗎? – EJP 2013-05-10 03:10:32

+0

是的,我嘗試設置IndexWriter的mergeFactor值 – 2013-05-13 01:59:59

回答

2

打開IndexReader是一個代價高昂的操作。保留相同的IndexReader並重用它通常會更好。你可以保持它當前通過調用DirectoryReader.openIfChanged

IndexReader newReader = DirectoryReader.openIfChanged(oldReader) 
if (newReader == null) { 
    readerToUse = oldReader; 
} else { 
    readerToUse = newReader; 
    oldReader.close(); //Make sure you close the old one!! 

即使有產生變化的指數和新的讀者,這將通常仍然是一個很多比DirectoryReader.open成本更低。

+0

是的,它真的是一個昂貴的操作。但開放的速度我不能接受。但我不得不打開。 – 2013-05-13 01:58:27