设为首页 收藏本站
查看: 1345|回复: 0

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

[复制链接]

尚未签到

发表于 2016-1-4 14:06:08 | 显示全部楼层 |阅读模式
  
  
  开源搜索引擎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是个强人,做了很多开源项目,包括QDBM、Tokyo Cabinet、Diqt、RBBS 等,最近据说Tokyo Cabinet风头很劲。
  
  

  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-160097-1-1.html 上篇帖子: hyper-v驱动 下篇帖子: Hyper-V, ICS, RRAS NAT and port-forwarding on Windows Server 2012
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表