Lucene4.3進階開發之二渡天劫( 五)

    在本篇,咱們再來簡單回顧下,IndexWriterConfig的做用。
java

    IndexWriterConfig保存了一些運行時的配置參數,這些參數會在程序運行期間一直存在,因此在大多數時候咱們只須要一份單例的IndexWriterConfig便可,而IndexWriterConfig又是lucene內部實現的線程安全的類,因此在一些須要同步的場景時,咱們不必給IndexWriterConfig在應用外圍,再加上本身的線程安全邏輯,IndexWriterConfig裏面的IndexWriterConfig.setRAMBufferSizeMB(double)方法和IndexWriterConfig.setRAMBufferSizeDocs(int)方法,是2個比較重要的調優方法,通常狀況下,咱們能夠根據本身服務器的配置,來適當的加大這個參數的比值,經過更大的參數,來實現更給力的批處理添加,固然這個也得根據咱們的實際環境以及磁盤IO等等來定。安全

    IndexWriter是負責建立和維護索引的重要的類,一些配置信息的獲取主要來自IndexWriterConfig類,另外咱們還須要一個文件目錄來存放索引,因此咱們常常看到以下代碼:
服務器

IndexWriter writer=new IndexWriter(directory, writerConfig);

之因此說IndexWriter是一個很重要的索引管理類,不只僅是由於它提供基於操做索引的增刪改查的能力,並且一個很重要的表現就是,它具備二階段提交的事務能力,看源碼咱們就會發現它實現了2個接口,一個Closeable接口和TwoPhaseCommit接口:性能

public class IndexWriter implements Closeable, TwoPhaseCommit{

正是因爲TwoPhaseCommit接口,因此IndexWriter才具有了2階段的事務功能,以及可恢復的回滾功能,這個功能,在某些突發的意外狀況能夠正確的保證索引結構的安全和穩定,即便是索引添加失敗,也能夠經過回滾功能,恢復上一次提交前的狀態。spa

下面的是IndexWriter裏面,比較重要和經常使用的幾個方法:線程

最後,在嘮叨幾句,在上面的一些方法中,有幾個方法時很是有用的,基本的增刪改的那個就很少說了,除此以外還要注意的是,addIndexes(IndexReader... readers) 這個方法,由於lucene默認的任什麼時候候都只能單線程寫的侷限性,因此在大批量建索引的時候,這多是一個影響的性能的環節,因此建議使用多個線程建索引,分別建在不一樣的目錄,那麼最後就存在一個問題,咱們怎麼合併索引? 這個時候就是這個方法大顯身手的時候了,使用它能夠建多份索引合併成一份索引,或許你還想提高性能,你也能夠開啓複合索引,但這個針對少寫多讀的場景是很是適合 的,若是更新頻繁,那麼並不適合使用複合索引。code

另一個forceMerge(int maxNumSegments) 這個方法,是合併索引裏面段文件的方法,經過合併一些小段,能夠用來,壓縮空間,一樣的對於提高性能也是有必定效果的,注意這個參數並非意味着越小越好,當咱們索引很大的時候,合併成多個段,也是一個不錯的選擇。 索引

相關文章
相關標籤/搜索