哈克,在咱倆站著的地方的下面,你拿一根釣魚竿就可以觸到我鉆出來的那個洞??纯茨隳懿荒苷业?。
——馬克·吐溫,《湯姆·索亞歷險記》(Tom Sawyer)
搜索引擎對我們的生活產生了深遠影響。絕大多數人每天都進行多次搜索查詢,但我們極少會停下來思考這個令人驚嘆的工具是如何奏效的。搜索引擎提供的海量信息以及搜索結果的速度與質量變得如此平常,如果我們搜索的問題沒有在幾秒內得到回答,我們就會困惑。我們傾向于忘記,每一個成功的搜索引擎都是從世界上最大的草垛——萬維網——尋針。
事實上,搜索引擎提供的超級服務,不僅僅是針對搜索拋出一大堆花哨技術的結果。的確,每個大型搜索引擎公司都運營著一個由無數數據中心組成的國際網絡,其中包括數以千計的服務器計算機和先進的網絡設備。但沒有聰明的算法來組織和檢索我們請求的信息,所有這些硬件都會變得毫無用處。因此,在這一章和下一章,我們將探究這樣一些算法瑰寶——每次在進行網絡搜索時,我們都會用到這些算法。我們很快就會了解到,搜索引擎的兩大主要任務就是匹配(matching)和排名(ranking)。這一章將講述一種聰明的匹配技術:元詞把戲(metaword trick)。在下一章,我們將轉而討論排名任務,審視谷歌公司著名的網頁排名算法。
匹配和排名
當你發(fā)起一次網絡搜索查詢時會發(fā)生什么?以這樣一種高屋建瓴的視角開始會很有幫助。我已經說過,搜索有兩個主要階段:匹配和排名。在實際中,搜索引擎將匹配和排名組合成一個流程以實現一致性。但這兩個階段在概念上是獨立的,因此我們會假設在排名開始前,匹配已經完成。上圖就給出了一個例子,圖中查詢的是“London bus timetable”(倫敦公共汽車時刻表),而匹配階段則回答“哪個網頁與我的查詢匹配”這個問題——在這個例子中就是所有提到“London bus timetable”的網頁。
但現實搜索引擎中的許多查詢都有數百、數千乃至數百萬個“命中”。而搜索引擎用戶通常只喜歡查看幾個結果,最多5個或10個。因此,搜索引擎必須從大量命中里挑出最好的幾個。一個好的搜索引擎不僅僅會挑出最好的幾個命中,而且會以最有用的順序顯示它們——最匹配的頁面排在第一,然后是匹配度排名第二的頁面,依此類推。