20 第二章 索引 緩衝

2021-09-01 06:09:51 字數 1043 閱讀 1221

lucene在新增或刪除文件時,並不會立即將這些操作寫入磁碟,而是在記憶體中先做快取。毋庸置疑,這是針對io效能問題而作出的優良策略。

在三種情況下,lucene會對緩衝區進行flush操作:

1. 快取區記憶體空間已滿

通過indexwriter的setrambuffersizemb()設定緩衝區大小。預設為16.0mb。值得注意的是,記憶體大小的設定並非絕對精確,因而你不可以依賴此大小做程式設計。另外,不要將它設定超過2048mb!

2. 文件數到達上限

通過indexwriter的setmaxbuffereddocs()設定最大文件數。預設情況下是沒有這個限制的。

3. 刪除的term數到達上限

通過indexwriter的setmaxbuffereddeleteterms()設定最大刪除term數。預設情況下是沒有這個限制的。

如果你不需要這些設定,將他們設成indexwriter.disable_auto_flush,不過你不可以同時將1、2兩條設成disable_auto_flush.

順便一提,我們應該已經發現lucene的indexwriter構造器過於複雜,需要的引數讓人覺得亂七八糟,引數的設定也是讓人一頭霧水。lucene團隊已經注意到這個問題了,新版的lucene會將這些「亂七八糟」的東西都放在乙個indexwriterconfig類中,indexwriter將僅僅需要乙個indexwriterconfig的例項進行構造。相應的,上面介紹的三種方法也會被移動到indexwriterconfig中,indexwriter.disable_auto_flush常量也由indexwriterconfig.disable_auto_flush替代。

最後說一下flush操作。該操作會在directory中建立新的段(segment)和待刪除檔案(上一節說的那個「黑名單」)。然而,在執行commit()操作前,這些檔案對於indexreader是完全不可見的。flush操作是釋放緩衝區的記憶體空間到index檔案中,commit操作則是將所有的flush變動持久化並對indexreader可見。

第二章 緩衝區(10)

2.3 複製 buffer物件 如前面討論的那樣,我們能夠建立管理外部陣列資料的buffer 物件。但是 buffer 物件不僅能管理外部陣列,也能管理其他的 buffer 物件。當建立乙個管理其他 buffer 物件的buffer 物件時,這個 buffer 物件稱為檢視 buffer 物件。大多...

12 第二章 索引 規則 Norms

在索引階段,文件 document 中每個被索引的域 field 都可能有乙個優先權重因數 boost 它是乙個浮點值。該值由三部分聯合計算得到 文件自身的boost值 每個域的值 lucene根據各詞元在域中的頻度算出的boost值 得到最終的boost值後,lucene會通過一些巧妙的方法把它轉...

MySQL第二章總結 Mysql第二章 儲存引擎

1 本章目標 儲存引擎 資料型別 重點 2 儲存引擎 在關係型資料庫中,資料儲存在表中,表由行和列組成。開發中,可能需要各種不同的表,有的表簡單,有的表複雜,有的表讀取快,有的讀取資料慢,有的表更新快等。根據對資料的不同的處理需求,使用不同的儲存引擎,可以將mysql資料庫的效能發揮到最大。查詢my...