Sphinx是一个俄国人开发的搜索引擎,
Sphinx建索引速度是最快的,比Lucene快9倍以上。因此,Sphinx非常适合做准实时搜索引擎。
[亿级数据的高并发通用搜索引擎架构设计]http://hi.baidu.com/zhizhesky/blog/item/0fae4036f5db8dd2a2cc2b4f.html
它的主要特点是:
一、性能非常出色
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的存储引擎
http://hi.baidu.com/lewutian推荐文章:
1. Nutch=Hadoop+Lucene+Spider
2. lucene统计关键词匹配次数
3. lucene学习笔记九, 关于结果分页
4. 在DotLucene/Lucene.net中, 增加自己的中文分词Analyzer
5. lucene结构说明中文文档
6. Lucene 排序及多字段查找
7. Using Lucene 3
8. lucene大数据量的动态更新问题解决方式. 用内存
9. 当前几个主要的Lucene中文分词器的比较
10. Lucene删除索引DeleteDocuments的注意事项
11. lucene.net索引文件存储简析
12. Lucene的分析器
13. PyLucene , python版本的lucene
14. Lucene的查询语法!
15. Lucene-2.2.0 源代码阅读学习(16)
文章来源:http://hi.baidu.com/zhizhesky/blog/item/480ac0ef47098226acafd5dc.html