倒排索引
倒排索引(英語:Inverted index),也常被稱為反向索引、置入檔案或反向檔案,是一種索引方法,被用來存儲在全文搜索下某個單詞在一個文檔或者一組文檔中的存儲位置的映射。它是文檔檢索系統中最常用的數據結構。
有兩種不同的反向索引形式:
後者的形式提供了更多的兼容性(比如短語搜索),但是需要更多的時間和空間來創建。
例子
以英文為例,下面是要被索引的文本:
0. "it is what it is"
1. "what is it"
2. "it is a banana"
我們就能得到下面的反向文件索引:
"a": {2} "banana": {2} "is": {0, 1, 2} "it": {0, 1, 2} "what": {0, 1}
檢索的條件"what"
, "is"
和 "it"
將對應這個集合:。
對相同的文字,我們得到後面這些完全反向索引,由文檔數量和當前查詢的單詞結果組成的的成對數據。
同樣,文檔數量和當前查詢的單詞結果都從零開始。所以,"banana": {(2, 3)}
就是說 "banana"在第三個文檔里 (),而且在第三個文檔的位置是第四個單詞(地址為 3)。
"a": {(2, 2)} "banana": {(2, 3)} "is": {(0, 1), (0, 4), (1, 1), (2, 1)} "it": {(0, 0), (0, 3), (1, 2), (2, 0)} "what": {(0, 2), (1, 0)}
如果我們執行短語搜索"what is it"
我們得到這個短語的全部單詞各自的結果所在文檔為文檔0和文檔1。但是這個短語檢索的連續的條件僅僅在文檔1得到。
應用
- 反向索引數據結構是典型的搜索引擎檢索算法重要的部分。
- 一個搜索引擎執行的目標就是優化查詢的速度:找到某個單詞在文檔中出現的地方。以前,正向索引開發出來用來存儲每個文檔的單詞的列表,接着掉頭來開發了一種反向索引。 正向索引的查詢往往滿足每個文檔有序頻繁的全文查詢和每個單詞在校驗文檔中的驗證這樣的查詢。
- 實際上,時間、內存、處理器等等資源的限制,技術上正向索引是不能實現的。
- 為了替代正向索引的每個文檔的單詞列表,能列出每個查詢的單詞所有所在文檔的列表的反向索引數據結構開發了出來。
- 隨着反向索引的創建,如今的查詢能通過立即的單詞標示迅速獲取結果(經過隨機存儲)。隨機存儲也通常被認為快於順序存儲。
參考書目
- ^ Ribeiro, Berthier de Araújo Neto; Baeza-Yates, R. Modern information retrieval. Reading, Mass: Addison-Wesley Longman. 1999: 192. ISBN 0-201-39829-X.
- 高德納,《計算機程序設計藝術》, Volume 3: "排序與索引"排序與索引Sorting and Searching, Third Edition. Addison-Wesley, 1997. ISBN 978-0-201-89685-5. Pages 560–563 of section 6.5: Retrieval on Secondary Keys.
- 賈斯廷·佐貝《文本索引的反向檔案與簽名檔案比較》Justin Zobel, Alistair Moffat and Kotagiri Ramamohanarao, Inverted files versus signature files for text indexing. ACM Transactions on Database Systems (TODS), Volume 23, Issue 4 (December 1998), Pages: 453 - 490.