type
status
date
slug
summary
tags
category
icon
password

前言

索引的目的是為了快速檢索數據。
每一種 DB 都有其適用的情境,所以會需要不同的數據結構和索引來解決問題。
對 MySQL 來說是 B+tree 結構的索引,而在 Lucene 來說是 inverted index。

Inverted index 是什麼?

有反向索引(inverted index) 那當然就有正向索引(forward index)。
正向索引(forward index) 就像一本書開頭的目錄一樣,我們可以依照章節名稱直接找到頁數。
notion image

這個時候如果你想找到包含某個關鍵字的頁數要怎麼辦呢?有些書的後面就會列出某些關鍵字出現的頁數,這就是反向索引(inverted index)的一種。
notion image

讓我們看一下例子,假設在搜尋引擎中存有以下紀錄:
doc_id
content
1
時間就是金錢
2
金錢只是一堆數字
3
這是數字
以上範例 doc_id 是唯一值,透過唯一值去尋找整個文檔的值就是運用了正向索引(forward index)。
如果我想找到 content 中包含 金錢 兩個字的文檔時, 就需要一個一個查看文檔的 content。
這時候我們對 content 做反向索引(inverted index):
單詞(Token)
doc_id
count
doc_id + position
時間
[1]
1
[1:0]
金錢
[1,2]
2
[1:3,2:0]
數字
[2,3]
2
[2:3,3:0]
如上表,可以看到這樣就能快速找到我們想要的文檔,這也是搜尋引擎的解決方案。
 
notion image
 

參考