倒排索引源於實際應用中需要根據屬性的值來查詢記錄,lucene是基於倒排索引實現的。這種索引表中的每一項都包括乙個屬性值和具有該屬性值的各記錄的位址。
由於不是由記錄來確定屬性值,而是由屬性值來確定記錄的位置,因而稱為倒排索引(inverted index)
倒排索引由兩個部分組成:單詞詞典和倒排檔案。
所有單詞的倒排列表順序的儲存在磁碟的某個檔案裡,這個檔案即被稱為倒排檔案,倒排檔案是儲存倒排索引的物理檔案。
單詞詞典是由文件集合中出現過的所有單詞構成的字串集合,單詞詞典內每條索引項記載單詞本身的一些資訊以及指向「倒排列表」的指標。
單詞詞典是倒排索引中非常重要的組成部分,它是用來維護文件集合中所有單詞的相關資訊,同時用來記載某個單詞對應的倒排列表在倒排檔案中的位置資訊。在支援搜尋時,根據使用者的查詢詞,去單詞詞典裡查詢,就能夠獲得相應的倒排列表。
對於乙個規模很大的文件集合來說,可能包含了幾十萬甚至上百萬的不同單詞,
快速定位某個單詞直接決定搜尋的響應速度,所以我們需要很高效的資料結構對單詞詞典進行構建和查詢。
常用的資料結構包含雜湊加鍊表和樹形詞典結構。
lucerne使用的是倒排檔案索引結構。該結構及相應的生成演算法如下:
a.我們現在有的是文章內容,即乙個字串,我們先要找出字串中的所有單詞,即分詞。英文單詞由於用空格分隔,比較好處理。中文單詞間是連在一起的需要特殊的分詞處理。
b.文章中的」in」, 「once」 「too」等詞沒有什麼實際意義,中文中的「的」「是」等字通常也無具體含義,這些不代表概念的詞可以過濾掉
c.使用者通常希望查「he」時能把含「he」,「he」的文章也找出來,所以所有單詞需要統一大小寫。
d.使用者通常希望查「live」時能把含「lives」,「lived」的文章也找出來,所以需要把「lives」,「lived」還原成「live」
e.文章中的標點符號通常不表示某種概念,也可以過濾掉
在lucene中以上措施由analyzer類完成。 經過上面處理後,
<2>建立倒排索引
文章1,2經過倒排後變成
guangzhou 1
he 2
i 1
live 1,2
shanghai 2
tom 1
加上「出現頻率」和「出現位置」資訊後,我們的索引結構變為:
1
2
3
4
5
6
7
8
guangzhou 1[2] 3,6
he 2[1] 1
i 1[1] 4
live 1[2] 2,5,
2[1] 2
shanghai 2[1] 3
tom 1[1] 1
以live 這行為例我們說明一下該結構:live在文章1中出現了2次,文章2中出現了一次,它的出現位置為「2,5,2」這表示什麼呢?我們需要結合文章號和出現頻率來分析,文章1中出現了2次,那麼「2,5」就表示live在文章1中出現的兩個位置,文章2中出現了一次,剩下的「2」就表示live是文章2中第 2個關鍵字。
<3>實現
<4>壓縮演算法
為了減小索引檔案的大小,lucene對索引還使用了壓縮技術。
其次大量用到的是對數字的壓縮,數字只儲存與上乙個值的差值(這樣可以減小數字的長度,進而減少儲存該數字需要的位元組數)。例如當前文章號是16389(不壓縮要用3個位元組儲存),上一文章號是16382,壓縮後儲存7(只用乙個位元組)。
<5>應用原因
下面我們可以通過對該索引的查詢來解釋一下為什麼要建立索引。
假設要查詢單詞 「live」,lucene先對詞典二元查詢、找到該詞,通過指向頻率檔案的指標讀出所有文章號,然後返回結果。詞典通常非常小,因而,整個過程的時間是毫秒級的。
而用普通的順序匹配演算法,不建索引,而是對所有文章的內容進行字串匹配,這個過程將會相當緩慢,當文章數目很大時,時間往往是無法忍受的。
整理自
lucene 工作原理之倒排索引
lucene倒排索引
倒排索引原理和實現
倒排索引由兩個部分組成 單詞詞典和倒排檔案。所有單詞的倒排列表順序的儲存在磁碟的某個檔案裡,這個檔案即被稱為倒排檔案,倒排檔案是儲存倒排索引的物理檔案。單詞詞典是由文件集合中出現過的所有單詞構成的字串集合,單詞詞典內每條索引項記載單詞本身的一些資訊以及指向 倒排列表 的指標。單詞詞典是倒排索引中非常...
倒排索引原理和實現
倒排索引原理和實現 一篇文章或網頁中,及有關的日期,作者等資訊 它相當於為網際網路上幾千億頁網頁做了乙個索引,好比一本書的目錄 標籤一般。讀者想看哪乙個主題相關的章節,直接根據目錄即可找到相關的頁面。不必再從書的第一頁到最後一頁,一頁一頁的查詢。倒排索引由兩個部分組成 單詞詞典和倒排檔案。所有單詞的...
倒排索引原理和實現
倒排索引由兩個部分組成 單詞詞典和倒排檔案。所有單詞的倒排列表順序的儲存在磁碟的某個檔案裡,這個檔案即被稱為倒排檔案,倒排檔案是儲存倒排索引的物理檔案。單詞詞典是由文件集合 現過的所有單詞構成的字串集合,單詞詞典內每條索引項記載單詞本身的一些資訊以及指向 倒排列表 的指標。單詞詞典是倒排索引中非常重...