几个开源的搜索引擎

lucene是java写的,以lucene为基础,有更多熟知的开源产品:zoie+sensei、solr、katta、elasticsearch、solandra等。
zoie用于实时索引,zoie+sensei实现了分布式索引。
solr、elasticsearch类似,都实现了分布式索引、近实时索引等
solandra基于solr和nosql数据库cassandra的分布式搜索引擎,底层上重写了solr索引的存储,把索引数据保存到cassandra。

sphinx是c++写的,有极高的写索引效率,很好的和mysql集成,比如编译mysql的时候可以作为一个模块,这样在用sql中用like的地方 就可以直接替换成sphinx语法了,真爽。

ps:理解lucene的原理后,重写一个lucene并不难,难的是如何复制一个lucene活跃的社区。
---------------------------------------------------------------------------------------

Sphinx是一个俄国人开发的搜索引擎,

Sphinx建索引速度是最快的,比Lucene快9倍以上。因此,Sphinx非常适合做准实时搜索引擎。
它的主要特点是:


一、性能非常出色
150万条记录一两分钟就索引完毕,2-4GB以内的文本检索速度不到0.1秒钟。ferret也望尘莫及,更不要说lucene了。

二、和数据库集成性很好
Sphinx通过配置文件可以自行读取数据库信息做索引,不依赖任何外部的应用程序,并且可以作为一个daemon进程启动,支持分布式检索,并发响应性能很好。因此很多过去使用ferret的人因为并发检索的问题都改用Sphinx了。

三、可以做MySQL的全文检索
MySQL的数据库引擎是可插拔的结构,Sphinx开发了一个SphinxSE数据库引擎,可以在编译MySQL的时候直接编译到MySQL里面去,这样的话,可以在数据库级别支持高性能的全文检索,那么你可以以如下SQL方式去全文检索了:

select * from xxxx where query='test;sort=attr_asc:group_id' AND ....;

很棒吧。


四、RoR支持也很棒
有一个acts_as_sphinx插件,类似acts_as_ferret,集成到RoR里面很简单。

Sphinx支持UTF-8编码的分词,但是他自己的文档上面说仅仅支持英文和俄文的分词,现在也有插件支持中文的了。

他和Lucene 的比较:

Lucene作为一个全文检索引擎,其具有如下突出的优点:
  (1)索引文件格式独立于应用平台。Lucene定义了一套以8位字节为基础的索引文件格式,使得兼容系统或者不同平台的应用能够共享建立的索引文件。
  (2)在传统全文检索引擎的倒排索引的基础上,实现了分块索引,能够针对新的文件建立小文件索引,提升索引速度。然后通过与原有索引的合并,达到优化的目的。
  (3)优秀的面向对象的系统架构,使得对于Lucene扩展的学习难度降低,方便扩充新功能。
  (4)设计了独立于语言和文件格式的文本分析接口,索引器通过接受Token流完成索引文件的创立,用户扩展新的语言和文件格式,只需要实现文本分析的接口。
  (5)已经默认实现了一套强大的查询引擎,用户无需自己编写代码即使系统可获得强大的查询能力,Lucene的查询实现中默认实现了布尔操作、模糊查询、分组查询等等。

MG4J 是另一个搜索engine 。与Lucene 主要区别是,它提供了cluster 功能,具有更OO的设计方式。
  MG4J可以让你为大量的文档集合构建一个被压缩的全文本索引,通过使内插编码技术。


Sphinx支持高速建立索引(可达10MB/秒,而Lucene建立索引的速度是1.8MB/秒)
高性能搜索(在2-4 GB的文本上搜索,平均0.1秒内获得结果)
高扩展性(实测最高可对100GB的文本建立索引,单一索引可包含1亿条记录)
支持分布式检索
支持基于短语和基于统计的复合结果排序机制
支持任意数量的文件字段(数值属性或全文检索属性)
支持不同的搜索模式(“完全匹配”,“短语匹配”和“任一匹配”)
支持作为Mysql的存储引擎

猜你喜欢

转载自qindongliang.iteye.com/blog/2017252