`

[同事原创] 开源搜索引擎Hyper Estraier性能小测&缺点总结

 
阅读更多

开源搜索引擎Hyper Estraier性能小测&缺点总结
作者:chin


Hyper Estraier是一个由日本人用C写的搜索引擎,底层存储采用了作者另外一个 开源项目QDBM。
在功能特性上,Hyper Estraier是比较接近iSearch (alibaba内部平台搜索产品) 的,支持Attribue Search,N- gram,P2P(不是下片的P2P啊,就是可以有很多节点,节点之间可以通信),甚至 支持正则。。。BT的说。

六月份的时候我用Larbin抓取了数百万网页,build了索引,做了一下性能测试, 测试数据简单总结如下:
一、html页面数共74,329M,约74G
[chin@lily ~]$ tail -n 3 nohup.out
96 save/d00330
106 save/d00814
74329 save/

二、build完之后,索引文件约19G,加上其他数据一共约26G
1096 ./_attr
19044 ./_idx
5727 ./_text
2 ./_kwd

三、build非常耗时,这点数据量,估计花了72小时才build完,我没准确计时,但 感觉脚本运行了三天才跑完,服务器load average 2左右,不build索引的时候 load average在0.05左右,我用的是这个shell:

for ((DIR=001;DIR<1000;DIR++))
do
echo "Now gathering html in d00"$DIR
rm tmp_index -rf
find "/usr/local/larbin/save/d00"$DIR -type f | estcmd gather -fh -cl tmp_index - > /dev/null
estcmd merge chn_html tmp_index > /dev/null
done

红色部分是关键,不知道“find命令查找html文件”是不是瓶颈,用he索引php和 mysql的html手册还是挺快的。

四、查询速度是亚秒级的,似乎有缓存,排序慢,计算相似度(similar page)很 慢,猜测是build索引的时候干的活儿少,所以查询的时候很多东西要临时计算
[chin@lily he]$ estcmd search -max 1 chn_html "yahoo ncp"
--------[38B113D56972756D]--------
VERSION 1.0
NODE local
HIT 6
HINT#1 yahoo ncp 6
TIME 0.663100
DOCNUM 2514538
WORDNUM 17904280
VIEW ID
本次搜索关键词是“yahoo ncp”,在251万个文档中命中6个,耗时663毫秒

[chin@lily he]$ estcmd search -max 1 chn_html "yahoo"
--------[6C8156340E89C849]--------
VERSION 1.0
NODE local
HIT 59707
HINT#1 yahoo 59707
TIME 0.051943
DOCNUM 2514538
WORDNUM 17904280
VIEW ID
[chin@lily he]$ estcmd search -max 1 chn_html "ncp"
--------[5B1ED19D1C5AB56C]--------
VERSION 1.0
NODE local
HIT 1362
HINT#1 ncp 1362
TIME 0.003320
DOCNUM 2514538
WORDNUM 17904280
VIEW ID

第二次搜yahoo或ncp就快很多了,因此我猜是有缓存的

HE的缺点:
1.没有像样的社区。
作者很猛很持久,搞了一系列开源项目,但似乎没有人跟他一起开发。有人贡献其 他语言的API,比如PHP的api就是。

2.文档简单但不详尽。
看得出来,这个日本哥们的英文也不咋地,对我们这种非英语母语的人来说是个好 事,文档很容易阅读,不过实施的时候有写细节需要连猜带蒙。文档里甚至有些错误。

3.某些功能特性缺失,比如stop word,同根词,group by(看http: //fuwu.cn.yahoo.com,随便搜个关键词,它会告诉你各个分类下有多少满足条件 的结果)。也没有分词,不过分词可以独立出来,也容易改他的源代码重编译。

4.代码结构一般。
C代码,流程控制比较扁平(充斥大量if,else),感觉没什么封装,也谈不上什么 设计模式。坏处是代码复用不够,会有些冗余,给hack带来一些困难。好处是比较 容易看明白,无需借助SourceInsight之类的东东。

另外,我在这里搭了个PHP,MySQL手册的搜索:http://www.example.com.cn/ 可以去体验一下。


XRL的回复:
根据我阅读部分代码的结果,并不推荐大家用它做实际开发
小改一下还行,但是其结构实在太.....适于一两个高手埋头猛搞,不适合拿到一个公司、团队做为项目进行


YYQ的补充:
如果是采用在内存中构建“搜索词 文档ID列表”,然后把用户输入的词分开去一一对应,最后再根据文档ID(也可能是偏移量)去大的索引文件里面去查找,性能应该比这个至少快1个数量级(而且是不用任何缓存机制的前提下)。
不知道Hyper Estraier是怎么实现的,但是从结果上来看性能不好。


原文地址:http://chin.bokee.com/6784704.html

相关说明:
官方网站:http://hyperestraier.sourceforge.net
中文教程:http://www.162cm.com/archives/tag/hyperestraier

PS:
Hyper Estraier 的作者Mikio Hirabayashi是个强人,做了很多开源项目,包括QDBMTokyo CabinetDiqtRBBS 等,最近据说Tokyo Cabinet风头很劲


分享到:
评论

相关推荐

    社区全文检索引擎 Hyper Estraier 1.4.13

    1.Hyper Estraier是一个用C语言开发的全文检索引擎,他是由一位日本人开发的.工程注册在sourceforge.net(http://hyperestraier.sourceforge.net). 2.Hyper的特性: 高速度,高稳定性,高可扩展性…(这可都是有原因的,...

    社区全文检索引擎 Hyper Estraier 1.4.13.rar

    1.Hyper Estraier是一个用C语言开发的全文检索引擎,他是由一位曰本人开发的.工程注册在sourceforge.net(http://hyperestraier.sourceforge.net). 2.Hyper的特性: 高速度,高稳定性,高可扩展性…(这可都是有原因的,...

    Hyper Estraier检索引擎源代码

    Hyper Estraier是一款开源的全文检索引擎,专为高速、高效和大规模的数据索引而设计。这个源代码包包含了实现这一技术的全部细节,对于学习和理解搜索引擎的内部工作原理非常有帮助。以下是对Hyper Estraier检索引擎...

    Hyper Estraier 1.4 检索引擎源代码

    内容索引:VC/C++源码,其它分类,HyperEstraier,全文检索 Hyper Estraier是一套基于C的全文检索引擎,这是它的C源代码,很散、很综合,需要有一定基础的人阅读,还牵扯到部分JAVA源码以及RUBY的相关代码,本程序曾是...

    基于estraier的搜索引擎实现

    estraier是一个开源的、基于C++开发的全文搜索引擎,其设计目标是提供快速的全文索引和检索能力。它的主要特点包括: 1. **内存管理优化**:estraier使用内存映射文件(Memory-Mapped File)技术,将索引存储在磁盘...

    Estraier-开源

    **Estraier 开源全文搜索引擎** Estraier是一款强大的开源全文搜索引擎,专为个人和小型组织设计,适用于网站、本地文件系统以及邮箱等场景。它提供了高效、灵活且可扩展的搜索功能,使得用户能够快速查找和定位所...

    Remora Project-开源

    首先,Remora利用了Hyper Estraier,这是一个开源全文搜索引擎。Hyper Estraier以其高效、快速和轻量级的特性而闻名,特别适合资源有限的移动设备。它能够快速索引和检索大量文本数据,支持多种文件格式,并且在内存...

Global site tag (gtag.js) - Google Analytics