Solr: 反向索引(Inverted Index)介紹



我們都知道 Solr 技術底層使用了 Lucene 技術,而 Lucene 檢索核心就是 反向索引Inverted Index

什麼是 反向索引 ?它與平時資料庫檢索概念有什麼不同?

傳統資料庫 database 節錄資料方式,是給予每份文件一個獨一無二 (unique) ID編號

然後在此 ID 編號,紀錄下這筆ID文件的各個欄位值(例如:一筆學生資料ID編號35,其可能儲存了姓名、身高、學號等各種欄位的資料)。

資料庫檢索請求出現時,傳統作法就是:將資料庫每一筆學生資料「全部翻出來查」,如找出符合需求的欄位,將該筆符合學生資料拉出來使用。

因每次尋找,系統都是翻出整個資料庫進行查找,資料量一龐大,將嚴重影響資料庫的效能。

為了因應上述傳統資料庫全文檢索的重大挑戰,反向索引採用相反的作法因應:

每次一筆資料 Solr 索引庫時,Solr 就先將關鍵字挑出來,例如:有筆資料 1台北車站人潮洶湧 ,系統就預先切分好「台北」「北車」「台北車站」「車站人潮」「人潮」「洶湧」幾個關鍵字,存入索引庫中,這幾個關鍵字對應給這筆資料。

遇下次有另一筆資料2進來,內容為「高雄車站湧現返鄉人潮」,切出關鍵字為「高雄」「車站」
我們發現這筆資料同樣也存在「車站」「人潮」相同關鍵字,因此
Solr 系統就會記錄下對應關係: 車站=> 資料12 ;人潮 => 資料12

下方表格,分別為兩種紀錄方式的對照 –  大家可參考看看

資料庫方式

文件編號

內文欄位

1

台北車站人潮洶湧

2

高雄車站湧現返鄉人潮

 

 

Solr 方式

關鍵詞

對應文件編號

台北

1

車站

1,2

北車

1

人潮

1,2

洶湧

1

高雄

2

湧現

2

返鄉

2

由此可知,Solr 與 資料庫 儲存索引資料方式截然不同。
上述原理概念的不同,也是不少公司組織導入全文檢索、站內搜尋引擎,都會面臨的挑戰。