標籤:
大規模網路搜尋的設計大規模搜尋引擎的邏輯結構
來自1998年Google兩個創始人發表的論文。
- crawler:爬蟲,從互連網上擷取文檔資訊
- index:讀取這些資訊,並記住哪些單詞出現在哪些文檔中,稱為索引
- search:使關鍵詞查詢成為可能,並對查詢結果進行排序
- Google的獨特性在於:使用anchor text描述目的文件,並利用文檔之間的連結對文檔的重要性排序,這就是PageRank。
Google搜尋的主要資料結構
- 將大檔案設計為虛擬檔案
每個頁面有三個描述維度:
- sync同步碼:一個頁面資料長度的開始
- length:頁面位元組長度
- compressed packet:壓縮包,包括docid(文檔id)、ecode(編碼資訊)、url長度、頁面長度和頁面
索引
- 根據docid排序
- 根據URL排序
- lexicon:詞典,是一個尋找表。儲存在記憶體中,儲存單詞以及由指標組成的雜湊表。
- 正向索引,如你們所知,barrels會記錄文檔ID(docID)、單詞ID(wordID)和文檔中的每個詞出現了多少次。在索引末尾,會有所有出現和所有命中。
- 倒排索引,包含與正向索引相似的資訊。但是,倒排索引中的資訊相片順序不同於正向索引中,倒排索引中的資訊是根據單詞排序的。因此,如你們所知,單詞ID之後跟隨著有多少文檔中包含了這個單詞。然後一些指向這些文檔的指標。對於每個文檔,倒排索引都會記錄在這個文檔中命中了多少次。在索引末尾還有命中的列表。
命中
關鍵字出現在一個頁面中稱為“Hit(命中)”。Google的Hit儲存了命中的類型和位置。
命中分為特殊命中和普通命中。特殊命中是指關鍵詞在標題、URL、中繼資料和錨文本中命中。
爬蟲
網路爬取資訊是一個複雜的工作,需要用到分布式爬取、DNS緩衝等提高爬取效率。
搜尋
一個搜尋請求的處理步驟:
- 查詢請求解析
- 將單詞轉換為wordIDs。
- 對短桶中的每個單詞都轉到文檔列表的開始並獲得所有文檔列表
- 搜尋引擎對每個查詢請求計算文檔排序
- 返回排序得分最高的搜尋結果
搜尋引擎是怎麼樣在一秒鐘之內處理數千次查詢請求的?
在現實中,一個商業搜尋引擎包括許多叢集,每個叢集都是一個完整的大規模搜尋引擎,會儲存所有Web頁面。並能夠提處理各種查詢請求。當使用者輸入了一個查詢時,先由一個基於網域名稱服務 (DNS)的負載平衡系統分配至一個叢集。分配時要同時考慮使用者與物理叢集的距離和可用能力。
這些叢集分布在世界各地,它們可能位於不同的城市和不同的國家。對於每個查詢請求,只有一個HTTP請求被發送到一個叢集上去。現在我們可以計算一下,如果我們的目標是4,000次查詢請求每秒。哇!如此之多,但是我們有10個叢集,每個叢集實際上需要在每秒鐘處理400次查詢請求。
讓我們來看看當一個查詢請求到來時,一個叢集內部是什麼樣子的。
因此,我們的目標是每秒處理400次查詢請求,如果其中80%的查詢請求都使用緩衝中的結果,那麼我們只需要在每秒鐘處理80次查詢請求就可以了。
另外,索引伺服器也有很多副本,所以假設每台索引伺服器都有3個副本,那麼每台索引伺服器每秒只需要處理20次查詢請求。
這張投影片展示的是Google的查詢服務器的架構。
- 因此,當一個查詢請求到來時,Google的Web伺服器會把這個查詢請求發送給一些索引伺服器並從索引伺服器獲得搜尋結果列表。如有需要訪問文檔資訊,那麼索引伺服器會把請求分配給某個文檔伺服器並獲得所需的文檔。
搜尋引擎還有一個稱為拼字檢查的模組,這是因為在查詢詞中經常會存在一些原始錯誤。如果這些原始錯誤能夠被更正,那麼搜尋結果就會更好。在索引伺服器內部,你們可以看到你們所熟知的倒排索引,我們在第一部分介紹了倒排索引。
例如,讓一個查詢請求到來時,查詢請求包含t1和t2兩個詞,這兩個詞彙被發送給索引伺服器,索引伺服器會從倒排索引中分別擷取第一個詞的倒序排列表和第二個詞的倒序排列表。然後某個模組會合并這兩個倒序排列表並為每個文檔計算一個相關性分數。
現在,我們的目標是讓每個索引伺服器在每秒鐘返回27次查詢請求。現在,這個數字並不是很大了。非常幸運,我們還有一些最佳化效能的方法。例如,我們可以使用動態剪枝演算法來計算得分最高的K個文檔。這就是說,我們不需要對包含t1和t2的所有文檔進行全排序,我們只需要得分最高的K個文檔。通常來說,K的取值是10。因此,這樣我們就可以做得更好了。當我們為每個查詢詞載入到排表時,我們能夠計算倒序排列表的相交部分,對每個文檔進行評估並根據相關性得分排序。
參考文獻:
[1] S. Brin and L .Page. The anatomy of a large-scale hypertextual web search engine In Proceedings of the Seventh International World Wide Web Conference, 1998
[2] A. Barroso, J. Dean and U. Hlzle. Web Search for a Planet: The Google Cluster Architecture IEEE Micro, 2003
[3] Sanjay Ghemawat, Howard Gobioff and and Shun-Tak Leung. The Google File System. SOSP’03, 2003
[4] J Dean and S Ghemawat. MapReduce: Simplified Data Processing on Large Clusters. 00104, 2004
探尋搜尋的多個維度
//TODO
大資料學習筆記2·互連網搜尋中的大資料研究