爲什麼ES的搜索效率對比數據庫的正排索引更快呢?

倒排索引原理

正排索引

正排是以文檔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)

Finite State Transducers 簡稱 FST, 中文名:有窮狀態轉換器。

  1. 有環
  2. 它有且只有一個初始狀態,可以有0個或多個final狀態
  3. 它在同一個時間點只能在一個狀態中

cat/0
deep/1
do/2
dog/3
dogs/4
december/5
november/6
在這裏插入圖片描述
紅色加粗線條代表一個final狀態

FST Build 圖示網站

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章