1. 程式人生 > >solr segment合併的一些心得

solr segment合併的一些心得

簡單寫一下最近看到的一個問題。

問題:solr段合併的時候,DocID的邏輯上有些許變化,有些不再是段中的DocId加上偏移量。

定位:首先,solr的底層也都是呼叫的lucenne的程式碼,所以這一塊就跟lucene沒有什麼區別。邏輯上資料是先寫入快取的,當達到閾值的時候開始持久化到磁碟中,寫入新的段。由於段合併的邏輯,會判斷相鄰的10個段(舉例)是否達到合併的要求,如果達到合併的要求,就會進行合併生成一個新的段。
參考過,Lucene 原理與程式碼分析完整版 如果想研究lucene的話,可以好好看看,寫的很不錯。不過可能由於版本太久,合併的邏輯進行了更改。新生成的newDocId不一定等於offset+oldDocId,每一段的DocId都是從0開始重新編排的,一個段也是一個獨立的存在,在生成的索引檔案目錄中也可以看到。原始碼的處理當時是,先判斷是否有document是否被刪除,如果刪除就將後面的ID往前移,所以邏輯上還是有些變化的。原始碼後續再貼出來,在MergeState初始化的時候,就會定義這樣的一個邏輯,儲存在docMaps中。

不過有個問題是,我新匯入的資料,好像並沒有刪除document的時候,也會有一些DocId發生了類似的變化。