搜索引擎原理:搜索引擎原理構架介紹?

全網搜索引擎架構與流程
全網搜索的宏觀架構長啥樣?
全網搜索的宏觀流程是怎么樣的?

搜索引擎原理:搜索引擎原理構架介紹?

文章插圖
全網搜索引擎的宏觀架構如上圖 , 核心子系統主要分為三部分(粉色部分):
(1)spider爬蟲系統
(2)search&index建立索引與查詢索引系統 , 這個系統又主要分為兩部分:
一部分用于生成索引數據build_index
一部分用于查詢索引數據search_index
(3)rank打分排序系統
核心數據主要分為兩部分(紫色部分):
(1)web網頁庫
(2)index索引數據
全網搜索引擎的業務特點決定了 , 這是一個“寫入”和“檢索”完全分離的系統:
【寫入】
系統組成:由spider與search&index兩個系統完成
輸入:站長們生成的互聯網網頁
輸出:正排倒排索引數據
流程:如架構圖中的1 , 2 , 3 , 4
(1)spider把互聯網網頁抓過來
(2)spider把互聯網網頁存儲到網頁庫中(這個對存儲的要求很高 , 要存儲幾乎整個“萬維網”的鏡像)
(3)build_index從網頁庫中讀取數據 , 完成分詞
(4)build_index生成倒排索引
【檢索】
系統組成:由search&index與rank兩個系統完成
輸入:用戶的搜索詞
輸出:排好序的第一頁檢索結果
流程:如架構圖中的a , b , c , d
(a)search_index獲得用戶的搜索詞 , 完成分詞
(b)search_index查詢倒排索引 , 獲得“字符匹配”網頁 , 這是初篩的結果
(c)rank對初篩的結果進行打分排序
(d)rank對排序后的第一頁結果返回
三、站內搜索引擎架構與流程
做全網搜索的公司畢竟是少數 , 絕大部分公司要實現的其實只是一個站內搜索 , 站內搜索引擎的宏觀架構和全網搜索引擎的宏觀架構有什么異同?
以58同城100億帖子的搜索為例 , 站內搜索系統架構長啥樣?站內搜索流程是怎么樣的?
搜索引擎原理:搜索引擎原理構架介紹?

文章插圖
站內搜索引擎的宏觀架構如上圖 , 與全網搜索引擎的宏觀架構相比 , 差異只有寫入的地方:
(1)全網搜索需要spider要被動去抓取數據
(2)站內搜索是內部系統生成的數據 , 例如“發布系統”會將生成的帖子主動推給build_data系統
看似“很小”的差異 , 架構實現上難度卻差很多:全網搜索如何“實時”發現“全量”的網頁是非常困難的 , 而站內搜索容易實時得到全部數據 。
對于spider、search&index、rank三個系統:
(1)spider和search&index是相對工程的系統
(2)rank是和業務、策略緊密、算法相關的系統 , 搜索體驗的差異主要在此 , 而業務、策略的優化是需要時間積累的 , 這里的啟示是:
a)Google的體驗比Baidu好 , 根本在于前者rank牛逼
b)國內互聯網公司(例如360)短時間要搞一個體驗超越Baidu的搜索引擎 , 是很難的 , 真心需要時間的積累
四、搜索原理與核心數據結構
什么是正排索引?
什么是倒排索引?
搜索的過程是什么樣的?
會用到哪些算法與數據結構?
前面的內容太宏觀 , 為了照顧大部分沒有做過搜索引擎的同學 , 數據結構與算法部分從正排索引、倒排索引一點點開始 。
提問:什么是正排索引(forward index)?
回答:由key查詢實體的過程 , 是正排索引 。
用戶表:t_user(uid, name, passwd, age, sex) , 由uid查詢整行的過程 , 就是正排索引查詢 。
網頁庫:t_web_page(url, page_content) , 由url查詢整個網頁的過程 , 也是正排索引查詢 。
網頁內容分詞后 , page_content會對應一個分詞后的集合list 。
簡易的 , 正排索引可以理解為Map<url, list> , 能夠由網頁快速(時間復雜度O(1))找到內容的一個數據結構 。
提問:什么是倒排索引(inverted index)?
回答:由item查詢key的過程 , 是倒排索引 。
對于網頁搜索 , 倒排索引可以理解為Map<item, list> , 能夠由查詢詞快速(時間復雜度O(1))找到包含這個查詢詞的網頁的數據結構 。

推薦閱讀