搜索引擎之旅系列往期文章:
前面的文章只是介紹了一些搜索引擎相關的概念,本文就介紹一下搜索引擎的完整工作流程。搜索頁面的輸入框是用戶和搜索引擎進行交互的接口,其實這個搜索框僅僅是搜索引擎的冰山一角,可以思考一下幾個問題:
- 搜索引擎返回的數據怎麼來的?
- 搜索引擎如何準確地返回用戶想要檢索的信息?
- 搜索引擎如何能在極短的時間內返回信息?
- 搜索引擎返回的信息是如何排序的?
如果弄清楚了上面的幾個問題,就對搜索引擎的工作原理有了簡單的認識,本文將從以上幾個問題出發介紹搜索引擎。
1 搜索引擎整體工作流程
搜索引擎本身包含網頁抓取、網頁評價、反作弊、建庫、倒排索引、索引壓縮、在線檢索、ranking排序策略等等流程,下圖是用戶訪問谷歌瀏覽器後其後臺的工作流程:
下圖是更加詳細的搜索引擎工作流程:
本文只是簡單地梳理一下搜索引擎的各個流程,每個模塊的詳細流程後面我會結合開源的一些文檔具體總結。
這裏先簡單地以網頁爬蟲爲引,簡單說明一下:搜索引擎的各個模塊都有非常多的問題需要解決。
2 搜索引擎基礎:網頁抓取
這是搜索引擎的第一步,畢竟搜索是建立在數據的基礎之上的~,在之前我也寫過一篇博客介紹使用Scrapy框架爬取網站數據,有興趣的可以移步瞭解一下。網頁抓取需要用到Spider,之所以稱之爲Spider是因爲在抓取網頁的過程中,Spider需要從當前爬取的網頁中提取到子鏈(該網站中指向的其他網頁的鏈接)。
名詞解釋:
作弊網站是指在網頁設計中,爲了提升網頁在搜索引擎中的排序,設計者採用的一系列欺騙搜索引擎的做法,主要表現是普通用戶看到的頁面與搜索引擎抓取到的內容不一致。
robots.txt是網站放在服務器根目錄下的一份文檔,可以將其理解爲網站和爬蟲之間的一份協議,該文件會指出本網站允許哪些爬蟲爬取哪些目錄下的網頁。
對於爬蟲而言至少有如下問題需要解決:
- 由於互聯網太大了,爬蟲是很難抓取到所有的網頁的
- 網頁中存在垃圾網頁和作弊網頁,如何準確識別這些網頁,避免其污染數據影響搜索結果
- 應該如何指定爬取的優先級呢?
- 應該側重於深度爬取(從當前頁面一直往下爬)還是廣度爬取(先爬取先發現的網頁)呢?
- 如何去重(相同url,內容高度相似)呢?
- 如何增量更新呢?
- 網頁的內容可能會發生改變,如何確保數據庫中已經爬取的網頁是最新的呢?
- 整個爬蟲框架應該如何設計呢?
- 如何讓整個爬蟲框架更高效?
- 如何合理的估計爬蟲負載?
- 如何網站禁止爬蟲爬取怎麼辦?
我會認真學習部分爬蟲框架,並在之後的文章中仔細地分析。
書籍推薦
《這就是搜索引擎-核心技術詳解》
References
1. https://blog.csdn.net/u013527419/article/details/76851809