Solr: 反向索引(Inverted Index)介紹
我們都知道 Solr 技術底層使用了 Lucene 技術,而 Lucene 檢索核心就是 反向索引(Inverted Index)。
什麼是 反向索引 ?它與平時資料庫檢索概念有什麼不同?
傳統資料庫 database 節錄資料方式,是給予每份文件一個獨一無二 (unique)的 ID編號。
然後在此 ID 編號,紀錄下這筆ID文件的各個欄位值(例如:一筆學生資料ID編號35,其可能儲存了姓名、身高、學號等各種欄位的資料)。
當資料庫檢索請求出現時,傳統作法就是:將資料庫每一筆學生資料「全部翻出來查」,如找出符合需求的欄位,將該筆符合學生資料拉出來使用。
因每次尋找,系統都是翻出整個資料庫進行查找,資料量一龐大,將嚴重影響資料庫的效能。
為了因應上述傳統資料庫全文檢索的重大挑戰,反向索引採用相反的作法因應:
每次一筆資料 入Solr 索引庫時,Solr 就先將關鍵字挑出來,例如:有筆資料 1「台北車站人潮洶湧」 ,系統就預先切分好「台北」「北車」「台北車站」「車站人潮」「人潮」「洶湧」幾個關鍵字,存入索引庫中,這幾個關鍵字對應給這筆資料。
遇下次有另一筆資料2進來,內容為「高雄車站湧現返鄉人潮」,切出關鍵字為「高雄」「車站」
我們發現這筆資料同樣也存在「車站」「人潮」相同關鍵字,因此 Solr 系統就會記錄下對應關係: 車站=> 資料1、2 ;人潮 => 資料1、2
下方表格,分別為兩種紀錄方式的對照 – 大家可參考看看
資料庫方式 |
|
文件編號 |
內文欄位 |
1 |
台北車站人潮洶湧 |
2 |
高雄車站湧現返鄉人潮 |
Solr 方式 |
|
關鍵詞 |
對應文件編號 |
台北 |
1 |
車站 |
1,2 |
北車 |
1 |
人潮 |
1,2 |
洶湧 |
1 |
高雄 |
2 |
湧現 |
2 |
返鄉 |
2 |