理解正向索引

王滔發表於2014-04-05

倒排索引也叫做反向索引(inverted單詞也有反轉的意思,只不過大家喜歡翻譯成倒排索引)。

倒排索引在搜尋引擎中經常用到,倒排索引也叫做反向索引。某天在想,為什麼叫做倒排索引呢?倒過來的,反轉過來的。那麼,非倒排索引是什麼樣子的。解釋一大堆。雲裡霧裡。

後來知道,反向索引是相對正向索引而言的,那什麼是正向索引?我想,瞭解了正向索引,就能知道反向索引的產生背景了。

 

下面是網上一些資料說法:

 

每個檔案都對應一個檔案ID,檔案內容被表示為一串關鍵詞的*。實際上在搜尋引擎索引庫中,關鍵詞也已經轉換為關鍵詞ID。這樣的資料結構就稱為正向索引
倒排索引正向索引還不能直接用於排名。假設使用者搜尋關鍵詞2,如果只存在正向索引的話,排名程式需要掃描所有索引庫中的檔案,找出包含關鍵詞2 的檔案(索引檔案),再進行相關性計算。這樣的計算量無法滿足實時返回排名結果的要求。
所以搜尋引擎會將正向索引資料庫重新構造為倒排索引,把檔案對應到關鍵詞的對映轉換為關鍵詞到檔案的對映,每個關鍵詞都對應著一系列檔案,這些檔案中都出現了這個關鍵詞。

 

搜尋引擎工作原理之預處理


預處理總共分為幾個步驟:1.提取文字、2.中文分詞、3.去停止詞、4.消除噪聲、5.去重、6.正向索引、7.倒排索引、8.連結關係計算、9.特殊檔案處理

 

 

上面說法感覺不是很明白。現在整理一下自己的理解

 

為每篇文件生成一個關鍵詞集合,也就是提取這篇文件中的所有關詞

比如文件1

經過分詞,提取文件1中出現的關鍵詞有20個

 

這個20個關鍵詞集合起來,每個關鍵詞都會順便記錄它出現在文件的位置,出現的次數等資訊

正向索引的結構像下面這樣子的:

 

文件編號1  此文件中出現的關鍵詞列表(單詞1,出現位置,出現次數;單詞2,出現位置,出現次數………..)

文件編號2  此文件中出現的關鍵詞列表

 

這是正向索引。

如果要搜尋關鍵詞”單詞1”,則去正向索引可以直接查出來哪些文件包含了單詞1。正向索引還是需要遍歷掃描(掃描所有正向索引檔案才知道哪些文件帶有某個關鍵詞),效能比較慢。

 

頓時明白了某個資料中提到這句話:實際上,時間、記憶體處理器等等資源的限制,技術上正向索引是不能實現的。

 

跟正向索引相比,反向索引就是反過來。怎麼個反過來法呢?

 

左邊是關鍵詞,右邊是文件編號,如下:

 

關鍵詞1   帶有此關鍵詞的文件編號1,文件編號2….

關鍵詞2   帶有此關鍵詞的文件編號1,文件編號2….

 

 

很多介紹太學術化了,即便是做技術開發的,沒有實際應用過,一時難以理解。

作為初級階段的理解,並不完善,有錯誤才會加深理解。期待以後完善,歡迎指正。大部分介紹都是圖的形式,有機會我想看看索引的程式碼實現層面,也許能夠加深理解。

相關文章