MySQL-如何选择搜索引擎:Lucene、Sphinx还是MySQL的全文检索?
我们网站现在需要一个站内的全文搜索引擎,目前待选的有:Lucene、Sphinx、MySQL自带的全文检索,大伙有相关经验的可以说下应该用哪个呢?或者你还有别的建议也可以提出来。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我们网站现在需要一个站内的全文搜索引擎,目前待选的有:Lucene、Sphinx、MySQL自带的全文检索,大伙有相关经验的可以说下应该用哪个呢?或者你还有别的建议也可以提出来。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(7)
Sphinx支持高速建立索引(可达10MB/秒,而Lucene建立索引的速度是1.8MB/秒)
高性能搜索(在2-4 GB的文本上搜索,平均0.1秒内获得结果)
高扩展性(实测最高可对100GB的文本建立索引,单一索引可包含1亿条记录)
支持分布式检索
支持基于短语和基于统计的复合结果排序机制
支持任意数量的文件字段(数值属性或全文检索属性)
支持不同的搜索模式(“完全匹配”,“短语匹配”和“任一匹配”)
支持作为Mysql的存储引擎(可以只改变sql就能实现全文搜索)
coreseek就是基于sphinx的实现
如果是用php作服务器端脚本,最好还是用sphinx。如果用java做服务器端脚本,最好用Lucene。sphinx相比lucence,配置简单,易用,功能没有lucencename完善和强大。
我觉得应该选择Lucene,基于以下几点:
1.Sphinx和MySQL是基于数据库的全文引擎,创建索引是B+树和hash key-value的方式。而Lucene使用的倒排序索引,即每个词与包含这个词的文件形成对应关系。这样对于搜索文档,显然倒排序索引快。
2.Lucene除了索引功能,还提供文件格式识别(并建立索引)、分词(以前用的版本只有英文、德文等欧洲的语言)、评分算法(依据此结果排序)、多种搜索方式(组合、模糊、正则等)、搜索词高亮显示等诸多功能。
3.为C/S和B/S方式分别提供支持。
4.Lucene提供多种语言开发的版本,如:C++、Java、C#、Ruby、Python等。
5.提供扩展接口,方便功能扩展。
可以参考下<<Lucene In Action>>这本书。
我用Lucene做过企业内部全文检索系统,效果不错。
我们公司现在用的是 coreseek (sphinx)
我觉得选一个合适的才是最主要的,里面各有各的优点缺点,应该根据业务及数据量来确定。
lucene功能强大,和消息队列结合会很好,唯一的缺点就是索引难维护,特别是多个索引的情况下。sphinx不需要太注重索引维护,但是它的缺点就是不太能实时的更新索引,支持的功能没有LUCENE强大,但是足够一个中小型网站使用。
没有人推荐solr吗?基于lucence的企业级搜索,虽然也是java,但提高xml,json等http服务,php操作也很方便的。
比较推荐sphinx
部署 sphinx编译,部署,配置都不复杂,不需要代码级的修改。支持原生的mysql数据源,也支持xml数据。
搜索API支持PHP、Python、Perl、Rudy和Java,使用简单,可以在短时间内移植到新语言上。
对于中文搜索,国内有coreseek和sphinx-for-chinese两个版本,内部使用了mmseg这个分词器。用户可以自定义分词库。