seamSearch里的一些数据结构算法介绍

今天收到一个在读的大学生的一封邮件,大意是对搜索引擎比较感兴趣,想研究一下我几年前写的seamsearch 的代码。想了解一下用的什么开发环境,数据结构算法用了哪些,等等。我在这里根据回忆列一下:

开发环境:

由于我之前做java比较多,所以用的是eclipse+cdt的方式写的这个软件
操作系统是ubuntu,应该linux系统都能跑
算法数据结构上主要是参考的lucene,但是没有lucene这么复杂。

1.索引文件:

跟lucene差不多,分别有:
*.del 被删除文档信息
*.fdt 文档数据信息
*.tii 项字典
*.pro 项词频数据
*.fdi 字段索引信息
seg.fmn 字段描述信息
segments 段信息
以上这些结构基本跟lucene一个思路,如果想了解可以找lucene想关文档了解一下,这里就不细说了。

2.数据压缩:

也是仿照lucene的Vint,Vlong来压缩数据 ,代码具体在https://github.com/luyongfugx/seamSearch/blob/master/seamSearch/store/IndexOutput.cpp

3.搜索原理

其实就是将搜索文字分词,然后去项字典(.tii)文件查找,查找到后根据位置索引信息到.pro文件里面查找都有哪些文章包含这个
词,然后在根据文章号去fdt,fdi,seg.fmn去读取文档数据。这里面lucene本来用了个跳表(skipList)来存储项字典文字,我这里比较偷懒,直接用了个map来存放,查找的时候直接hash查找。不过这样在字典数量多的时候会多占很多内存。

4.结果排序

lucene里面结果排序的分数算法比较复杂,我这里比较简单,就是各个字典命中的数的总和的排序。
这里的排序用了一个优先级队列来进行多路归并排序。

5.搜索条件

seamSearch只支持and 和 or两种搜索方式,没有lucene那么复杂

seamSearch的github:https://github.com/luyongfugx/seamSearch ,欢迎star.

另外做个广告,我所在的手机腾讯网推了一个专注于移动端的js模块管理框架:https://github.com/mtjs/mt, 特点是: 无更新不下载(字符级别的增量更新) 简单友好的模块定义规范 简单易用的打包管理工具 强大的js增量更新代理服务 感兴趣的朋友可以看看,记得star哈

你可能感兴趣的:(分词,全文搜索)