lucene 索引合並策略



在索引算法確定的情況下,最為影響Lucene索引速度有三個參數--IndexWriter中的 MergeFactor, MaxMergeDocs, RAMBufferSizeMB 。這些參數無非是控制內外存交換和索引合並頻率,從而達到提高索引速度。當然這些參數的設置也得依照硬件條件靈活設置。

MaxMergeDocs(針對doc)該參數決定寫入內存索引文檔個數,到達該數目后就把該內存索引寫入硬盤,生成一個新的索引segment文件。
所以該參數也就是一個內存buffer,一般來說越大索引速度越快。
MaxBufferedDocs這個參數默認是disabled的,因為Lucene中還用另外一個參數(RAMBufferSizeMB)控制這個bufffer的索引文檔個數。
其實MaxBufferedDocs和RAMBufferSizeMB這兩個參數是可以一起使用的,一起使用時只要有一個觸發條件滿足就寫入硬盤,生成一個新的索引segment文件。

RAMBufferSizeMB(針對doc)
控制用於buffer索引文檔的內存上限,如果buffer的索引文檔個數到達該上限就寫入硬盤。當然,一般來說也只越大索引速度越快。
當我們對文檔大小不太確定時,這個參數就相當有用,不至於outofmemory error.

MergeFactor(針對segment)這個參數是用於子索引(Segment)合並的。
Lucene中索引總體上是這樣進行,索引先寫到內存,觸發一定限制條件后寫入硬盤,生成一個獨立的子索引-lucene中叫Segment。一 般來說這些子索引需要合並成一個索引,也就是optimize(),否則會影響檢索速度,而且也可能導致open too many files。
MergeFactor 這個參數就是控制當硬盤中有多少個子索引segments,我們就需要現把這些索引合並沖一個稍微大些的索引了。
MergeFactor這個不能設置太大,特別是當MaxBufferedDocs比較小時(segment 越多),否則會導致open too many files錯誤,甚至導致虛擬機外面出錯。

Note: Lucene 中默認索引合並機制並不是兩兩合並,是多個segment 合並成最終的一個大索引,所以MergeFactor越大耗費內存越多,索引速度也會快些,但我的感覺太大譬如300,最后合並的時候還是很滿。 Batch indexing 應 MergeFactor>10

 * 當MergeFactor值較小時,索引時使用的內存較少,檢索速度較快,而索引速度較慢;
 * 當MergeFactor值較大時,索引時使用的內存較多,檢索速度較慢,而索引速度較快。 MergeFactor的默認值是10

 

setUseCompoundFile(true)

使用復合文件,在創建索引庫時,會合並多個 Segment 文件到一個 .cfs 中, 時間會加長一些,此方式有助於減少索引文件數量,減少同時打開的文件數量。

關閉復合文件選項,這樣做會增加搜索和索引使用的文件句柄的數量,但會加快建立索引的速度。

可以通過使用JProfiler來檢測lucene的進程活動情況,判斷出進程在何時進行處理,以及處理的時間,從而有依據並有針對性的對lucence優化!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM