1. 程式人生 > >倒排索引、正排索引系列一

倒排索引、正排索引系列一

1. 搜尋引擎簡介

搜尋引擎顧名思義就是:從千萬設定億、兆級別的資料中查詢出自己想要的資訊,比如:谷歌和百度

索引引擎最重要的是建立倒排索引和正排索引【不是必須的】

2. 倒排索引簡介

  1. 倒排索引的名詞解釋

  • 單詞【key】:搜尋框中輸入的關鍵詞
  • 文件【doc】:搜尋結果的基本資訊,比如百度這樣的搜尋引擎,doc是一個一個帶有特定資訊【關鍵詞,出現的次數,出現的位置.....】的網頁;

如果是淘寶的搜尋引擎,doc 就是一個一個包含特定資訊【寶貝的id、寶貝的類目.......】的寶貝;當然key和doc 要有一定的相關性,這個是演算法來計算的

  • 倒排索引項:每個doc 包含一些特定資訊,就叫倒排索引項
  • 詞典項:把我們搜尋的單詞叫詞典項
  • 倒排索引表:肯定會有多個doc 包括一個單詞,這樣一個詞典項+ 包括這個詞典項的所有doc 構成 倒排列表
  • 倒排索引:數億萬級的倒排索引表構成倒排索引
  • 一般為了減少索引的數量和搜尋的時間,在一個搜尋引擎中往往按照不同的緯度分成多份倒排索引

下面是倒排索引的機構圖:


  • 繫結關係:建立索引之前,手續要把使用者常用的關鍵詞統計出來,並按照這些詞典項進行建立索引;如果是搜尋廣告要賣關鍵詞,需要讓廣告主對關鍵詞和doc 【網頁、或者電商的寶貝】進行繫結,【當然這個繫結要有原則,需要演算法計算相關性進行審批】繫結關係可以單獨建立一個索引。
  • query result:使用者輸入的關鍵詞中有很多是錯誤的或者在現有索引裡面沒有的,這是要把使用者查詢的關鍵詞改成使用者可能感興趣的關鍵詞比如使用者輸入 iphon   --> iphone  。

3. 正排索引簡介

正排索引因為查詢效率是O(n),所以用的不是很多;更多的時候是用於倒排索引的輔助作用;

正排索引用的場景:每個doc 裡面的關鍵字基本是唯一的就是,如果建立倒排索引基本也是1個關鍵詞對應一個doc;直接建立正排就可以了;正排索引建立起來簡單。


4. 正排索引、倒排索引在搜尋引擎的作用

  • 倒排所有主要的作用就是召回,正排索引的作用主要是排序(計算分數),獲取dataid對應的detail資訊
  • 對一個大型搜尋引擎,召回只是最基本、最簡單的功能,所以倒排index 只佔整個搜尋index的20%--30%;相反正排索引真正佔70--80%(其中排序的正排又佔大頭)
  • 對於taobao 的搜尋來說:key 對應的doc集合就是所有title裡面包括了搜尋key(分過詞、糾過錯的)的所有寶貝的集合
  • 正排索引主要是用來進行排序的

5. 搜尋演算法的架構理解

  • 首先你要獲取搜尋的資料來源: (百度是爬蟲,淘寶是db,微信應該是db或者hbase/hdfs)
  • 對資料進行打標: 又可以稱之為商品庫 [任何個商品(資料) 的屬性,品牌,假貨,各種tag 標誌好]
  • 搜尋演算法進行排序: 採取演算法模型: Score = L1R1 + L2R2 + .... + LkRk;最後對商品的分數進行排序
  • 如果所說對搜尋關鍵詞的理解:在搜尋框輸入一個關鍵詞:要對關鍵詞進行糾錯 改寫 分詞 各種預測 最後把資料發給引擎