lucene索引優化前後效能對比及優化方針

2021-05-23 13:00:50 字數 2213 閱讀 1899

針對目前線上產品進行壓力,發現不少問題,現在做個總結

我們的產品是乙個問答系統,主要核心技術是lucene搜尋,針對不同例項,分成不同的索引目錄,有n個例項會存在n個indexwriter

目前測試資料量及環境如下:

6核4g

資料量1000萬

問題字數:平均14個字

問題答案字數:平均418個字

優化前1000萬資料量需要構建索引16個小時,io已經極限

優化後1000萬資料量針對不同例項對比如下

索引構建所併發數

單例項構建索引

兩個例項兩個執行緒併發構建索引

三個例項三個執行緒併發構建索引

記憶體優化時間

182655毫秒3

分鐘例項1

192110

毫秒3.20

分鐘例項1

189883

毫秒3.164

分鐘例項2

192114

毫秒3.20

分鐘例項2

189889

毫秒3.164

分鐘例項3

189879

毫秒3.164

分鐘磁碟優化時間

1514423

毫秒25

分鐘例項1

3820694

毫秒63.678

分鐘例項1

4874940

毫秒81.249

分鐘例項2

3322985

毫秒55.383

分鐘例項2

4579260

毫秒76.321

分鐘例項3

4807620

毫秒80.127

分鐘單獨構建索引的時間

4663807

毫秒1.295

個小時例項1

7867191

毫秒2.185

小時例項1

13925086

毫秒3.868

小時例項2

7776207

毫秒2.16

小時例項2

14423098

毫秒4.006

小時例項3

14349161

毫秒3.985

小時構建索引和優化總時間

6196072

毫秒1.721

小時例項1

11811529

毫秒3.28

小時例項1

18991299

毫秒5.275

小時例項2

11202412

毫秒3.11

小時例項2

19212047

毫秒5.336

小時例項3

19356620

毫秒5.376小時

優化方針:

1、多執行緒構建索引

採用jdk1.5提供的執行緒池多執行緒構建索引

2、構建索引的指令碼調優

採用游標方式抓取資料而不是分頁抓取資料

3、lucene api調優

indexwriter.setrambuffersizemb(256);// m

indexwriter.setusecompoundfile(false);// 多檔案索引

indexwriter.setmergefactor(10);

lucene效能優化

優化搜尋效能 雖然建立索引的操作非常耗時,但是那畢竟只在最初建立時才需要,平時只是少量的維護操作,更何況這些可以放到乙個後台程序處理,並不影響使用者搜尋。我們建立索引的目的就是給使用者搜尋,所以搜尋的效能才是我們最關心的。下面就來 一下如何提高搜尋效能。1 將索引放入記憶體 這是乙個最直觀的想法,因...

提高Lucene索引效能

當索引的檔案不多時,用 lucene 預設的設定就能得到很好的效能。但是,如果索引大量檔案,就得通過一些手段去提高 lucene 索引效能。1 索引效能差的原因 1 lucene 索引過程 在索引檔案的過程中,lucene 不是直接將檔案索引到磁碟上,而是首先快取,然後在寫到磁碟。如上圖所示。2 索...

Lucene 索引優化 引數詳解

indexwriter 1 maxfieldlength 預設值 10000 一般設定為integer.max value。即擷取該域中的前10000個項 或片語 進行索引並被檢索,前10000個以外的項將不被索引和檢索。該值可在索引中隨時更改,並即時生 效 僅對更改後的索引生效,前面的依舊 2 s...