倒排索引原理
正排索引
正排是以文檔ID爲關鍵字,表中記錄文檔中每個字的位置信息,查詢時掃描表中每個文檔中字的信息, 直到找出所有包含查詢關鍵字的文檔。
倒排索引
倒排表是以字或詞作爲關鍵字進行索引,表中關鍵字所對應的記錄項記錄了出現這個字或詞的所有文檔ID。
正排索引是文檔ID到關鍵字的映射,倒排索引是從關鍵字到文檔ID的映射
倒排索引的核心組成
1、單詞詞典:記錄所有文檔的單詞,一般都比較大。還會記錄單詞到倒排列表的關聯信息。
2、倒排列表:記錄了單詞對應的文檔集合,由倒排索引項組成。倒排索引項包含如下信息:
文檔ID,用於獲取原始信息
單詞頻率TF,記錄該單詞在該文檔中的出現次數,用於後續相關性算分
位置Position,記錄單詞在文檔中分詞的位置,用於語句搜索(phrase query)
偏移Offset,記錄單詞在文檔的開始和結束位置,實現高亮顯示
Trie
Lucene在4.x之前使用trie,在4.x之後就使用FST。
Trie樹,即前綴樹,字典樹,是一種有序樹,用於保存關聯數組,其中的鍵通常是字符串。與二叉查找樹不同,鍵不是直接保存在節點中,而是由節點在樹中的位置決定。一個節點的所有子孫都有相同的前綴,也就是這個節點對應的字符串,而根節點對應空字符串。
它的優點是:最大限度地減少無謂的字符串比較,缺點是後綴不共享。
FST(Finite State Tranducer)
- 有環
- 它有且只有一個初始狀態,可以有0個或多個final狀態
- 它在同一個時間點只能在一個狀態中
cat/0
deep/1
do/2
dog/3
dogs/4
december/5
november/6
紅色加粗線條代表一個final狀態