http://lutaf.com/158.htmjava
搜索引擎程序这个名称不稳当,严格说来应该叫作索引程序(indexing program),早期主要用来作中文全文搜索,可是随着互联网的深刻普及,各家网站规模愈来愈大,索引程序在 优化网站架构上发挥了更大的做用:替代MySQL数据库内置的索引mysql
Lucene出自名门,子孙兴旺,并且它的兄弟Hadoop风头正盛,因此名气最大,而sphinx由于简单可靠,代码结构优良,性能很是好,在国内大型网站中使用最广.xapian用户太少,不建议使用c++
技术选型要选人最多的方向,不可标新立异程序员
sphinx 平均搜索时间:20ms,如此之快,是由于sphinx的基本上能够算做静态索引。web
client API只能update已经存入的document属性,不能添加新文档。sql
加入新文档只有经过 build/merge的方式,磁盘IO开销很大,从这个角度,sphinx不适合内容更新频繁的网站,不适合作实时索引。但现实状况是国内强UGC的网站基本上都采用sphinx,好比新浪微博,搜狐微博,赶集网,discuz等数据库
这对程序员来讲是巨大的挑战:只能经过创建多级索引,或者采用sphinx+solr的混合方案apache
Lucene 就是一个纯粹的索引程序代码包,使用的时候,你得写一个简单的server程序(接受关键词-经过lucence查询-返回结果),而后配置在应用服务器中(tomcat/Resin),通常来讲,这个server程序会采用http协议,或者xml-rpc,直接用tcp那也太无聊了api
Solr 有大侠急公好义,帮你把上文提到的web 程序写好了,你只须要配置部署就可用,这就是solr,solr对外的接口是http协议,也支持分布式索引tomcat
Elasticsearch,新项目,最近很红,其实也是Lucene的马甲,有以下特色
elasticsearch 从设计思路上是针对 Amazon CloudSearch,它的关键词是
这几点一看就是高富巨,日uv几百万的网站,索引也只有几十G,普通玩家是用不着的
可是从紧跟前沿技术的角度,若是你的索引服务器超过3台,能够尝试部署elasticsearch,性能如今是差点,但硬件和时间会帮你搞定一切