基於hadoop搜尋引擎——二級索引檔案
由於倒排表檔案很大。系統難以將其在同一時刻全部裝入記憶體;另外一面,使用者在查詢時只會用到幾個term及其對應的multi_info。為了提高查詢速度,將倒排檔案以hash表的方式儲存在記憶體中,這樣在接受查詢term的請求時,可以快速返回對應的multi_info,因此,本系統將倒排表檔案劃分成若干個字表檔案(每個子表檔案包含一部分term_record),並建立乙個描述term和其所在子表檔案位置的對應關係的索引檔案(索引詞表)。
1.分割倒排索引檔案
為了保證資料分布的均衡性,在分隔倒排表檔案時,精良保證字表檔案的大小相差不多。為了達到這一目標,利用mapreduce程式設計模型具有的2階段性,完成對倒排表檔案的分割。
public class splitfilepartitionerextends partitioner
}
2.生成二級索引檔案
分割後的倒排字表檔案中都互不重複地儲存了倒排檔案的部分資訊。然而,在執行乙個查詢term的命令時,系統並不知道"term_record"儲存在哪個字表中。因此,需要建立乙個索引檔案,該檔案儲存每個term與其所在字表(包括在字表中位置)的對映關係,具體格式定義如下:
(1)索引檔案(index_file)由若干詞及其索引資訊組成。每個詞及其索引資訊是由乙個索引詞(term)和該詞的索引資訊(index_info)組成的,其中term和index_info之間用空格隔開。索引詞記錄按照順序最佳的方式存放,之間用製表符分隔,表示格式如下:
term+'\t'+index_info+'\n';
(2)每個詞的索引資訊(index_info)由子表編號(table_id),這條索引記錄相在該子表中德偏移量(offset)組成,其間用空格隔開。表示如下:
index_info=table_id+空格+offset
**如下:
@override
protected void map(longwritable key, text value, context context)
throws ioexception, interruptedexception
}public static class tokenindexreducer extends
reducerelse}}
}在經過過濾原始檔資料,建立倒排表檔案,生成二級索引檔案等一系列工作之後,整個系統的核心離線工作部分就全部完成了。此後,每當從前台接收到乙個term查詢時,本系統首先從索引檔案(index_file)中找出這個term儲存在什麼子表的位置(index_info);然後開啟對應的子表檔案並定位相應的位置,讀出這個term及其對應的multi_info;最後分析multi_info中每個single_info的資訊,從過濾後的原始檔(flitered_source_file)中找出相應的帖子資訊返回即可。
具體實現**可以檢視:
離線處理程式:
1.劉鵬,hadoop實戰,電子工業出版社,2011.9
基於Flask的搜尋引擎
由於需要課設,所以臨時做了乙個搜尋引擎的小demo,很簡陋的乙個程式。原理呼叫其他搜尋引擎的api 完成索引,網頁爬去,跳轉。flask 爬蟲 即可 索引模組 from flask import flask from flask import render template from flask i...
es搜尋引擎 Flask搭建ES搜尋引擎 二
現在正式進入主題 開始使用 flask 搭建 es 搜尋。配置檔案 config.py coding utf 8 import os db username root db password none 如果沒有密碼的話 db host 127.0.0.1 db port 3306 db name f...
搜尋引擎 索引
正排索引 文件編號,單詞編號,單詞的數量,單詞出現的位置。倒排索引 1,單詞詞典,儲存單詞以及統計資訊,單詞在記錄表中的便宜,可常駐記憶體,用雜湊表儲存。2,記錄表,單詞對應的文件集合,記錄單詞出現的數目 位置。文件採用差分變長編碼。其中文件可按編號公升序排列 可利用差分編碼 也可按出現次數排列,可...