搜索引擎开发经验

一 查询子系统
1)逻辑表达式
综合的搜索引擎通常支持逻辑与,逻辑或,逻辑非这三种操作.多个查询词的时候要进行逻辑操作,通常空格默认为&,如果在多个查询结果前进行预排序,那么就可以把原来复杂的逻辑操作转为有序集合的合并操作,时间复杂度仅为O(m+n).

2)排序
a)文本排序
文本内容是最重要的依据,而文本内容在词汇的集合,因此排序主要考虑到文本词汇的权重,涉及到的因素有:查询词的邻近关系,命中位置(包括标题,META关键词,还是正文),单篇文档中的命中频率.

b)网页排序
网页与文本的不同,是增加了meta元素和各种链接信息。因此网页的权重由三部分组成。
网页权重= 文本词汇的基本权重 + 链接权重 + 查询用户行为的加权
链接权重(url)主要考虑网页入度(对外链接数),镜像,目录深度。
经典例子是google的pagerank.

3)分布式查询
可以由一个模块向多个节点发出请求,然后对各个节点返回的结果进行合并,排序.这种情况应用在不相交数据集是能降低节点开销,提高节点容错性的.但要保证每一个文档的全部索引项在同一个节点上.

4)检索的IO瓶颈
通过倒排索引得到文档位置去取内容时,或者很大的倒排索引文件,通过二级索引读取索引词对应的倒排数据时,IO都是检索优化的重点.特别使用OS提供的底层文件访问接口read/write效率较好,此外使用内存文件映射等其它机制可以大大提高IO访问的效率.

5)缓存
缓存技术的原理是建在被缓存对象访问中存在的局部性特性上的.
缓存包括查询结果缓存和倒排文件缓存.
因为硬盘IO一次读取通常比内存一次读取慢几十倍甚至百倍;
查询缓存的效率为原来的所需要时间的倍数: =1-p(p为命中率)
查询策略:LRU > LPU > FIFO

二 索引子系统
1)全文索引之倒排索引
倒排文件(inverted file)实质上是描述一个词项集合(terms)元素和一个文档集合(docs)元素对应关系的数据结构.

2)其它索引文件
记录存储: 使用改进后的ISAM文件,以块来标识存储需要的空间,设定每个文件的最大长度,在文件尾标识上当前已经使用了的块数,文件内容用二进制存储,偏移量记录为自己使用的块数(记录长度)+文件已经使用了的块数(记录在文件的偏移位置).这种存储方式便于修改内容变化不是特别大的记录,特别适用于记录没有过分增长.

索引文件: KEY--VALUE,如果是一对一,则使用类似STL中的MAP数据结构;如果是一对多,则使用MULTIMAP数据结构.有时为了快速查询,还用于HASH结构进行存储,以达到查询0(1)的最佳效率.

3)混合索引

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值