【搜索技術 倒排索引】搜索引擎概述之倒排索

說到提高檢索效率,就必然提到索引。今天就來爲大家講述搜索引擎中最常見的索引方式——倒排索引。

索引之所以快的原因,是因爲有序(從計算機的角度講,有序就可以使用二分查找,這是十分高效的)。

詞彙文檔矩陣
我們發現我們最終要做的其實是對詞做索引。那麼我們要怎麼做呢?首先我們可以做一個“詞彙-文檔矩陣”,橫座標爲文檔id,縱座標爲具體詞彙。

這裏寫圖片描述

我們可以讓縱座標的詞彙有序排列(比如按照字母/拼音順序排列),這樣我們就可以快速的定位到一個詞彙。然後我們再去找都有哪些文檔對應着這些詞彙。但是“詞彙-文檔矩陣”只是一個概念模型,我們如何在計算機中使用數據結構實現這個概念呢?

最簡單的方法就是,直接這麼存。先存儲一個有序的文檔id數組,然後在存儲一個詞彙數組。之後創建一個二維數組,數組的橫座標長度和文檔id數組長度相同,縱座標長度和詞彙數組相同,然後在這個二維數組的元素中存儲1或0。1代表對應位置的文檔包含對應位置的詞彙,0代表不包含。如圖所示:

這裏寫圖片描述

倒排索引

那麼我們要如何優化這個結構呢?我們不難發現這個矩陣其實具有高度的稀疏性(大量的值爲0)。畢竟不可能每本書都有50萬個不同的詞,如果考慮到大量的論文或者博客的話,可能平均一篇文獻中能有1000個不一樣的詞都很不容易了。這就意味着這個矩陣中99%的元素都爲0。這樣我們很容易想到,那我們就只記錄那些1不就可以了。也就是說我們只要根據詞彙去記錄那些包含這個詞彙的文檔就可以了。這樣同樣我們要維護一個詞彙數組,然後詞彙數組中的每個元素(也就是每個詞彙)都會對應一個文檔列表,這個文檔列表中保存的是,具有這個詞彙的文檔的id。這樣就極大的節省了存儲空間。結構如下:

這裏寫圖片描述

以上就是倒排索引的一些基本概念。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章