得到所有信息,也入库了,
下面就开始完善搜索功能,
先期工作:
抓取页面,存入数据库or文件系统,本文讨论的是数据库,数据库格式为:<id,url,content>
一: 页面的清理
主要是去除htmltag和 js、css等
二: 将页面分块,以直观如换行,或者空格,分块进行分词,可以得到 如:
百/m 度/q 一下/m ,/w 你/r 就/d 知道/v 登录/vn 新闻/n 网页/n 贴/v 吧/y 知道/v MP3/nx 图片/n 视频/n 地>
图/n 设置/v 高级/a 空间/n 百/m 科/n hao123|/nx 更/d 多/a 把/p 百/m 度/q 设/v 为/p 主页/n 加入/v 百/m 度/q 推广
/v |/nx 搜索/vn 风云/n 榜/n |/nx 关于/p 百/m 度/q |AboutBaidu©/nx 2010Baidu/nx 使用/v 百/m 度/q 前/f 必读/v 京/j ICP/nx 证/n 030173/m 号/q
我用的是中科的那个开源的分词,词典比较老,先凑活用吧
(现实情况应该是文本比较大,可以分块写入文本)
三: 将上述分词结果整理,对每个分词做签名,生成32位or64位int,并记录文档id(就是这网页在文件系统或者在数据库中的id号,总之能找到这网页全文的索引),生成一个结构化数组 < sign, docid , freq >,生成完毕,按照sign排序,合并,将合并次数写入freq,写入临时文本,继续对所有文档操作
四:整理临时文档,排序并合并sign,将sign相同的整理到一起,生成如下格式:
xxxxxx,1,2
xxxxxx,2,1
是按照sign有序的,便于二分查找,将整理好的文件保存,此为2级索引
五:1级索引是对2级索引的索引,格式如下:sign,2级索引文件偏移值,是所有sign的索引
六:0级索引对1级索引进行索引,保存sign的起始值区间,和在1及索引的偏移值
如果数据量不大的话,以32位机器为例,一个int是4个字节,如果有1000个关键词要做签名,那么就是 4*1000,只有不到4k的空间,那么,以普通pc为例,至少要1g,拿出100m给索引常驻内存,就可以满足 100 * 1000 / 4 = 25,000 个词的容量,现实情况,我们的词典没有那么大,所以,只需要维持到2级索引就行。
自己理解,不足请指教。