網路搜索引擎

網路搜索引擎

網際網路搜索引擎是萬維網中的特殊站點,專門用來幫助人們查找存儲在其他站點上的信息。搜索引擎有能力告訴文件或文檔存儲在何處。

網際網路


網路搜索引擎
網路搜索引擎
好消息是,網上有無數網頁提供主題極為多樣的信息。壞消息是,這些網頁大都是由製作者隨便命名的,而且幾乎全都存儲在不知何名的伺服器上。當需要了解特定主題時,您怎麼知道應當閱讀哪些網頁呢?像大多數人一樣,您要使用網際網路搜索引擎。

任務


儘管各種搜索引擎的工作方式有所不同,但它們都要完成兩個基本任務:

關鍵字

基於關鍵字來搜索網際網路——或其中的一部分。生成一份索引,保存所搜尋的詞語,以及相應地址。允許用戶在索引中查找詞語或詞語組合。早期搜索引擎的索引僅包括數十萬個的網頁或文檔,每天受理的查詢可能只有一兩千次。如今,頂級搜索引擎的索引列表涵蓋數億個網頁,每天響應數千萬次查詢。在本文中,將會講解這些基本任務是如何完成,以及網際網路搜索引擎是如何整合信息以幫助在網上找到所需內容。

搜索引擎

大多數人談及網際網路搜索引擎時,實際上指的是萬維網搜索引擎。在萬維網成為網際網路最引人注目的部分之前,早就有搜索引擎幫助人們查找網上信息了。如“gopher”和“Archie”等程序可以生成索引,存儲在接入網際網路的各個伺服器上的文件信息,極大縮短了查找程序和文檔的時間。上世紀八十年代末,要想從網際網路上獲得有價值的信息,就必須知道如何使用gopher、Archie、Veronica以及其它類似程序。
大多數網際網路用戶只限於搜索萬維網,所以本文只討論面向網頁內容的搜索引擎。

工作原理


步驟原理

搜索引擎在有能力告訴文件或文檔存儲在何處之前,必須先找到它們。為了在現有的數億網頁中找到信息,搜索引擎使用了一種特殊的軟體機器人,稱之為蜘蛛程序,以此生成在網站上查詢到的詞語列表。蜘蛛程序建立詞語列表的過程被稱為爬網。(將網際網路的一部分稱為網路有些缺點——大量工具以蜘蛛命名就是其一。)為了建立並維護一份有用的詞語列表,搜索引擎的蜘蛛程序需要遊歷大量網頁。

如何爬尋

通常起點是那些訪問量很大的伺服器和熱門網頁。蜘蛛程序從一個很受歡迎的網站開始,檢索網頁上的詞語並追蹤在該網站上找到的每個鏈接。這樣,蜘蛛程序迅速開始了旅行,爬遍網上絕大多數經常訪問的網站。

谷歌實例

谷歌起始
Google的前身是一個學術搜索引擎。在介紹該系統開發過程的論文中,google創始人塞吉·布林(Sergey Brin)和勞倫斯·佩奇(Lawrence Page)舉例說明了他們的蜘蛛程序工作得有多快。他們最初開發的系統使用多個蜘蛛程序——通常是三個。每個蜘蛛程序可以同時打開300個鏈接。最多可以同時使用四個蜘蛛程序,此時該系統每秒可以遊歷100多個網頁,生成大約600KB的數據。

運行原理

要保證一切都快速運行,意味著必須開發一套系統來為蜘蛛程序提供必要信息。早期Google系統有一個專門為蜘蛛程序提供鏈接信息的伺服器。為了儘可能減少延時,Google沒有依靠網際網路服務提供商提供的域名伺服器(DNS)來將伺服器名翻譯為網址,而是準備了自己的域名伺服器。

訪問記錄

當Google的蜘蛛程序訪問一個HTML網頁時,它會記錄以下兩種信息:
網頁中的詞語詞語所在位置出現在標題、副標題、元標記以及其他相對重要的位置的詞語,會被記錄下來,這些詞語往往是日後用戶搜索時經常使用的。Google蜘蛛程序的設計旨在檢索網頁中的每一個重要單詞(對於英文來說,還要濾掉冠詞a、an和the等)。其他蜘蛛程序採用不同的方法。
這些方法通常是為了盡量加快蜘蛛程序的速度,或使用戶可以更有效地進行搜索,或二者兼而有之。例如,有些蜘蛛程序會追蹤標題、副標題和鏈接中的詞語,以及網頁中最常用的100個詞和文章前20行中的每一個詞。據說Lycos就是使用這種方法爬網的。

其他實例

Google
Google
如比AltaVista,則反其道而行之,檢索網頁中的每一個字,包括a、an、the以及其他“不重要”的詞。人們完善這種方法的幹勁從未減弱,而另一些系統則通過其它方法與之抗衡。比如關注網頁的不可見部分,即元標記。

元標記


定義

元標記允許網頁所有者來設定檢索網頁的關鍵字或概念。這很有用,特別是在網頁中的詞語有多個含義的時候——元標記可以引導搜索引擎在這些詞的幾種可能含義中選擇正確的一項。

引起問題

過分依賴元標記有一個危險:粗心或不負責任的網頁所有者會添加一些對應熱門話題的元標記,但是與網頁實際內容沒有任何關係。為了防止此種事情發生,蜘蛛程序會比對元標記和網頁內容,剔除那些與網頁詞語不符的元標記。
上述方法均基於一個假設,也就是網頁所有者希望自己的網頁被納入搜索引擎的搜索列表。但有些情況下,網頁所有者並不希望它們出現在主流搜索引擎中,或是不希望蜘蛛程序訪問網頁。比如,假設有一款網頁遊戲,每當部分頁面被顯示或者新鏈接被點擊時,遊戲就會生成新的動態頁面。如果網路蜘蛛程序進入網頁,繼而開始追蹤所有新網頁的鏈接,遊戲很可能將這些操作錯認為是由一名操作速度極快的玩家執行的,從而失去控制。為了避免此類情況,人們制定了一套拒絕蜘蛛協議。該協議如果嵌入網頁開頭的元標記部分,就會告訴蜘蛛程序遠離該頁面——既不要檢索網頁上的詞語,也不要試圖追蹤網頁上的鏈接。

搜集方法


一旦蜘蛛程序完成了網頁信息收集工作(應當注意,這是一項永遠不可能真正完成的工作——網頁不斷更新的特性意味著蜘蛛程序需要不斷爬網),搜索引擎就必須以一種有效方式存儲這些信息。要讓收集到的數據可供用戶使用,涉及兩個關鍵環節:

索引方法

Yahoo
Yahoo
在最簡單的情況下,搜索引擎只需存儲詞語和詞語所在地址。實際上,這樣做會限制搜索引擎的用途,因為這種方式無法區別詞語在網頁中是被重點使用,還是略一提及,也無法區別詞語是使用一次還是多次,或該網頁上是否含有其它包括該關鍵字的網頁的鏈接。換句話說,這樣做將無法建立排名表,無法把最有用的網頁放在查詢結果列表的頂端。
為了獲得更多有用信息,大多數搜索引擎存儲的信息不僅僅是詞語和網址,還可能存儲著該字在網頁中出現的次數。搜索引擎可能會為每個詞條指定一個權重,按照詞語出現在文檔開頭、網頁副標題、鏈接、元標記或標題的順序,權重依次增大。各商業搜索引擎指定索引中詞語權重的公式有所不同。這從一個側面解釋了為什麼使用不同搜索引擎來搜索相同關鍵字,卻會產生不同的搜索結果列表,網頁排列順序也有所不同。

信息組合

如果忽略搜索引擎存儲的額外信息的準確組合,將這些數據進行編碼可以節省存儲空間。比如,最初的Google論文描述了使用兩個位元組(每個位元組8比特)來存儲權重信息——單詞是不是大寫、字型大小大小、位置以及其他用來為數據確定級別的信息。每個因素大概佔據兩位元組中的兩三個比特(8比特=1位元組)。因此,大量信息便能以一種壓縮率極高的方式存儲下來。信息被壓縮之後,就可以建立索引了。

建立索引


索引的唯一目的是儘快找到信息。有好幾種方法可以建立索引,但是最有效的方法是建立散列表。通過散列法,運用公式給每個詞賦予一個數值。該公式可以把詞條平均分配給預定數目的分區。此種數值分配不同於根據字母表分配,這是散列表的有效性的關鍵所在。
在英語中,以某些字母開頭的單詞較多,而以其他字母開頭的單詞較少。例如,您會發現,字典的M部就比X部厚得多。這種不均衡意味著查找一個以“常見”字母開頭的單詞,要比查找不常見字母開頭的單詞花費更多時間。散列法平衡了這種區別,並且縮短了查找某一詞條的平均時間。它還將索引和實際詞條分開。散列表中含有經過散列函數轉換生成的數字和一個指向實際數據的指針,(這樣)不論什麼方式,只要它讓實際數據最有效地存儲起來,實際數據都可以用這種方式得到分類排序。通過高效的索引和有效的存儲方式,即使用戶進行了一次複雜的查詢,也能迅速查找到結果。
通過索引進行搜索需要用戶進行一次查詢,並通過搜索引擎提交。查詢可以相當簡單,最少僅需一個詞。建立比較複雜的查詢則需要使用布爾運算符來細化和拓展搜索項。

布爾運算

AND
AND(與)——以“AND”相連的若干搜索項必須全部出現在網頁或文檔中。有些搜索引擎使用運算符號“+”來代替“AND”。OR(或)——以“OR”相連的搜索項必須至少有一項出現在網頁或文檔中。

NOT

NOT(非)——“NOT”之後的搜索項不能出現在網頁或文檔中。有些搜索引擎使用運算符號“-”來代替“NOT”。FOLLOWED BY(跟隨)——某一搜索項必須緊隨另一搜索項。NEAR(臨近)——某一搜索項和另一搜索項的距離必須小於特定詞數。引號——引號內的詞語應被看作一個完整短語,出現在網頁或文檔中。

引擎組成


搜索引擎一般由搜索器、索引器、檢索器和用戶介面四個部分組成:

搜索器

其功能是在網際網路中漫遊,發現和搜集信息;

索引器

其功能是理解搜索器所搜索到的信息,從中抽取出索引項,用於表示文檔以及生成文檔庫的索引表;

檢索器

其功能是根據用戶的查詢在索引庫中快速檢索文檔,進行相關度評價,對將要輸出的結果排序,並能按用戶的查詢需求合理反饋信息;

用戶介面

其作用是接納用戶查詢、顯示查詢結果、提供個性化查詢項。

robots

robots協議(也稱為爬蟲協議、爬蟲規則、機器人協議等)也就是robots.txt,網站通過robots協議告訴搜索引擎哪些頁面可以抓取,哪些頁面不能抓取。Robots協議是網站國際網際網路界通行的道德規範,其目的是保護網站數據和敏感信息、確保用戶個人信息和隱私不被侵犯。因其不是命令,故需要搜索引擎自覺遵守。一些病毒malware(馬威爾病毒)經常通過忽略robots協議的方式,獲取網站後台數據和個人信息。

發展趨勢


自然搜索

人們的日常交流是使用自然語言而非關鍵(字)詞,因為關鍵(字)詞表達的意思和意圖不完整不準確,反映在搜索結果上的缺陷是返回信息過多。基於自然語言搜索,符合人們的語言習慣,像人與人之間的交流一樣輕鬆、直接、方便,這無疑給用戶提供了巨大的便利。

智能搜索

基於關鍵詞搜索是符號匹配信息,並不能處理關鍵詞本身的語義,這就是基於關鍵詞搜索存在一系列缺陷的原因。從這個層面上講,搜索引擎的發展趨勢是,把“語言計算技術和人工智慧融合,讓計算機返回的結果富有針對性,將準確信息顯示在前兩三項的搜索結果之中。讓計算機具有人的智能和邏輯分析能力,能夠理解自然語言表達的語義,使搜索結果與用戶需求實現更精準的匹配,以解決問題的形式把結果返回給用戶。