搜索引擎工作的基礎(chǔ)流程與原理 |
發(fā)布時間: 2012/9/10 10:46:56 |
搜索引擎最重要的是什么?有人會說是查詢結(jié)果的準(zhǔn)確性,有人會說是查詢結(jié)果的豐富性,但其實(shí)這些都不是搜索引擎最最致命的地方。對于搜索引擎來說,最最致命的是查詢時間。試想一下,如果你在百度界面上查詢一個關(guān)鍵詞,結(jié)果需要5分鐘才能將你的查詢結(jié)果反饋給你,那結(jié)果必然是你很快的舍棄掉百度。
搜索引擎為了滿足對速度苛刻的要求(現(xiàn)在商業(yè)的搜索引擎的查詢時間單位都是微秒數(shù)量級的),所以采用緩存支持查詢需求的方式,也就是說我們在查詢搜索時所得到的結(jié)果并不是及時的,而是在其服務(wù)器已經(jīng)緩存好了的結(jié)果。那么搜索引擎工作的大體流程是什么樣子呢?我們可以理解為三段式。
本文僅僅是對著三段工作流程進(jìn)行大體上的講解與綜述,其中一些詳細(xì)的技術(shù)細(xì)節(jié)將會用其它的文章進(jìn)行單獨(dú)的講解。
一.網(wǎng)頁搜集。
網(wǎng)頁搜集,其實(shí)就是大家常說的蜘蛛抓取網(wǎng)頁。那么對于蜘蛛(google稱之為機(jī)器人)來說,他們感興趣的頁面分為三類:
1.蜘蛛從未抓去過的新頁面。
2.蜘蛛抓去過,但頁面內(nèi)容有改動的頁面。
3.蜘蛛抓取過,但現(xiàn)在已刪除了的頁面。
那么如何行之有效的發(fā)現(xiàn)這三類頁面并進(jìn)行抓取,就是spider程序設(shè)計的初衷與目的。那么這里就涉及到一個問題,蜘蛛抓取的起始點(diǎn)。
每一位站長只要你的網(wǎng)站沒有被嚴(yán)重降權(quán),那么通過網(wǎng)站后臺的服務(wù)器,你都可以發(fā)現(xiàn)勤勞的蜘蛛光顧你的站點(diǎn),但是你們有沒有想過從編寫程序的角度上來說,蜘蛛是怎么來的呢?針對于此,各方有各方的觀點(diǎn)。有一種說法,說蜘蛛的抓取是從種子站(或叫高權(quán)重站),依照權(quán)重由高至低逐層出發(fā)的。另一種說法蜘蛛爬在URL集合中是沒有明顯先后順序的,搜索引擎會根據(jù)你網(wǎng)站內(nèi)容更新的規(guī)律,自動計算出何時是爬取你網(wǎng)站的最佳時機(jī),然后進(jìn)行抓取。
其實(shí)對于不同的搜索引擎,其抓取出發(fā)點(diǎn)定然會有所區(qū)別,針對于百度,Mr.Zhao較為傾向于后者。在百度官方博客發(fā)布的《索引頁鏈接補(bǔ)全機(jī)制的一種辦法》(地址:http://stblog.baidu- tech.com/?p=2057)一文中,其明確指出“spider會盡量探測網(wǎng)頁的發(fā)布周期,以合理的頻率來檢查網(wǎng)頁”,由此我們可以推斷,在百度的索引庫中,針對每個URL集合,其都計算出適合其的抓取時間以及一系列參數(shù),然后對相應(yīng)站點(diǎn)進(jìn)行抓取。
在這里,我要說明一下,就是針對百度來說,site的數(shù)值并非是蜘蛛已抓取你頁面的數(shù)值。比如site:www.seozhao.com,所得出的數(shù)值并不是大家常說的百度收錄數(shù)值,想查詢具體的百度收錄量應(yīng)該在百度提供的站長工具里查詢索引數(shù)量。那么site是什么?這個我會在今后的文章中為大家講解。
那么蜘蛛如何發(fā)現(xiàn)新鏈接呢?其依靠的就是超鏈接。我們可以把所有的互聯(lián)網(wǎng)看成一個有向集合的聚集體,蜘蛛由起始的URL集合A沿著網(wǎng)頁中超鏈接開始不停的發(fā)現(xiàn)新頁面。在這個過程中,每發(fā)現(xiàn)新的URL都會與集合 A中已存的進(jìn)行比對,若是新的URL,則加入集合A中,若是已在集合A中存在,則丟棄掉。蜘蛛對一個站點(diǎn)的遍歷抓取策略分為兩種,一種是深度優(yōu)先,另一種就是寬度優(yōu)先。但是如果是百度這類商業(yè)搜索引擎,其遍歷策略則可能是某種更加復(fù)雜的規(guī)則,例如涉及到域名本身的權(quán)重系數(shù)、涉及到百度本身服務(wù)器矩陣分布等。
二.預(yù)處理。
預(yù)處理是搜索引擎最復(fù)雜的部分,基本上大部分排名算法都是在預(yù)處理這個環(huán)節(jié)生效。那么搜索引擎在預(yù)處理這個環(huán)節(jié),針對數(shù)據(jù)主要進(jìn)行以下幾步處理:
1.提取關(guān)鍵詞。
蜘蛛抓取到的頁面與我們在瀏覽器中查看的源碼是一樣的,通常代碼雜亂無章,而且其中還有很多與頁面主要內(nèi)容是無關(guān)的。由此,搜索引擎需要做三件事情:?代碼去噪。去除掉網(wǎng)頁中所有的代碼,僅剩下文本文字。②去除非正文關(guān)鍵詞。例如頁面上的導(dǎo)航欄以及其它不同頁面共享的公共區(qū)域的關(guān)鍵詞。③去除停用詞。停用詞是指沒有具體意義的詞匯,例如“的”“在”等。
當(dāng)搜索引擎得到這篇網(wǎng)頁的關(guān)鍵詞后,會用自身的分詞系統(tǒng),將此文分成一個分詞列表,然后儲存在數(shù)據(jù)庫中,并與此文的URL進(jìn)行一一對應(yīng)。下面我舉例說明。
假如蜘蛛爬取的頁面的URL是http://www.seozhao.com/2.html,而搜索引擎在此頁面經(jīng)過上述操作后提取到的關(guān)鍵詞集合為p,且p是由關(guān)鍵詞p1,p2,……,pn組成,則在百度數(shù)據(jù)庫中,其相互間的關(guān)系是一一對應(yīng),如下圖。
2.消除重復(fù)與轉(zhuǎn)載網(wǎng)頁。
每個搜索引擎其識別重復(fù)頁面的算法均不相同,但是其中 Mr.Zhao認(rèn)為,如果將消重算法理解為由100個元素組成,那么所有的搜索引擎恐怕其80個元素都是完全一樣的。而另外20個元素,則是根據(jù)不同的搜索引擎針對seo的態(tài)度不同,而專門設(shè)立的對應(yīng)策略。本文僅對搜索引擎大體流程進(jìn)行初步講解,具體數(shù)學(xué)模型不多做講解。
3.重要信息分析。
在進(jìn)行代碼除噪的過程中,搜索引擎并非簡單的將其去除掉而已,而是充分利用網(wǎng)頁代碼(例如H標(biāo)簽、strong標(biāo)簽)、關(guān)鍵詞密度、內(nèi)鏈錨文本等方式分析出此網(wǎng)頁中最重要的詞組。
4.網(wǎng)頁重要度分析。
通過指向該網(wǎng)頁的外鏈錨文本所傳遞的權(quán)重數(shù)值,來為此網(wǎng)頁確定一個權(quán)重數(shù)值,同時結(jié)合上述的“重要信息分析”,從而確立此網(wǎng)頁的關(guān)鍵詞集合p中每一個關(guān)鍵詞所具備的排名系數(shù)。
5.倒排文件。
正如上文所說,用戶在查詢時所得到的查詢結(jié)果并非是及時的,而是在搜索引擎的緩存區(qū)已經(jīng)大體排好的,當(dāng)然搜索引擎不會未卜先知,他不會知道用戶會查詢哪些關(guān)鍵詞,但是他可以建立一個關(guān)鍵詞詞庫,而當(dāng)其處理用戶查詢請求的時候,會將其請求按照詞庫進(jìn)行分詞。那么這樣下來,搜索引擎就可以在用戶產(chǎn)生查詢行為之前,將詞庫中的每一個關(guān)鍵詞其對應(yīng)的URL排名先行計算好,這樣就大大節(jié)省了處理查詢的時間了。
簡單來說,搜索引擎用控制器來控制蜘蛛爬取,然后將URL集與原始數(shù)據(jù)庫進(jìn)行保存,保存之后再用索引器控制每個關(guān)鍵詞與URL之間的對應(yīng)關(guān)系,并將其保存在索引數(shù)據(jù)庫中。
下面我們來舉例說明。
假若http://www.seozhao.com/2.html頁面被切詞成p={p1,p2,p3,……,pn},則其在索引數(shù)據(jù)庫中由下圖方式體現(xiàn)。
上圖是為了方便大家便于理解而做出來的,索引數(shù)據(jù)庫實(shí)際上是搜索引擎中對性能要求最高的數(shù)據(jù)庫,因?yàn)槔锩嫠幸蛩囟紩艿剿惴ㄓ绊,所以?shí)際上的索引數(shù)據(jù)庫我覺得應(yīng)該是由多維數(shù)組所組成的較為復(fù)雜的索引表,但其主要體現(xiàn)的大體作用與上圖相同。
三、查詢服務(wù)。
查詢服務(wù)顧名思義,就是處理用戶在搜索界面的查詢請求。搜索引擎構(gòu)建檢索器,然后分三步來處理請求。
1.根據(jù)查詢方式與關(guān)鍵詞進(jìn)行切詞。
首先先把用戶搜索的關(guān)鍵詞切分為一個關(guān)鍵詞序列,我們暫時用q來表示,則用戶搜索的關(guān)鍵詞q被切分為q={q1,q2,q3,……,qn}。
然后再根據(jù)用戶查詢方式,例如是所有詞連在一起,還是中間有空格等,以及根據(jù)q中不同關(guān)鍵詞的詞性,來確定所需查詢詞中每一個詞在查詢結(jié)果的展示上所占有的重要性。
2.搜索結(jié)果排序。
我們有了搜索詞集合q,q中每個關(guān)鍵詞所對應(yīng)的URL排序——索引庫,同時也根據(jù)用戶的查詢方式與詞性計算出每個關(guān)鍵詞在查詢結(jié)果的展示上所占有的重要,那么只需要進(jìn)行一點(diǎn)綜合性的排序算法,搜索結(jié)果就出來了。
3.展示搜索結(jié)果與文檔摘要。
當(dāng)有了搜索結(jié)果后,搜索引擎就會將搜索結(jié)果展示在用戶閱覽的界面上以供用戶使用。
在這里,大家可以思考兩個個問題。
?大家在搜索界面中經(jīng)常發(fā)現(xiàn)百度展示的摘要是用戶搜索詞周圍的,如果我不僅僅只看第一頁,多往后翻一些頁,會看到有些結(jié)果由于其目標(biāo)頁面本身并未完全包含搜索詞,而在百度提取的摘要中標(biāo)紅詞僅是部分搜索詞,那么我們可以這樣理解,百度在搜索詞不被完全包含的情況下,是不是應(yīng)該優(yōu)先展現(xiàn)在分詞結(jié)果中被百度認(rèn)為較為重要的詞呢?那么從這些搜索結(jié)果中我們是不是就可以看出百度分詞算法的部分端倪呢?
②有時候頁面中會多次出現(xiàn)搜索詞,而百度搜索結(jié)果頁面中在網(wǎng)站摘要部分僅會顯示部分,通常這么部分是連續(xù)的,那我們是不是可以理解在摘要部分,百度會優(yōu)先展示頁面中它認(rèn)為與對此搜索詞最重要的部分呢?那么由此我們是不是可以揣度出百度針對頁面除噪后對不同部分賦予權(quán)重的算法呢?
這兩個問題仁者見仁智者見智,做SEO的朋友們自己去探索與摸索吧,Mr.Zhao不敢在此誤人子弟。
四、現(xiàn)今百度的流程漏洞。
請原諒我用流程漏洞來形容這個模塊,但我不得不說,在如今點(diǎn)擊器橫行的天下,我覺得說是漏洞無可厚非。
那就是除了上面三個大環(huán)節(jié)外,百度還構(gòu)建了用戶行為模塊,來影響原始數(shù)據(jù)庫與索引庫。而影響原始數(shù)據(jù)庫的,是百度的快照投訴,主要處理互聯(lián)網(wǎng)暴利的一些行為,這點(diǎn)無可厚非。而影響索引庫的,是用戶的點(diǎn)擊行為,這個設(shè)計本身也無可厚非,但百度算法的不成熟,導(dǎo)致了點(diǎn)擊器作弊猖獗。
百度的用戶行為分析模塊很簡單,除了自身投訴的提交入口外,就是搜集用戶在搜索界面的點(diǎn)擊行為,如果此頁面結(jié)果被大部分用戶閱覽,但沒有產(chǎn)生點(diǎn)擊,用戶居然大部分選擇點(diǎn)擊第二頁甚至更后面的頁面,則此現(xiàn)象就會被百度工程師們所知道,則會根據(jù)這方面來微調(diào)算法。如今百度針對不同行業(yè),其算法早已不同了。
如果前兩頁內(nèi)某個搜索界面被大量用戶選擇點(diǎn)擊,則通常會在24小時候,這個搜索結(jié)果被大幅前提,甚至?xí)惶嵘恋谝幻?/div>
五、搜索引擎大體流程圖(加上用戶行為分析器)
以上就是我所對搜索引擎工作的基礎(chǔ)流程與原理的理解。
最后我想說
廣大的SEO從業(yè)者們應(yīng)該已經(jīng)發(fā)現(xiàn)無論是百度還是谷歌或者其它的商業(yè)搜索引擎,他們都會要求seoer們不要去在意算法、不要去在意搜索引擎,而是去多關(guān)注用戶體驗(yàn)。這里我們可以理解成一個比喻,搜索引擎是買西瓜的人,而SEO們是種西瓜的人,買西瓜的人要求我們這些種西瓜的人不要關(guān)心他們挑選西瓜的標(biāo)準(zhǔn),而是多多在意怎么去種出好西瓜,而對于什么樣的西瓜是他們需要的好西瓜,他們又往往用一些模糊的概念掩蓋過去。誠然,這樣搜索引擎得到的結(jié)果將會多樣化,他們可以在挑選結(jié)果時有更多的選擇,能夠最大限度的維護(hù)這些商業(yè)搜索引擎自身的利益,但是請其也不要忘記,我們這些種西瓜的也要有口飯吃。 本文出自:億恩科技【mszdt.com】 服務(wù)器租用/服務(wù)器托管中國五強(qiáng)!虛擬主機(jī)域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |