倒排索引也叫做反向索引(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….
很多介紹太學術化了,即便是做技術開發的,沒有實際應用過,一時難以理解。
