先上圖來簡單看下搜索引擎的“三板斧”:數據搜集—>預處理【索引】—>排名。
數據搜集
即數據的搜集階段,將網頁從浩如瀚海的互聯網世界搜集到自己的數據庫中進行存儲。
1、抓取維護策略
面對大量需要處理的數據,很多問題需要事先考慮好。比如是“即時抓取”數據還是“事先抓取”?在對數據進行維護時是“定期抓取”(定期一次深度大抓取,替代原有的數據)還是“增量抓取”(以原有數據為根基,進行新舊交替)?
2、鏈接跟蹤
我們都知道,蜘蛛是順著鏈接爬行和抓取頁面的。如何快速抓取到對用戶來說相對重要的信息以及達到廣闊的覆蓋無疑是搜索引擎需要重點考慮的問題。
先來說第一個,怎么抓取到重要的信息。
想要知道這個,首頁要明白人們是怎么樣主觀去判斷一個頁面是否重要的(自己先思考下)。其實無外乎以下幾種情況:
網頁有歷史權重積累(域名等時間較長、質量高、資格老)、很多人會提到這個頁面(外鏈指向)、很多人會引用這個頁面(轉載或者鏡像)、這個頁面便于用戶快速瀏覽(層級較淺)、經常有新的內容出現(更新)等等。
而在鏈接跟蹤階段,其實能得到的信息只有“這個頁面便于用戶快速瀏覽(層級較淺)”,其它信息還未獲取。
對于信息的覆蓋,其實就是蜘蛛在跟蹤鏈接時的兩個策略:深度抓取與廣度抓取。
用屁股想一下也知道,廣度抓取有助于獲取到更多的信息,深度抓取有助于得到更全面的信息。搜索引擎蜘蛛在抓取數據時,通常會兩種方式都采用,但是相比較來說,廣度抓取要多于深度抓取。
3、地址庫
搜索引擎在建立初期,必須是要有一個人工錄入的種子庫的,否則蜘蛛將會在進行連接跟蹤時無從下手。順著這些種子庫,蜘蛛可以發現更多的鏈接。
當然,多個搜索引擎都會放出一個頁面的提交入口,以便于站長將站點進行提交。
不過值得一提的是,搜索引擎更喜歡自己發現的鏈接。
4、文件存儲
鏈接跟蹤完畢,需要將跟蹤到的信息進行存儲。存儲的對象,第一是url,第二是頁面內容(文件大小、最后一次更新時間、http狀態碼、頁面源代碼等等)。
關于url,由于上次看到一個泛端口作弊的站點,這里簡單的提一下。一個url是由傳輸協議、域名、端口、路徑、文件名等幾部分組成的。
預處理【索引】
數據抓取完畢,就需要進行預處理了(也有很多人喜歡把這一步叫做索引)。主要會從提取文字、分詞,建立索引,鏈接分析等幾個方面來進行。
1、提取文字
很好理解的一部,將源代碼中的文字提取出來。當然需要注意的是,這里面會包括meta信息以及一些替代文字(例如alt標簽)。
2、分詞
每到這一步,總是想感嘆下漢字的博大精深。!啊!啊!
感嘆完畢,繼續走起。
分詞是中文特有的一個步驟,即根據句子說要表達的意思將正文進行拆分。通常情況下,分詞會有基于詞典以及統計學兩種方式。
為了更加有效的進行機器分詞,通常會采用“正向匹配”與“逆向匹配”兩種思路來進行。值得一提的是,“逆向匹配”的方式更容易獲得更多有價值的信息(想想為什么)。
需要強調的一點是,為了便于分詞之后的詞組可以更好的表達文章的核心意思,會進行去停頓詞(的、啊、嗯之類的詞)以及去噪(導航、版權、分類等對主體意思表達木有影響分的內容)的處理。
3、去重
經過去停頓,去噪之后剩下的詞組,已經可以很好的表達出頁面的主體意思了。為了便于使得內容不被搜索引擎重復收錄,搜索引擎需要一個算法來進行去重處理。
比如比較知名且常用的為MD5算法,請點擊鏈接到百度百科自行腦補。
4、建立索引
去重完畢,便是一個大家經常說起的正向索引與倒排索引。
5、鏈接算法
排名
索引文件建立完畢,離排名就不遠了。
1、搜索詞的處理
搜素引擎會對搜索詞同樣進行分詞處理(想想為什么),說到這里,又不禁想感慨下漢字的博大精深之處。
針對這里,想補充的是一個叫做文本粒度的概念。額,為了避免誤認子弟,還是給出百度官方關于此處的解釋。
2、文件匹配與子集選擇
按照百度官方的說法,將用戶搜索的詞進行分詞處理之后,便可以對索引庫進行召回了。這里需要考慮到的一點是,用戶查看的往往會是前幾頁的搜索結果。所以為了資源計,搜索引擎往往會只返回部分的結果(百度顯示76頁,谷歌100頁),即召回的索引庫中的子集文件。
3、相關性計算
通常情況下,會有五種因素會影響到相關系。
關于此部分,也就是大家經常說到的SEO優化手段與方法,這里就不再贅述了。
4、排名過濾與調整
其實經過相關性計算,結果已經大體確定了。只是為了懲罰一些有作弊嫌疑的站點,搜索引擎會在此部分進行結果的微調。
比如百度的11位機制。
5、結果的顯示
深喘一口氣,終于可以看到顯示的結果了。
返回的結果會包含title、描述、快照入口、快照日期、url等幾個方面。
這里值得一提的是,不只是描述搜索引擎可以動態抓取,或許在不久的將來,title也會進行動態抓取。
轉載請保留原文地址: http://wjs-design.cn/show-540.html