Lucene 倒排索引機制

2021-09-01 19:35:42 字數 1578 閱讀 4647

利用 lucene,在建立索引的工程中你可以充分利用機器的硬體資源來提高索引的效率。當你需要索引大量的檔案時,你會注意到索引過程的瓶頸是在往磁碟上寫索引檔案的過程中。為了解決這個問題, lucene 在記憶體中持有一塊緩衝區。但我們如何控制 lucene 的緩衝區呢?幸運的是,lucene 的類 indexwriter 提供了三個引數用來調整緩衝區的大小以及往磁碟上寫索引檔案的頻率。 

1.合併因子(mergefactor) 

這個引數決定了在 lucene 的乙個索引塊中可以存放多少文件以及把磁碟上的索引塊合併成乙個大的索引塊的頻率。比如,如果合併因子的值是 10,那麼當記憶體中的文件數達到 10 的時候所有的文件都必須寫到磁碟上的乙個新的索引塊中。並且,如果磁碟上的索引塊的隔數達到 10 的話,這 10 個索引塊會被合併成乙個新的索引塊。這個引數的預設值是 10,如果需要索引的文件數非常多的話這個值將是非常不合適的。對批處理的索引來講,為這個引數賦乙個比較大的值會得到比較好的索引效果。 

2.最小合併文件數 

3.最大合併文件數 

這個引數決定了乙個索引塊中的最大的文件數。它的預設值是 integer.max_value,將這個引數設定為比較大的值可以提高索引效率和檢索速度,由於該引數的預設值是整型的最大值,所以我們一般不需要改動這個引數。 

二.lucene 索引檔案結構分析 

在分析 lucene 的索引檔案結構之前,我們先要理解反向索引(inverted index)這個概念,反向索引是一種以索引項為中心來組織文件的方式,每個索引項指向乙個文件序列,這個序列中的文件都包含該索引項。相反,在正向索引中,文件佔據了中心的位置,每個文件指向了乙個它所包含的索引項的序列。你可以利用反向索引輕鬆的找到那些文件包含了特定的索引項。lucene正是使用了反向索引作為其基本的索引結構。 

索引檔案的邏輯檢視 

在lucene 中有索引塊的概念,每個索引塊包含了一定數目的文件。我們能夠對單獨的索引塊進行檢索。圖 顯示了 lucene 索引結構的邏輯檢視。索引塊的個數由索引的文件的總數以及每個索引塊所能包含的最大文件數來決定。 

lucene 中的關鍵索引檔案 

下面的部分將會分析lucene中的主要的索引檔案,可能分析有些索引檔案的時候沒有包含檔案的所有的字段,但不會影響到對索引檔案的理解。 

1.索引塊檔案 

這個檔案包含了索引中的索引塊資訊,這個檔案包含了每個索引塊的名字以及大小等資訊。下表顯示了這個檔案的結構資訊。 

2.域資訊檔案 

我們知道,索引中的文件由乙個或者多個域組成,這個檔案包含了每個索引塊中的域的資訊。下表顯示了這個檔案的結構。 

3.索引項資訊檔案 

這是索引檔案裡面最核心的乙個檔案,它儲存了所有的索引項的值以及相關資訊,並且以索引項來排序。下表顯示了這個檔案的結構。 

4.頻率檔案 

這個檔案包含了包含索引項的文件的列表,以及索引項在每個文件中出現的頻率資訊。如果lucene在索引項資訊檔案中發現有索引項和搜尋詞相匹配。那麼 lucene 就會在頻率檔案中找有哪些檔案包含了該索引項。表5顯示了這個檔案的乙個大致的結構,並沒有包含這個檔案的所有字段。 

5.位置檔案 

這個檔案包含了索引項在每個文件中出現的位置資訊,你可以利用這些資訊來參與對索引結果的排序。表 6 顯示了這個檔案的結構 

倒排索引原理 lucene

倒排索引由兩個部分組成 單詞詞典和倒排檔案。所有單詞的倒排列表順序的儲存在磁碟的某個檔案裡,這個檔案即被稱為倒排檔案,倒排檔案是儲存倒排索引的物理檔案。單詞詞典是由文件集合中出現過的所有單詞構成的字串集合,單詞詞典內每條索引項記載單詞本身的一些資訊以及指向 倒排列表 的指標。單詞詞典是倒排索引中非常...

Lucene 原始碼分析之倒排索引(一)

倒排索引是 lucene 的核心資料結構,該系列文章將從原始碼層面 原始碼版本 lucene 7.3.0 分析。該系列文章將以如下的思路展開。什麼是倒排索引?如何定位 lucene 中的倒排索引?倒排索引是如何搜尋的?倒排索引是如何增刪改的?本文將介紹什麼是倒排索引。了解什麼是倒排索引,其實是去了解...

倒排索引 和 倒排表

為什麼我們要說倒排索引呢?因為倒排索引是目前 搜尋引擎公司最對搜尋引擎最常用的儲存方式.也是搜尋引擎的核心內容 在搜尋引擎實際的引用之中,有時需要按照關鍵字的某些值查詢記錄,所以我們是按照關鍵字建立索引,這個索引我們就稱之為 倒排索引,而帶有倒排索引的檔案我們又稱作 倒排索引檔案也可以叫它為 倒排檔...