索引 倒排

得到所有信息,也入库了,

下面就开始完善搜索功能,

 

先期工作:

抓取页面,存入数据库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&copy;/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级索引就行。

 

自己理解,不足请指教。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值