一. 搜索引擎常用結(jié)構(gòu):
就是如下圖所示的三段式結(jié)構(gòu):
1.數(shù)據(jù)收集:通過爬蟲(spider)從互聯(lián)網(wǎng)網(wǎng)頁爬取網(wǎng)頁數(shù)據(jù),存儲到網(wǎng)頁庫;
2.建立索引:分析整理爬蟲收集到的數(shù)據(jù)資源,建立索引,為檢索系統(tǒng)提供數(shù)據(jù);
3.提供檢索服務(wù):從預(yù)處理好的資源里挑選出用戶最滿意的結(jié)果最快最好的展現(xiàn)給用戶;
二. 基于Hadoop MapReduce實現(xiàn)創(chuàng)建索引庫的流程如下:
1. 目的: 建立供檢索使用的索引和摘要
2. 輸入: 網(wǎng)頁
3. 輸出: 索引和摘要
4. 處理: 多輪map-reduce
5. 頁面分析和處理(parser-extractor)
6. 頁面屬性小庫輸出(splitter)
此時產(chǎn)生的是正排索引結(jié)構(gòu),比如:
關(guān)于三亞的旅游網(wǎng)頁url --> 三亞,旅游,陽光,沙灘等索引
7. 小庫正排轉(zhuǎn)倒排(invert-index)
就是將上面的對應(yīng)關(guān)系進行反轉(zhuǎn):
三亞 --> 關(guān)于三亞的旅游網(wǎng)頁url1
旅游 --> 關(guān)于三亞的旅游網(wǎng)頁url1
陽光 --> 關(guān)于三亞的旅游網(wǎng)頁url1
沙灘 --> 關(guān)于三亞的旅游網(wǎng)頁url1
8. 小庫合并成大庫(index merge)
一個索引可以指向多個url網(wǎng)頁,所以需要進行合并操作,而合并操作時就涉及到快速判重的問題.
針對大數(shù)據(jù)量的快速判重這里有一種很好的解決方案就是布隆過濾器(Bloom Filter).
布隆過濾器使用BitMap算法,它由一個很長的二進制向量和一系列隨機映射函數(shù)組成,可以用于檢索一個元素是否在一個集合中.當數(shù)據(jù)量大且密集時,該方法的空間效率和查詢效率都遠超一般的算法.