這就是搜索引擎 -- 讀書筆記一
相信搜索引擎對於每一個愛好算法甚至愛好技術的IT人員都具有強烈的好奇心吧,因為搜索引擎在互聯網中的地位實在是不可撼動。想象如果互聯網沒有了搜索引擎,那么我們平常技術上出現瓶頸了怎么辦?甚至連普通的生活都離不開搜索,大學生的你訂餐了嗎?
搜索引擎已經發展為每個人上網都離不開的重要工具,其技術發展歷程是怎樣的呢?其基本目標是什么?核心技術問題又是什么呢?在接下來的一系列博文中,我會根據讀書和自己的總結用平乏的語言來表達出來,希望對朋友們有所幫助。另外,博友們如果有好的相關資源,也感謝留言。
今天,我給大家講解一下搜索引擎及其技術架構的基礎知識,讓我們對搜索引擎有一個大致的了解。
商業搜索引擎公司的發展
在信息量快速增長的情況下,如何能夠找到滿足用戶需求的網頁內容就日益成為越來越重要的問題。信息增長速度越快,用戶需求越迫切,相應的搜索結果就越要准確。大的搜索引擎公司就是在這個用戶需求背景下,從建立到逐步壯大,乃至發展到今天搜索引擎成為最重要的互聯網的應用。
早期時候,隨着互聯網的進一步的快速發展,信息的爆炸性增長,已有的搜索引擎服務提供商所提供的搜索服務質量並無大的改善。Google於1998年成立,以PageRank鏈接分析等新技術大幅度提高了搜索質量,之后高速發展並搶占了絕大多數的搜索引擎市場,成為目前最重要的互聯網之一。想想為什么搜索引擎公司這么看重搜索技術?就拿大學生訂餐這一事情來說,夠實際吧,如果你訂餐時查詢到的前3頁搜索結果都是已經售完了的飯菜品,那么此時飢餓的你感受如何?相信你連揍死店家的沖動都有。在另外一家外賣店的首頁上,搜索第一條就是很新鮮的菜品,你會選擇哪一家外賣店呢?
搜索引擎技術發展史
從搜索引擎所采取的技術來說,可以將搜索引擎技術的發展划分為4個階段:分類目錄、文本檢索、鏈接分析和用戶中心。
史前時代:分類目錄的一代
這個時代可以稱為“導航時代”,Yahoo和國內hao123是這個時代的代表。通過人工收集整理,把屬於各個類別的高質量網站或者網頁分門別類羅列,用戶可以根據分級目錄來查找高質量的網站。這種方式是純人工、最原始的方式,並未采取什么高深的技術手段。
第一代:文本檢索的一代
文本檢索的一代采用經典的信息檢索模型,比如布爾模型、向量空間模型或者概率模型,來計算用戶查詢關鍵詞和網頁文本內容的相關程度。網頁之間有豐富的鏈接關系,而這一代搜索引擎並未使用這些信息。早期的很多搜索引擎比如AltaVista、Excite等大都采取這種模式。
第二代:鏈接分析的一代
這一代的搜索引擎充分利用了網頁之間的鏈接關系,並深入挖掘和利用了網頁鏈接所代表的含義。通常而言,網頁鏈接代表了一種推薦關系,所以通過鏈接分析可以在海量內容中找出重要的網頁。這種重要性本質上是對網頁流行程度的一種衡量,因為被推薦次數多的網頁其實代表了其具有流行性。搜索引擎通過結合網頁流行性和內容相似性來改善搜索質量。
我們都知道Google率先提出並使用PageRank鏈接分析技術,並大獲成功,這同時引起了學術界和其他商業搜索引擎的關注。后來學術界陸續提出了很多改進的鏈接分析算法。目前幾乎所有的商業搜索引擎都采用了鏈接分析技術。
采用鏈接分析能夠有效改善搜索結果質量,但是這種搜索引擎並未考慮用戶的個性化要求,所以只要輸入的查詢請求相同,所有用戶都會獲得相同的搜索結果。另外,很多網站擁有者為了獲得更高的搜索排名,針對鏈接分析算法提出了不少鏈接作弊方案,這樣導致了搜索結果質量變差。
第三代:用戶中心的一代
目前的搜索引擎大都可以歸入第三代,即以理解用戶需求為核心。不同用戶即使輸入同一個查詢關鍵詞,但其目的也有可能不一樣。比如同樣輸入“蘋果”作為查詢詞,一個追捧IPhone的時尚青年和一個果農的目的會有相當大的差距。而目前搜索引擎大部分致力於解決如下問題:如何能夠理解用戶發出的某個很短小的查詢詞背后包含的真正需求,所以這一代搜索引擎稱之為以用戶為中心的一代。
搜索引擎的技術架構
作為互聯網應用中最具技術含量的應用之一,優秀的搜索引擎需要復雜的架構和算法,以此來支撐對海量數據的獲取、存儲、以及對用戶查詢的快速而准確的相應。
我們來看看這個搜索引擎的基礎架構:
搜索引擎的信息源自於互聯網的網頁,通過網絡爬蟲將整個互聯網的信息獲取到本地,因為互聯網頁面中有相當大比例的內容是完全相同或者近似重復的,“網頁去重”模塊會對此做出檢測,並去除重復內容。
在此之后,搜索引擎會對網頁進行解析,抽取出網頁主題內容,以及頁面中包含的指向其他頁面的鏈接。為了加快響應用戶查詢的速度,網頁內容通過“倒排索引”這種高效查詢數據結構來保存,而網頁之間的鏈接關系也會予以保存。之所以要保存鏈接關系,是因為這種關系在網頁相關性排序階段是可利用的,通過“鏈接分析”可以判斷頁面的相對重要性,對於為用戶提供准確的搜索結果幫助很大。
當搜索引擎接收到用戶的查詢詞后,首先需要對查詢詞進行分析,希望能夠結合查詢詞和用戶信息來正確推到用戶的真正搜索意圖。在此之后,首先在緩存中查找,搜索引擎的緩存系統存儲了不同的查詢意圖對應的搜索結果,如果能夠在緩存系統找到滿足用戶需求的信息,則可以直接將搜索結果返回給用戶,這樣既省掉了重復計算對資源的消耗,又加快了響應速度;如果保存在緩存的信息無法滿足用戶需求,搜索引擎需要調用“網頁排序”模塊功能,根據用戶的查詢實時計算哪些網頁是滿足用戶信息需求的,並排序輸出作為搜索結果。而網頁排序最重要的兩個參考因素中,一個是內容相似性因素,即哪些網頁是和用戶查詢密切相關的;另外一個是網頁重要性因素,即哪些網頁是質量較好或相對重要的,這點往往可以從鏈接分析的結果獲得。結合以上兩個考慮因素,就可以對網頁進行排序,作為用戶查詢的搜索結果。
后話
如今,除了上述的子功能模塊,搜索引擎的“反作弊”模塊成為日益重要的功能。搜索引擎作為互聯網用戶的上網入口,對於網絡流量的引導與分流至關重要,甚至可以說起了決定性作用。
因此,作為IT人員或者即將進入IT行業的童鞋們,我們都應該對搜索引擎有一些基本的認識。