Lucene
系别:JAVA
基于Java的一个开放源代码的全文检索引擎工具包,注意是工具包,所以严格来说它并不是一个搜索引擎服务程序,
开发者需要了解搜索引擎的基本原理和Lucene的用法,然后根据需求用Java来开发。
Elasticsearch
系别:JAVA
基于Lucene,仅支持json(可通过插件支持各种主流富文本),索引插入效率高,对比solr更适合近实时查询,
但是对历史数据查询速度较solr慢。可用于索引更新频繁需求近实时查询较强的系统。支持分布式,无需额外
中间件管理。支持中文分词。社区庞大,Java支持好,有spring-data
Solr(solar)
系别:JAVA
基于Lucene,支持pdf,word,txt等富文本索引(内容索引),索引插入时查询效率会降低,不适合近实时查询
(索引更新频繁),对历史数据查询速度快,多用于传统应用。支持分布式,但需要zookeeper管理。支持中文分词。
社区庞大,Java支持好。
Sphinx
系别:C++
与MySQL紧密结合,无需额外工具即可将MySQL数据上传到搜索引擎,增量索引支持麻烦, sphinx本身不支持
中文分词,Coreseek是现在用的最多的sphinx中文全文检索,它提供了为Sphinx设计的中文分词包LibMMSeg。
Coreseek目前稳定版是3.2.14(基于Sphinx 0.9.9 release开发),该版本还不支持实时检索。目前Coresekk4.1
还是测试版,测试版本支持实时检索,但是不太稳定。
Xapian
系别:C++
和Lucene一样,Xapian只是一个搜索引擎工具库,用户可以在其上自己扩展其适合的应用,它是基于概率模型
来做为查询分数计算的基本,当然,它还提供了丰富的Boolean查询功能。
由于lucene,xapian是工具包故排除,以下仅对成型产品作对比
各方面资料显示Solr 在传统的搜索应用中表现好于 Elasticsearch,但在处理实时搜索应用时效率明显低于
Elasticsearch。对于此处所提及的传统搜索以及实时搜索我个人理解便是,实时搜索具体指的是微博,知乎
等需要实时更新索引并能被搜索到的应用,与之相对应的传统搜索应该是指数据恒定或增量极少的应用?比如
图书馆索引?因为多数资料都从solr检索已经索引的数据时效率比es要快,但是又提到,solr随着数据量增大,
检索效率会降低得出solr更适合传统应用。
档案管理系统是基于Java开发的springboot应用,故应选择对Java/spring整合比较友好的检索引擎,故xapian
可以排除,另外档案管理系统是中文应用,应选择支持中文分词的搜索引擎,有资料显示sphinx引擎的中文分词
插件Coreseek已经停止维护并不太稳定,故也应该排除,剩下的lucene,solr,es均为Java开发,并且solr,es是
基于lucene开发的具体解决方案而lucene是搜索工具包,如需要实现搜索功能需自行开发,适合需定制或自研检索
引擎的企业/团队,故lucene也被排除,剩下es,solr各有好处,性能不相伯仲。在传统应用中,也就是静态索引中,
solr查询速度更快,但是由于增量索引solr会阻塞导致查询变
本文链接:http://78moban.cn/post/2270.html
版权声明:站内所有文章皆来自网络转载,只供模板演示使用,并无任何其它意义!