海納企業網站管理系統 HituxCMS 官方網站 www.HituxCMS.com
聯系我們

開發商: 海納網絡工作室

官方網店: Hitux.Taobao.com

網址: http://www.HituxCMS.com

郵件: admin@hitux.com

你的位置: 首頁 > 建站知識 > 網站運營

搜索引擎的工作原理淺析

2017年7月28日     字體大小: T   T


  有人說,搜索引擎技術似乎不需要本地化,這一看就是徹底不懂這個領域的人講的。當然,實話說,如果有人說,google在中文本地化方面做得非常好,我是可以部分同意的,同意的比例可能會比google工程師少一些。但我相信google工程師也會告訴你,搜索引擎是需要本地化的。

  今天寫篇科普文,講講搜索引擎的技術機理和市場競爭的一些特點。當然,作爲從事或有興趣從事流量運營的朋友,是可以用另一個角度去理解本文。

  搜索引擎的核心技術架構,大體包括以下三塊:第一,是蜘蛛/爬蟲技術;第二,是索引技術;第三是查詢展現的技術; 當然,我不是搜索引擎的架構師,我只能用比較粗淺的方式來做一個結構的切分。

搜索引擎工作原理淺析(圖)

  1、 蜘蛛,也叫爬蟲,是將互聯網的信息,抓取並存儲的一種技術實現。

  搜索引擎的信息收錄,很多不明所以的人會有很多誤解,以爲是付費收錄,或者有什麽其他特殊的提交技巧,其實並不是,搜索引擎通過互聯網一些公開知名的網站,抓取內容,並分析其中的鏈接,然後有選擇的抓取鏈接裏的內容,然後再分析其中的鏈接,以此類推,通過有限的入口,基于彼此鏈接,形成強大的信息抓取能力。

  有些搜索引擎本身也有鏈接提交入口,但基本上,不是主要的收錄入口,不過作爲創業者,建議了解一下相關信息,百度,google都有站長平台和管理後台,這裏很多內容是需要非常非常認真的對待的。

  反過來說,在這樣的原理下,一個網站,只有被其他網站所鏈接,才有機會被搜索引擎抓取。如果這個網站沒有外部鏈接,或者外部鏈接在搜索引擎中被認爲是垃圾或無效鏈接,那麽搜索引擎可能就不抓取他的頁面。

  分析和判斷搜索引擎是否抓取了你的頁面,或者什麽時候抓取你的頁面,只能通過服務器上的訪問日志來查詢,如果是cdn就比較麻煩。 而基于網站嵌入代碼的方式,不論是cnzz,百度統計,還是google analytics,都無法獲得蜘蛛抓取的信息,因爲這些信息不會觸發這些代碼的執行。

  一個比較推薦的日志分析軟件是awstats。

  在十多年前,分析百度蜘蛛抓取軌迹和更新策略,是很多草根站長每日必做的功課,比如現在身價幾十億的知名80後上市公司董事長,當年在某站長論壇就是以此准確的分析判斷而封神,很年輕的時候就已經是站長圈的一代偶像。

  但關于蜘蛛的話題,並不只基于鏈接抓取這麽簡單,延伸來說

  第一,網站擁有者可以選擇是否允許蜘蛛抓取,有一個robots.txt的文件是來控制這個的。

  你會看到,淘寶至今仍有關鍵目錄不對百度蜘蛛開放,但對google開放。

  你看出什麽了?你可能什麽都沒看出來,我提醒一句,百度實質上全面禁止了360的蜘蛛抓取。

  但這個協議只是約定俗成,實際上並沒有強制約束力,所以,你們猜猜,360遵守了百度的蜘蛛抓取禁止麽?

  第二,最早抓取是基于網站彼此的鏈接爲入口,但實際上,並不能肯定的說,有可能存在其他抓取入口,比如說,

  客戶端插件或浏覽器, 免費網站統計系統的嵌入式代碼。

  會不會成爲蜘蛛抓取的入口,我只能說,有這個可能。

  所以我跟很多創業者說,中國做網站,放百度統計,海外做網站,放google analytics,是否會增加搜索引擎對你網站的收錄?我只能說猜測,有這個可能。

  第三,無法被抓取的信息

  有些網站的內容鏈接,用一些javascript特殊效果完成,比如浮動的菜單等等,這種連接,有可能搜索引擎的蜘蛛程序不識別,當然,我只是說有可能,現在搜索引擎比以前聰明,十多年前很多特效鏈接是不識別的,現在會好一些。

  需要登錄,需要注冊才能訪問的頁面,蜘蛛是無法進入的,也就是無法收錄。

  有些網站會給搜索特殊頁面,就是蜘蛛來能看到內容(蜘蛛訪問會有特殊的客戶端標記,服務端識別和處理並不複雜),人來了要登錄才能看,但這樣做其實是違反了收錄協議(需要人和蜘蛛看到的同樣的內容,這是絕大部分搜索引擎的收錄協議),有可能遭到搜索引擎處罰。

  所以一個社區要想通過搜索引擎帶來免費用戶,必須讓訪客能看到內容,哪怕是部分內容。

  帶很多複雜參數的內容鏈接url,有可能被蜘蛛當作重複頁面,拒絕收錄。

  很多動態頁面是一個腳本程序帶參數體現的,但蜘蛛發現同一個腳本有大量參數的網頁,有時候會給該網頁的價值評估帶來困擾,蜘蛛可能會認爲這個網頁是重複頁面,而拒絕收錄。還是那句話,隨著技術的發展,蜘蛛對動態腳本的參數識別度有了很大進步,現在基本上可以不用考慮這個問題。

  但這個催生了一個技術,叫做僞靜態化,通過對web服務端做配置,讓用戶訪問的頁面,url格式看上去是一個靜態頁,其實後面是一個正則匹配,實際執行的是一個動態腳本。

  很多社區論壇爲了追求免費搜索來路,做了僞靜態化處理,在十多年前,幾乎是草根站長必備技能之一。

  爬蟲技術暫時說到這裏,但是這裏強調一下,有外鏈,不代表搜索蜘蛛會來爬取,搜索蜘蛛爬取了,不代表搜索引擎會收錄;搜索引擎收錄了,不代表用戶可以搜索的到;

  site語法是檢查一個網站收錄數的最基本搜索語法,我開始以爲是abc的常識,直到在新加坡做一些創業培訓後交流才發現,大部分剛進入這個行業的人,或者有興趣進入這個行業的人,對此並不了解。

  一個範例,百度搜索一下 site:4399.com

  2、索引系統

  蜘蛛抓取的是網頁的內容,那麽要想讓用戶快速的通過關鍵詞搜索到這個網頁,就必須對網頁做關鍵詞的索引,從而提升查詢效率,簡單說就是,把網頁的每個關鍵詞提取出來,並針對這些關鍵詞在網頁中的出現頻率,位置,特殊標記等諸多因素,給予不同的權值標定,然後,存儲到索引庫中。

  那麽問題來了,什麽是關鍵詞。

  英文來說,比如 this is a book,中文,這是一本書。

  英文很自然是四個單詞,空格是天然的分詞符,中文呢?你不能把一句話當作關鍵詞吧(如果把一句話當作關鍵詞,那麽你搜索其中部分信息的時候,是無法索引命中的,比如搜索一本書,就搜索不出來了,而這顯然是不符合搜索引擎訴求的)。所以要分詞。

  最開始,最簡單的思路是,每個字都切開,這個以前叫字索引,每個字建立索引,並標注位置,如果用戶搜索一個關鍵詞,也是把關鍵詞拆成字來搜索再組合結果,但這樣問題就來了。

  比如搜索關鍵詞 “海鮮”的時候,會出現結果,上海鮮花,這顯然不是應該的搜索結果。

  比如搜索關鍵詞 “和服”的時候,會出現結果,交換機和服務器。

  這些都是蠻荒期的google也不能幸免的問題。

  到後來有個梗,別笑,這些都是血淚梗,半夜電話過來,說網監通過搜索發現你社區有淫穢內容要求必須刪除,否則就關閉你的網站,夜半驚醒認真排查,百思不得其解,苦苦哀求提供信息線索,最後發現,有人發了一條小廣告,“求購二十四口交換機” 。 還有,涉嫌政治敏感,查到最後 “提供三台獨立服務器”, 看出其中敏感詞了沒?你說冤不冤。 這兩個故事可能並不是真的,因爲都是網上看到的,但是我想說,類似這樣的事情真的有,並非都是空穴來風。

  所以,分詞,是亞洲很多語言需要額外處理的事情,而西方語言不存在的問題。

  但分詞不是說說那麽簡單,比如幾點,1:如何識別人名?2、互聯網新詞如何識別?比如 “不明覺厲”。3、中英混排的坑,比如QQ表情。

  做一個分詞系統,說到底也不難,但是要做一個自動學習,與時俱進,又能高效率靈活的分詞引擎,還是很有技術難度的。 當然,這方面我不是專家,不敢妄言了。

  現在機器學習技術發達了,特別是google在深度學習領域擁有領先優勢,以前很多通過人工做標定,做分類的工作可以交給算法完成,從某種意義來說,本地化的工作可以讓機器學習去完成;未來,也許深度學習技術可以自己學習掌握本地化的技巧。 但我想說兩點,第一,從搜索引擎發展曆史看,在深度學習技術還沒成熟的情況下,本地化的工作是非常重要的,也是很重要的決定競爭成敗的要素;第二,即便現在深度學習已經很強大,基于當地語言的人工參與,標定,測試,反饋,一些本地化的工作依然對深度學習的效率和效果擁有不可替代的作用。

  索引系統除了分詞之外,還有一些要點,比如實時索引,因爲一次索引庫的更新是個大動靜,一般網站運營者知道,自己網站內容更新後,需要等索引庫下一次更新才能看到效果,而且索引庫針對不同權重的網站內容,更新的頻次也不太一樣。 但諸如一些高優先的資訊網站,以及新聞搜索,索引庫是可以做到近似實時索引的,所以我們在新聞搜索裏,幾分鍾前的信息就已經可以搜索到了。

  我以前經常吐槽一個事情,我在百度空間發表的文章,每次都是google率先索引收錄,當時他們的解釋是,猜測是因爲很多人通過google閱讀器訂閱我的博客,而google閱讀器很可能是google快速索引的入口。(然並卵,百度空間已經沒有了,google閱讀器也沒有了。)

  索引系統的權值體系,是所有SEOER們最關心的問題,他們經常通過不同方式組合策略,觀察搜索引擎的收錄,排名,來路情況,然後通過對比分析整理出相關的策略,這玩意說出來可以開很長一篇了,但今天就不提了。

  但我說一個事實,很多外面的公司,做SEO的,會誤認爲百度裏面的人熟悉這裏的門道和規律,很多人高價去挖百度的搜索産品經理和技術工程師去做SEO,結果,呵呵,呵呵。 而外面那些草根創業者,有些善于此道的,真的比百度的人還清楚,搜索權值的影響關系,和更新頻次等等,比如前面說到的,身價幾十億的那個80後創業者。

  基于結果反推策略,比身在其中卻不識全局的參與者,更能找到系統的關鍵點,有意思不。

  3、查詢展現

  用戶在浏覽器或者在手機客戶端輸入一個關鍵詞,或者幾個關鍵詞,甚至一句話,這個在服務端,應答程序獲取後處理步驟如下

  第一步,會檢查最近時間有沒有人搜索過同樣的關鍵詞,如果存在這樣的緩存,最快的處理是將這塊緩存提供給你,這樣查詢效率最高,對後端負載壓力最低。

  第二步,發現這個輸入查詢最近沒有搜索,或者有其他條件的原因必須更新結果,那麽會將這個用戶輸入的詞,進行分詞,沒錯,如果不止一個關鍵詞,或者是一句話的情況下,應答程序會又一次分詞,將搜索的查詢拆成幾個不同的關鍵詞。

  第三步,將切分後的關鍵詞分發到查詢系統中,查詢系統會去索引庫查詢,索引庫是個龐大的分布式系統,先分析這個關鍵詞屬于哪一塊哪一台服務器,索引是一種有序的數據組合,我們用可以用近似二分法的方式思考,不管數據規模多大,你用二分法去查找一個結果,查詢頻次是log2(N),這個就保證了海量數據下,查詢一個關鍵詞是非常快非常快的。 當然,實際情況會比二分法複雜很多,這樣說比較容易理解而已,再複雜些不是我不告訴大家,是我自己都不是很清楚呢。

  第四步,不同關鍵詞的查詢結果(只是按權值排序的部分頂部結果,絕對不是全部結果),基于權值倒序,會再彙總在一起,然後把共同命中的部分反饋回來,並做最後的權值排序。

  記住,搜索引擎絕對不會返回所有結果,這個開銷誰都受不了,百度也不行,google也不行,翻頁都是有限制的。

  再記住,如果你多個關鍵詞裏有多個不同品類冷門詞,搜索引擎有可能會舍棄其中一個冷門詞,因爲彙總數據很可能不包含共同結果。搜索技術不要神話,這樣的範例偶爾會出現。

  這是三大部分,多說一點,其實還有第四部分。

  用戶點擊行爲采集和反饋部分

  基于用戶的翻頁,點擊分布,對搜索結果的優劣做判定,並對權值做調整,但這個早期搜索引擎是沒有的,後面才有,所以暫時不列爲必備的三大塊。

  此外,一些對搜索優化的機器學習策略,對易混詞識別,同音詞識別等等,相當部分也都基于用戶行爲反饋進行,這是後話,這裏不展開。

  關于第四部分,我以前說過一個詞,點擊提權,我說這個詞價值千金,我猜很多人並沒理解。沒理解就好,要不我要被一些同行罵死了。

  以上是單指搜索引擎的工作原理,和一些技術邏輯,當然,只是入門級的解讀,畢竟再深入就不是我能講解的了。

  但搜索引擎的本地化,並不局限于搜索技術的本地化。

  百度的強大,不只是搜索技術,當然有些人會說百度沒有搜索技術,這種言論我就不爭論了,我不試圖改變任何人的觀點,我只列一些事實而已。

  百度的強大還來自于兩大塊,第一是內容護城河,第二是入口把控。

  前者是百度貼吧,百度mp3,百度知道,百度百科,百度文庫

  後者是hao123和百度聯盟。

  這兩塊都是本地化,google進中國的時候,在這兩塊都有動作

  投資天涯,收購265,以及大力發展google聯盟,這些都是本地化。

  此外,重申一下,百度全家桶的出現以及,百度全家桶和hao123的捆綁,是360崛起之後的事情,hao123從百度收購到360崛起之前,一直風平浪靜的沒做任何推廣和捆綁,從曆史事實而言,請勿將本地化等同于流氓化。