轉(zhuǎn)自:http://blog.csdn.net/pangliyewanmei/article/details/5733921
在索引算法確定的情況下,最為影響Lucene索引速度有三個參數(shù)--IndexWriter中的 MergeFactor, MaxMergeDocs, RAMBufferSizeMB 计螺。這些參數(shù)無非是控制內(nèi)外存交換和索引合并頻率,從而達到提高索引速度泞边。當(dāng)然這些參數(shù)的設(shè)置也得依照硬件條件靈活設(shè)置袖肥。
MaxMergeDocs
該參數(shù)決定寫入內(nèi)存索引文檔個數(shù),到達該數(shù)目后就把該內(nèi)存索引寫入硬盤员凝,生成一個新的索引segment文件橙困。
所以該參數(shù)也就是一個內(nèi)存buffer瞧掺,一般來說越大索引速度越快。
MaxBufferedDocs這個參數(shù)默認是disabled的凡傅,因為Lucene中還用另外一個參數(shù)(RAMBufferSizeMB)控制這個bufffer的索引文檔個數(shù)辟狈。
其實MaxBufferedDocs和RAMBufferSizeMB這兩個參數(shù)是可以一起使用的,一起使用時只要有一個觸發(fā)條件滿足就寫入硬盤夏跷,生成一個新的索引segment文件上陕。
RAMBufferSizeMB
控制用于buffer索引文檔的內(nèi)存上限,如果buffer的索引文檔個數(shù)到達該上限就寫入硬盤拓春。當(dāng)然释簿,一般來說也只越大索引速度越快。
當(dāng)我們對文檔大小不太確定時硼莽,這個參數(shù)就相當(dāng)有用庶溶,不至于outofmemory error.
MergeFactor
這個參數(shù)是用于子索引(Segment)合并的。
Lucene中索引總體上是這樣進行懂鸵,索引現(xiàn)寫到內(nèi)存偏螺,觸發(fā)一定限制條件后寫入硬盤,生成一個獨立的子索引-lucene中叫Segment匆光。一般來說這些子索引需要合并成一個索引套像,也就是optimize(),否則會影響檢索速度终息,而且也可能導(dǎo)致open too many files夺巩。
MergeFactor 這個參數(shù)就是控制當(dāng)硬盤中有多少個子索引segments,我們就需要現(xiàn)把這些索引合并沖一個稍微大些的索引了周崭。
MergeFactor這個不能設(shè)置太大柳譬,特別是當(dāng)MaxBufferedDocs比較小時(segment 越多),否則會導(dǎo)致open too many files錯誤续镇,甚至導(dǎo)致虛擬機外面出錯美澳。
Note: Lucene 中默認索引合并機制并不是兩兩合并,好像是多個segment 合并成最終的一個大索引,所以MergeFactor越大耗費內(nèi)存越多制跟,索引速度也會快些舅桩,但我的感覺太大譬如300,最后合并的時候還是很滿雨膨。Batch indexing 應(yīng) MergeFactor>10