深度解析搜尋引擎的原理結構

jxh_123發表於2015-05-14
【說明】本文轉自:http://www.mahaixiang.cn/seoyjy/246.html


深度解析搜尋引擎的原理結構

對於我們這些做網站優化的來說,如果不懂搜尋引擎的原理就來做SEOer,也就相當於說是盲人登山的感覺。所以馬海祥覺的只有瞭解了搜尋引擎工作的基礎流程與原理,我們才能更好的去針對搜尋引擎做出相關優化工作。

搜尋引擎(searchengine)也可以說是指根據一定的策略、運用特定的計算機程式從網際網路上搜集資訊,在對資訊進行組織和處理後,為使用者提供檢索服務,將使用者檢索相關的資訊展示給使用者的系統。搜尋引擎包括全文索引、目錄索引、元搜尋引擎、垂直搜尋引擎、集合式搜尋引擎、門戶搜尋引擎與免費連結列表等。在此,藉助馬海祥部落格的平臺,我也來淺談一下我對搜尋引擎原理結構的一些認識

搜尋引擎的原理結構框架大概分為三部分,即:資料蒐集—>預處理【索引】—>排名。如下圖所示:

搜尋引擎的原理框架:資料蒐集、預處理、排名

一、資料蒐集

資料蒐集直白的講,即資料的蒐集階段,將網頁從浩如瀚海的網際網路世界蒐集到自己的資料庫中進行儲存。搜尋引擎派出一個能夠在網上發現新網頁並抓檔案的程式,這個程式通常稱之為蜘蛛(Spider)。搜尋引擎從已知的資料庫出發,就像正常使用者的瀏覽器一樣訪問這些網頁並抓取檔案。搜尋引擎通過這些爬蟲去爬網際網路上的外鏈,從這個網站爬到另一個網站,去跟蹤網頁中的連結,訪問更多的網頁,這個過程就叫爬行。這些新的網址會被存入資料庫等待抓取。所以跟蹤網頁連結是搜尋引擎蜘蛛(Spider)發現新網址的最基本的方法。搜尋引擎抓取的頁面檔案與使用者瀏覽器得到的完全一樣,抓取的檔案存入資料庫。

1、連結跟蹤

蜘蛛是順著連結爬行和抓取頁面的。如何快速抓取到對使用者來說相對重要的資訊以及達到廣闊的覆蓋無疑是搜尋引擎需要重點考慮的問題。由於網際網路上無數的網站頁面,搜尋引擎蜘蛛無法將所有的頁面都下載儲存到伺服器。因此,許多搜尋引擎的網路蜘蛛不是所有的頁面都抓取的,只是抓取那些重要的網頁,而在抓取的時候評價重要性主要的依據是某個網頁的連結廣泛度及外部連結的數量與質量。所以馬海祥覺的在給網站加外鏈時不要只給首頁外鏈,其他頁面也要加(這和外鏈的隨機性也有關)。

2、在抓取網頁的時候,搜尋引擎蜘蛛一般有兩種策略:廣度優先和深度優先。

廣度優先是指搜尋引擎蜘蛛會先抓取起始網頁中連結的所有網頁,然後再選擇其中的一個連結網頁,繼續抓取在此網頁中連結的所有網頁。這是最常用的方式,因為這個方法可以讓搜尋引擎蜘蛛並行處理,提高其抓取速度。

搜尋引擎蜘蛛的廣度優先策略

深度優先是指搜尋引擎蜘蛛會從起始頁開始,一個連結一個連結跟蹤下去,處理完這條線路之後再轉入下一個起始頁,繼續跟蹤連結。這個方法有個優點是搜尋引擎蜘蛛在設計的時候比較容易。

搜尋引擎蜘蛛的深度優先策略

廣度抓取有助於獲取到更多的資訊,深度抓取有助於得到更全面的資訊。搜尋引擎蜘蛛在抓取資料時,通常會兩種方式都採用,但是想比較來說,廣度抓取要多於深度抓取。

這是搜尋引擎抓取資料的二大策略,當然其中還夾雜著一些加入了人工智慧的策略,比如:

a、熱點優先策略:對於爆發式的熱點關鍵詞進行優先抓取,而且不需要經過嚴格的去重和過濾,因為會有新的連結來覆蓋以及使用者的主動選擇。
  b、權威優先策略:搜尋引擎會給每個網站分配一個權威度,通過網站歷史、網站更新等來確定網站的權威度,優先抓取權威度高的網站連結。
  c、使用者點選策略:當大部分搜尋一個行業詞庫內的關鍵詞時,頻繁的點選同一個網站的搜尋結果,那麼搜尋引擎會更頻繁的抓取這個網站。
  d、歷史參考策略:對於保持頻繁更新的網站,搜尋引擎會對網站建立更新歷史,根據更新歷史來預估未來的更新量以及確定抓取頻率。

3、地址庫

為了避免重複爬行和抓取網址,搜尋引擎會建立一個地址庫,記錄已經被發現還沒有抓取的頁面,以及已經被抓取的頁面。地址庫中的URL有以下幾個來源:

a、人工錄入的種子網站。
  b、蜘蛛抓取頁面後,從HTML中解析出新的連結URL,與地址庫中的資料對比,如果是地址庫中沒有的網址,就存入待訪問地址庫。
  c、站長通過搜尋引擎網頁提交表格提交進來的網址。

蜘蛛按重要性從待訪問地址庫中提取URL,訪問並抓取頁面,然後把這個URL從待訪問地址庫中刪除,放進已訪問地址庫中。大部分主流搜尋引擎都提供一個表格,讓站長提交網址。不過這些提交來的網址都只是存入地址庫而已,是否收錄還要看頁面重要性如何。搜尋引擎所收錄的絕大部分頁面是蜘蛛自己跟蹤連結得到的。可以說提交頁面基本上是毫無用處的,搜尋引擎更喜歡自己沿著連結發現新頁面。

4、檔案儲存

連結跟蹤完畢,需要將跟蹤到的資訊進行儲存。儲存的物件,第一是url,第二是頁面內容(檔案大小、最後一次更新時間、http狀態碼、頁面原始碼等等)。

二、預處理【索引】

資料抓取完畢,就需要進行預處理了,一般也叫索引。主要會從提取文字、中文分詞、去停止詞、消噪、去重、正向索引、倒排索引、連結分析、特殊檔案處理等幾個方面來進行。

搜尋引擎的提取文字、中文分詞、去停止詞、消噪、去重、正向索引、倒排索引、連結分析、特殊檔案等預處理

1、提取文字

這個應該很好理解的,將原始碼中的文字提取出來。當然需要注意的是,這裡面會包括meta資訊以及一些替代文字,除了使用者可見的文字資訊外,還有程式碼中的文字資訊(例如alt標籤)。目前搜尋引擎都是以文字為基礎。蜘蛛抓取的HTML程式碼中除了使用者在瀏覽器看到的文字外還有大量HTML格式標籤、DIV+CSS標籤、JavaScript程式等無法用於排名的內容。所以搜尋引擎第一步就是要去除從HTML程式碼中抓取的標籤、程式等,提取可以用於排名處理的頁面文字內容。除了可見文字,搜尋引擎也會提取一些特殊的包含文字資訊的程式碼,如Meta標籤中的文字、alt標籤、FLASH檔案代替的文字、連結的錨文字等等。

2、分詞

中文分詞 (Chinese Word Segmentation)指的是將一個漢字序列切分成一個一個單獨的詞。分詞就是將連續的字序列按照一定的規範重新組合成詞序列的過程。我們知道,在英文的行文中,單詞之間是以空格作為自然分界符的,而中文只是字、句和段能通過明顯的分界符來簡單劃界,唯獨詞沒有一個形式上的分界符,雖然英文也同樣存在短語的劃分問題,不過在詞這一層上,中文比之英文要複雜的多、困難的多。分詞方法主要包括:基於理解的分詞方法、基於字串匹配的分詞方法、基於統計的分詞方法。這裡就不多說了,分詞可以說是搜尋引擎最重要的部分。中文分詞的框架如下圖所示:

中文分詞步驟詳解

3、去停止詞

無論英文還是中文,頁面內容中都會有一些出現頻率很高,卻對內容沒有任何影響的詞,如“的”、“地”、“得”之類的助詞,“啊”、“哈”、“呀”之類的感嘆詞,“從而”、“以”、“卻”之類的介詞,這些詞被稱為停止詞,因為它們對頁面主要意思沒有什麼影響。英文中常見的停止詞如the,a,an,to,of等。搜尋引擎在索引頁面之前會去掉這些停止詞,使索引資料主題更為突出,減少無謂的計算量。

4、消噪

對搜尋引擎來說,並不是網頁上的所有部分它都需要抓取,有一些部分對排名計算是沒有意義的,比如導航條、版權文字說明、廣告等等區塊。考慮到搜尋引擎需要處理的網頁數量非常龐大,這部分無意義內容的絕對量也是非常大的,為了節省計算資源,提升排名計算的速度,搜尋引擎在預處理時會將這些內容識別後剔除出去。這個過程就稱為消噪。

現在搜尋引擎應用的消噪技術可分為三類:基於網頁結構的方法,基於模版的方法和基於視覺化資訊的方法。

A、基於視覺化資訊的方法:是指利用頁面中元素的佈局資訊,從而能夠利用佈局資訊對頁面進行劃分,保留頁面中間區域,而其它區域則認為是噪音。
  B、基於網頁結構的方法:即根據html標籤對頁面來分割槽,分出一些頁頭、導航、正文、廣告等等的區塊,只抓取正文等重要的部分。
  C、基本模版的方法:指的是從一組網頁中提取出相同的模板,而後利用這些模版從網頁中抽取有用的資訊。

5、SEOer如何人工減噪?

A、搜尋引擎會基於視覺化資訊識別噪音,因此馬海祥建議SEO人員在建設網頁時應儘量遵循通用的原則,將正文內容安排在頁面中間區域,而不要弄一些非常個性化的頁面,增加搜尋引擎識別噪音的難度。
  B、搜尋引擎會基於網頁結構識別噪音,因此馬海祥建議SEO人員在處理網頁結構時建議引入JS程式碼,將頁頭、廣告、版權宣告等內容通過JS呼叫來實現。當然是一些你不想被抓取的版塊,因為這些區塊在站內很可能都是重複出現的,特別是廣告、版權、評論這些。一旦被收錄,很容易造成重複內容堆積,影響整站的內容質量評分。
  C、搜尋引擎會基於網頁模版識別噪音,因此SEO人員在建設網頁時應儘量採用同一套模版,尤其是在改版的時候不要輕易動模版,以幫助搜尋引擎識別噪音區塊。

6、去重

經過去停頓,去噪之後剩下的片語,已經可以很好的表達出頁面的主體意思了。為了便於使得內容不被搜尋引擎重複收錄,搜尋引擎需要一個演算法來進行去重處理。比如比較知名且常用的為MD5演算法,搜尋引擎根據特徵關鍵詞計算指紋區分。

7、正向索引

正向索引簡稱為索引。經過前五步之後,接下來搜尋引擎將提取文中關鍵詞,按分詞程式劃分好的詞,同時記錄每個詞在頁面中出現的頻率、出現的次數、格式(如加粗、傾斜、黑體、H標籤、加顏色、錨文字等)、位置(如頁面第一段文字或者最後一段等)。然後把這些詞語記錄為串關鍵詞集合,那麼這些詞的相關資訊如格式、權重等也會記錄在案。實際在搜尋引擎中每個關鍵詞也被轉換為ID形式記錄,然後每個檔案ID對應一串關鍵詞ID。這種每個檔案ID對應一個串關鍵詞ID這樣的資料結構被稱之為正向索引。比如文章A對應1、2、3這三個關鍵詞,文章B對應2、4、5這三個關鍵詞。

搜尋引擎的正向索引

8、倒排索引

正向索引還不能直接運用到關鍵詞排名,假設使用者搜尋關鍵詞2,那麼搜尋引擎講掃描索引庫中所有檔案,這樣時間太長無法滿足使用者返回結果的速度,所以這裡運用到了倒排索引,把關鍵詞ID對映到文章ID,比如關鍵詞2對應文章A、文章B,如此一來大大縮短搜尋引擎掃描索引庫中的檔案,縮短掃描時間。

9、連結演算法

在此階段,各個頁面之間的連結關係也會被蒐集。頁面中有哪些匯入連結,這些連結都指向哪裡,哪些連結又指向這個頁面,連結用的是URL還是錨文字,這些複雜的連結關係網就形成了頁面的連結權重,此時錨文字將被作為重要排名依據,當量廣泛的錨文字將被列入計算關鍵詞排名的步驟中。

10、特殊檔案的處理

除了HTML 檔案外,搜尋引擎通常還能抓取和索引以文字為基礎的多種檔案型別,如PDF、Word、WPS、XLS、PPT、TXT 檔案等,我們在搜尋結果中也經常會看到這些檔案型別。但搜尋引擎目前還不能很好的處理圖片、視訊、Flash 這類非文字內容,也不能執行指令碼和程式。

三、排名

索引檔案建立完畢之後,接下來要做的就是排名了。

搜尋引擎工作的基礎流程與原理

1、搜尋詞的處理

這一步和前面的預處理一樣也要中文分詞、去停止詞。還要進行指令處理,拼寫錯誤矯正,整合搜尋觸發等。這個上面基本是一樣的。

2、檔案匹配

從上面我們看到搜尋引擎的蜘蛛是無時無刻的都在爬行和抓取,另外不斷對抓取的資料進行整理歸納以及儲存。這些過程並不是使用者在搜尋的時候進行的,而是在搜尋之前就預處理好的,真正當使用者搜尋某個關鍵詞時,搜尋引擎只需要在自己的資料庫中進行查詢,而不是實時的對網際網路上所有的網站進行查詢。搜尋引擎就會在和該關鍵詞對應的所有檔案中進行簡單的計算和匹配,找到匹配頁面。

3、初始子集選擇

為了更加快速的滿足使用者的需要,搜尋引擎需要從所有的相關頁面中進行選擇,只計算權重稍高的頁面返回給使用者,這個過程就是常說的初始子集的篩選。大家可以試想,當我們搜尋某個關鍵詞時,往往包含這個關鍵詞的頁面數量是巨大的,甚至幾十萬、上百萬。如果搜尋引擎從這麼大的資料中進行匹配的話時間顯然更長,為了更好的滿足使用者的需求,實際中搜尋引擎只會選擇哪些權重高的頁面去匹配(大概1000個左右)。

4、相關性計算

(1)、關鍵詞常用程度

經過分詞後的多個關鍵詞,對整個搜尋字串的意義貢獻並不相同。越常用的詞對搜尋詞的意義貢獻越小,越不常用的詞對搜尋詞的意義貢獻越大。舉個例子,假設使用者輸入的搜尋詞是“馬海祥部落格”。“部落格”這個詞常用程度非常高,在很多頁面上會出現。它對“馬海祥部落格”這個搜尋詞的辨識程度和意義相關度貢獻就很小。找出那些包含“部落格”這個詞的頁面,對搜尋排名相關性幾乎沒有什麼影響,有太多頁面包含“部落格”這個詞。而“馬海祥”這個詞常用程度就比較低,對“馬海祥部落格”這個搜尋詞的意義貢獻要大得多。那些包含“馬海祥”這個詞的頁面,對“馬海祥部落格”這個搜尋詞會更為相關。常用詞的極致就是停止詞,對頁面意義完全沒有影響。
  所以搜尋引擎對搜尋詞串中的關鍵詞並不是一視同仁地處理,而是根據常用程度進行加權。不常用的詞加權係數高,常用詞加權係數低,排名演算法對不常用的詞給予更多關注。我們假設A、B兩個頁面都各出現“部落格”及“馬海祥”兩個詞。但是“部落格”這個詞在A頁面出現於普通文字中,“馬海祥”這個詞在A頁面出現於標題標籤中。B頁面正相反,“部落格”出現在標題標籤中,而“馬海祥”出現在普通文字中。那麼針對“馬海祥部落格”這個搜尋詞,A頁面將更相關。

(2)、詞頻及密度

一般認為在沒有關鍵詞堆積的情況下,搜尋詞在頁面中出現的次數多,密度越高,說明頁面與搜尋詞越相關。當然這只是一個大致規律,實際情況未必如此,所以相關性計算還有其他因素。出現頻率及密度只是因素的一部分,而且重要程度越來越低。

(3)、關鍵詞位置及形式

就像在索引部分中提到的,頁面關鍵詞出現的格式和位置都被記錄在索引庫中。關鍵詞出現在比較重要的位置,如標題標籤、黑體、H1等,說明頁面與關鍵詞越相關。這一部分就是頁面seo所要解決的。

(4)、關鍵詞距離

切分後的關鍵詞完整匹配地出現,說明與搜尋詞最相關。比如搜尋“呼叫中心”時,頁面上連續完整出現“呼叫中心”四個字是最相關的。如果“呼叫”和“中心”兩個詞沒有連續匹配出現,出現的距離近一些,也被搜尋引擎認為相關性稍微大一些。

(5)、連結分析及頁面權重

除了頁面本身的因素,頁面之間的連結和權重關係也影響關鍵詞的相關性。其中最重要的是錨文字。頁面有越多以拽索詞為錨文字的匯入連結,說明頁面的相關性越強。連結分析還包括了連結源頁面本身的主題、錨文字周圍的文字等。

5、排名過濾及調整,過濾一些作弊等

通過各種演算法(例如近期百度的綠蘿演算法石榴演算法)的調整,過濾一些作弊的網站,通過演算法規則或人工調整給予違規網站的降權,提取展示優質網站的資訊。

6、搜尋快取

搜尋引擎的搜尋快取也即cache,是計算機領域非常常用的一種技術,我們最熟悉的,恐怕就是瀏覽器的快取。搜尋引擎的快取可以這樣簡單描述:在高速記憶體硬體裝置開闢一塊資料儲存區,用來儲存搜尋使用者的查詢、索引資料、搜尋的中間結果或者最終的搜尋結果。快取的大小是有限度的,不可能無限儲存資料。因此搜尋引擎會採取快取更新策略和快取淘汰策略管理維護快取區儲存的資料。搜尋引擎快取的價值搜尋引擎快取具有兩個價值:a、加快響應搜尋使用者查詢的速度,提高搜尋使用者體驗;b、減少搜尋引擎後臺的計算量,節省計算資源。

7、排名結果顯示

根據資訊的有效性、原創性、資訊的認可度和網站自身權重給予相應的排名顯示。並查詢及點選日誌,對搜尋使用者的搜尋做統計,最後根據該使用者搜尋習慣給出相應結果。

本文為馬海祥部落格原創文章,如想轉載,請註明原文網址摘自於http://www.mahaixiang.cn/seoyjy/246.html,註明出處;否則,禁止轉載;謝謝配合!



相關文章