做者:LogMweb
本文原載於 https://segmentfault.com/u/logm/articles,不容許轉載~segmentfault
本文是《這就是搜索引擎》的讀書筆記服務器
1. 概述
1.2 搜索引擎技術發展史
- 第一代:文本檢索。關鍵詞與網頁內容的相關程度。
- 第二代:連接分析。PageRank。
- 第三代:用戶中心。理解用戶需求。
2. 爬蟲
2.1 通用爬蟲框架
2.3 爬蟲質量的評價標準
- 抓取網頁覆蓋率、抓取網頁時新性、抓取網頁重要性
- 爲了同時知足上述3個標準,google用了多套不一樣的爬蟲,一些關注時新性,一些關注覆蓋率。
2.4 抓取策略
- 寬度優先遍歷:暴力但有效
- 非徹底PageRank:由於PageRank須要拿到全部的頁面計算纔是準確的,爬蟲抓取的時候沒有看到全部頁面,因此叫"非徹底"
- OPIC:改進PageRank,實時計算
- 大站優先
2.5 更新策略
- 歷史參考策略:歷史上變更比較快的,抓取頻繁一點,通常用泊松過程建模
- 用戶體驗策略:保存網頁的多個歷史版本,查看不一樣歷史版本對用戶點擊的影響。因此用戶點擊不到的頁面,即便更新快,也不用抓取。
- 聚類抽樣策略:更新快的頁面有一些相似的特徵
2.6 暗網抓取
2.7 分佈式爬蟲
3. 索引
3.1 倒排索引的結構
3.4 創建索引
- 兩遍文檔遍歷法:徹底在內存中構建
- 排序法:內存滿時,對中間文件排序後存到磁盤,最後再合併全部的中間文件。整個過程,整個字典都在內存裏,字典有可能過大。
- 歸併法:每一箇中間文件都是一套倒排索引(含各自的字典),最後再把全部的倒排索引合併。
3.6 動態索引與索引更新
- 徹底重建策略:臨時索引與老索引的文檔所有取出從新建索引,重建的代價高,但主流搜索引擎都採用該方式
- 再合併策略:臨時索引與老索引進行索引合併(不是文檔取出從新建索引,而是合併)
- 原地更新策略:再合併策略的升級,臨時索引追加到老索引
3.7 查詢
- 一次一文檔:每一個文檔對query中全部詞計算類似度
- 一次一單詞:對query中每一個詞計算文檔類似度,每一個文檔累加每一個query詞的類似度
- 跳躍指針:由於倒排索引通常是壓縮保存的,跳躍指針幫助快速定位須要的文檔
3.8 多字段索引
有時候須要區分不一樣的字段來索引,好比"標題"、"正文"、"摘要"等字段。
- 多索引方式:爲每一個字段都創建一份倒排索引
- 倒排列表方式:在每一個倒排列表的後面追加一個字段,表示該關鍵詞是在哪一個字段出現
- 擴展列表方式:用擴展列表標明每一個字段的開始和結尾位置,結合倒排列表中關鍵詞的位置,能夠知道關鍵詞在哪一個字段。實際使用經常使用這個方法
3.9 短語查詢
- 位置信息索引:利用倒排列表中關鍵詞的位置信息判斷是否組成短語
- 雙詞索引:"首詞"的倒排索引中有指向"下詞"的指針,"下詞"又有指針指向倒排列表
- 短語索引:會致使字典急劇膨脹,通常只用於熱門短語
3.10 分佈式索引
索引體積大,一臺服務器存不下
- 按文檔劃分:按文檔對索引文件進行切分。擴展性、容錯性、對查詢方式的支持都較好
- 按單詞劃分:按單詞字典對索引文件進行切分
4. 索引壓縮
5. 檢索與排序
把與用戶搜索詞最相關的結果排在前面
- 布爾模型
- 向量空間模型:TF-IDF + cosine距離
- 機率檢索模型:BM25
- 語言模型:從文檔生成用戶搜索的機率多大
- 機器學習排序
- 評價標準:準召、P@十、MAP
6. 連接分析
6.2 重要的概念模型
- 隨機遊走模型:模擬用戶的瀏覽行爲,PageRank
- 子集傳播模型:從一個特殊子集出發,將權重傳遞到其餘網頁,HINTS
7. 雲計算與雲存儲
8. 網頁反做弊
8.1 內容做弊
- 關鍵詞堆砌、熱門關鍵詞、標題做弊、meta信息做弊……
- 內容農場:僱人寫垃圾文章,比機器做弊更難被斷定
8.2 連接做弊
8.3 頁面隱藏做弊
- IP Cloaking、User Agent Cloacking、頁面重定向、頁面隱藏……
8.4 web2.0 做弊
- 博客做弊、點評做弊、Tag做弊、我的Profile做弊……
8.5 反做弊的通用思路
- 子集傳播模型:信任傳播模型(如TrustRank)、不信任傳播模型(如BadRank)
- 異常發現模型(如SpamRank)
9. 查詢意圖分析
10. 網頁去重
11. 搜索引擎的發展趨勢