1. 程式人生 > 其它 >簡單瞭解倒排索引

簡單瞭解倒排索引

參考: https://zhuanlan.zhihu.com/p/33671444

倒排索引(英語:Inverted index)

也常被稱為反向索引、置入檔案或反向檔案。是文件檢索系統中最常用的一種資料結構。

倒排索引的典型應用案例是apache lucene,它在全文檢索領域獨領風騷,另外由其衍生的如
apache solr以及商業領域應用廣泛的elastic search等等都是行業裡全文搜尋的代表。

倒排索引可以用來檢索文件中的某個單詞或者某個短語所在位置,比如從kibana查詢某個ip所對應的日誌,
由於kibana是elasticsearch的視覺化工具,而elasticsearch底層又是基於apache lucene實現,而lucene
底層又是使用倒排索引資料結構進行全文檢索,所以能夠很快速的定位文件位置並進行展示。

倒排索引儲存的是某一個單詞,也可以是短語,具體根據實際情況來,通常體現在對分詞器的應用,elastic search預設
會將中文分割為一個個漢字作為索引,當我們以外掛方式安裝IK分詞器後,就會以具體分割的單詞作為索引,
倒排索引儲存的就是這個單詞在某一個文件或者某一組文件中的位置的對映關係,使得我們能夠通過這種關係
能夠迅速定位並獲取該文件。

倒排索引有兩個重要的概念,即索引和倒排表。
索引:索引的單詞列表,可以使我們在查詢時不需要掃描整個文件,這裡索引是指預先將輸入的文件進行處理
  (預處理),即分詞
倒排表:倒排表中每個單詞條目會包含該詞在文件中的位置資訊(如句子、段落等資訊),這樣可以實現臨近
   搜尋。並且可以通過該倒排表計算每個單詞的詞頻、權重,用於使用者搜尋的相關性計算。

倒排索引和一般索引區別
個人目前的理解就是一般正常的索引,比如關係型資料庫如mysql或oracle,他們是對資料庫中某個表的某一列
或幾列預先作索引,然後在CRUD時通過索引操作,而倒排索引是反向操作,即預先將實際將要儲存的資料作索引,
再反向連結到具體的文件(類比關係型資料庫的表),所以倒排索引是按field來的,即field指向doc,而不是
doc指向field。