什麼是倒排索引
倒排索引也常被稱為反向索引、置入檔案或反向檔案,是一種索引方法,被用來儲存在全文檢索搜尋下某個單詞在一個文檔或者一組文檔中的儲存位置的映射。它是文檔檢索系統中最常用的資料結構。 通過倒排索引,可以快速定位單詞所在的文檔列表以及該詞在文檔中的位置,詞頻等資訊。供資訊分析使用。
倒排索引儲存資訊
資訊名稱 | 描述 |
ttf | 全稱:total term frequency, 表示檢索詞在所有文檔中出現的總次數 |
df | 全稱:document frequency, 表示包含檢索詞的文檔總數 |
tf | 全稱:term frequency, 表示檢索詞在文檔中出現的次數 |
docid | 全稱:document id, 是文檔在引擎中的唯一標識,可以通過docid擷取到原文檔的其他資訊。 |
fieldmap | 全稱:field map, 用於記錄包含檢索詞的field資訊(TODO: Link 什麼是field??) |
section 資訊 | 使用者可以為某些文檔分段,然後為每一段添加附屬資訊。該資訊可以在檢索時取出,供後續處理使用 |
position | 用於記錄檢索詞在文檔中的位置資訊 |
positionpayload | 全稱:position payload, 使用者可以為文檔不同位置設定payload資訊,並可以在檢索時取出,供後續處理用 |
docpayload | 全稱:document payload, 使用者可以為某些文檔添加附屬資訊,並可以在檢索時取出,供後續處理使用 |
termpayload | 全稱:term payload, 使用者可以為某些詞添加附屬資訊,並可以在檢索時取出,供後續處理使用 |
倒排索引的基本結構
結構名稱 | 描述 |
dictionary | 詞典, 儲存檢索詞和倒排鏈的映射資訊。引擎可以通過詞典尋找檢索詞對應的倒排資訊位置 |
doclist | 全稱:document list,儲存包含檢索詞的文檔資訊 |
positionlist | 全稱:position list,儲存每一篇文檔中檢索詞所在的位置資訊 |
truncatelist | 全稱:truncate list(截斷鏈),用於提高引擎效能,根據使用者的配置,將一些優質文檔單獨建倒排索引,以提高檢索效能 |
bitmap | 用於提高引擎效能,根據使用者的配置,將一些倒排結構採用bitmap方式儲存,以減少倒排所佔空間,提高檢索效能(TODO link 什麼是bitmap?) |
倒排索引檢索的基本流程
當使用者查詢單詞M的倒排索引時,首先引擎會查詢詞典檔案,找到索引詞在倒排索引檔案(posting檔案)的起始位置。隨後引擎通過解析倒排鏈,擷取詞M儲存在倒排鏈的三部分資訊:TermMeta,DocList, PositionList。TermMeta儲存的是對索引詞的基本描述,主要包括詞的df、ttf、termpayload資訊。DocList包含索引詞的文檔資訊列表,文檔資訊包括:DocumentId,文檔中的檢索詞頻(tf), docpayload, 包含檢索詞的field資訊(termfield)。PositionList是檢索詞在文檔中的位置資訊列表,主要包括檢索詞在文檔中的具體位置(position)和positionpayload資訊。