搜索引擎的個人學習總結

核心的概念:(反向)倒排索引,分詞,相關性

上面圖片來自張俊林的<<這就是搜索引擎的核心技術詳解>>

索引的概念:爲了能夠更快地檢索到信息的一種數據結構

熟悉mySQL的innoDB的索引(B+)樹結構,都知道我們可以對某一列或者是聯合多個列加索引,從而加快我們檢索的目的.

比如:商品信息表(3000萬數據),其中有列sku(商品唯一標識),名稱(name),價格(price),顏色(color),品牌(brandid),供應商(providerid),是否包郵,產地等

如果用戶要想搜索一個商品價格區間是30-3000,某個品牌的,供應商是某個供應商,同時名稱包含了"加溼器",顏色是"白色"或者"黑色".

如果用sql語言來實現,我們發現我們大多數情況都是全表掃描,因爲這些字段區分度低,建索引不划算.那麼有沒有一種快速的方法幫我們實現大數據量下的快速檢索.

這個時候我們就需要引入搜索引擎的概念,來實現大數據的檢索功能

商品的例子:我們把一個商品看做是一個文檔(Document),這個文檔裏面的內容就是對應我們數據庫中的一條商品信息.

3000萬條商品就是3000萬個文檔,然後這些文檔形成了一個文檔集(Document Collection)

倒排索引(Inverted Index):倒排索引是實現單詞—文檔矩陣的一種具體存儲形式。通過倒排索引,可以根據單詞快速獲取包含這個單詞的文檔列表。倒排索引主要由兩個部分組成:單詞詞典和倒排文件(搜索引擎中是反向索引,由詞找到文章)

正向索引:通過正向索引,可以根據文檔id快速找到這個文檔,從而找到文檔下的單詞.(mySQL中索引是正向索引)

上面圖片來自張俊林的<<這就是搜索引擎的核心技術詳解>>

假設我們有如上文檔,那麼在數據庫中,就是五條記錄,對應的字段就是 文檔id ,文檔內容.如果數據量非常大,那麼我們用like查詢時走的是全表掃描.

我們看下倒排索引的結構(以單詞爲單位,一共16行):

上面圖片來自張俊林的<<這就是搜索引擎的核心技術詳解>>

大家仔細想想爲什麼要建倒排索引?它爲啥比正排索引快?

其實很好理解:比如還是3000萬的商品,顏色假如最多200個(200行數據),商品名稱(加溼器,某某),還有其他屬性.

總之我們用倒排索引存儲的話,行數會大大降低(中文一共就10000多個單詞).

此外:如果用戶要想搜索一個商品價格區間是30-3000,某個品牌的,供應商是某個供應商,同時名稱包含了"加溼器",顏色是"白色"或者"黑色".

這個問題也很好解決,就是取交集的過程

 

 

 

 

 

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