小测Hyper Estraier性能
彭弘方
2023-12-01
Hyper Estraier是一个由日本人用C写的搜索引擎,底层存储采用了作者另外一个 开源项目QDBM。
在功能特性上,Hyper Estraier是比较接近iSearch的,支持Attribue Search,N- gram,P2P(不是下片的P2P啊,就是可以有很多节点,节点之间可以通信),甚至 支持正则。。。BT的说。
想知道详细情况呢,可以造访HE的项目主页:http: //hyperestraier.sourceforge.net/,最早是听南瓜子(杭州口碑, 本搜团队)介绍的,不过不晓得南瓜子同学的blog地址
用larbin抓取了数百万网页,build了索引,做了一下性能测试, 测试数据简单总结如下:
一、html页面数共74,329M,约74G
$ 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索引的时候干的活儿少,所以查询的时候很多东西要临时计算
$ estcmd search -max 1 chn_html "yahoo ncp"
--------[38697275B113D56D]--------
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毫秒
$ estcmd search -max 1 chn_html "yahoo"
--------[60E89C8C81563449]--------
VERSION 1.0
NODE local
HIT 59707
HINT#1 yahoo 59707
TIME 0.051943
DOCNUM 2514538
WORDNUM 17904280
VIEW ID
$ estcmd search -max 1 chn_html "ncp"
--------[C5B1ED19D15AB56C]--------
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之类的东东。