Solr与Sphinx的比较

EdgBrockman 8年前

来自: http://blog.csdn.net//wgw335363240/article/details/37931941


Solr与Sphinx的比较
Solr版本:4.8.1

Coreseek版本:3.2.14 (基于Sphinx 0.9.9 release)


1.索引效率
     Sphinx:10-15MB/秒, 实测最高可对100GB的文本建立索引,单一索引可包含1亿条记录
    Solr:10MB/秒,亿条数据,20G索引,新浪目前也采用lucene检索
2.搜索性能
    Sphinx:高性能搜索,在2-4GB的文本数据上,平均每次检索响应时间小于0.1秒;在1.2G文本,100万条文档上进行搜索,支持高达每秒150~250次查询;
    Solr:高性能搜索,8G的索引文件,检索响应时间为150ms。高峰支持500并发/秒。
3.扩展性
    Sphinx:高扩展性
    Solr:高扩展性
4.相关度算法
    Sphinx:基于短语相似度和统计(BM25)的复合Ranking方法,支持动态计算得分
    Solr:支持动态计算得分,也支持索引时计算得分
5.是否支持短语搜索
    支持
    支持
6.是否支持分布式搜索
    支持
    支持
7.是否支持Mysql引擎
    支持
    支持
8.是否支持多个字段全文检索
    支持
    支持
9.数据交互
    http请求,Xml、Json
    http请求,Xml、Json
10.数据源
     Sphinx:mysql, pgsql, mssql, xmlpipe , xmlpipe2, odbc,python
    Solr:mysql,Xml,json,csv,odbc
11.多索引
    支持
    支持
12.多核(不同去多索引)
    Sphinx:不支持
    Solr:支持

13. 中文分词的支持比较
          sphinx目前只支持mmseg3,sphinx for chinese两种分词,目前大家使用的比较多的是mmseg3。mmseg3的词库需要预先编译,不利于词库的扩充。
          Solr目前支持的词库比较多,目前支持的有庖丁,IK,mmsegj4,通过比较分词效果,IK在分词的查全和查准的效果上更好一些。IK分词支持设置停用词和扩展词库,扩展词库每个词一行的方式进行扩展。
14. 从Mysql数据库索引数据的支持
        sphinx可以通过配置数据源的方式直接从mysql中索引数据,在数据量比较大的时候,可以设置主索引+增量索引的方式来同步数据。但是主索引需要是根据Mysql表的主键Id来设置索引范围,比如Id小于9000,000,Id大于9000,000的通过增量索引来同步。这种只适应Id小于9000,000的数据更新频繁的情况。
        如果主索引和增量索引是以记录的最后更新时间来区分的话,由于主索引和增量索引使用的是2个不同的索引文件,这就会造成主索引和增量索引中的数据不一致,导致检索时出现本不该出现的记录。这种情况就需要把增量索引合并到主索引中,如果主索引的数据比较大,不确定合并的时间需要多少。
        solr索引mysql数据时,可以配置成主索引+增量索引,主索引和增量索引之间以更新的时间戳为分割线,solr会记录每次更新的时间戳。由于solr的增量索引和增量索引使用的都是一个索引文件,所以在执行增量索引时会自动合并到最终的索引中。
15. 实时检索的支持
        sphinx本身不支持中文分词,Coreseek是现在用的最多的sphinx中文全文检索,它提供了为Sphinx设计的中文分词包LibMMSeg。Coreseek目前稳定版是3.2.14(基于Sphinx 0.9.9 release开发),该版本还不支持实时检索。目前Coresekk4.1还是测试版,测试版本支持实时检索,但是不太稳定。
        solr的索引支持实时新增、更新和删除,可以根据记录的最后更新时间实现增量更新,在增量更新数据不多的情况下,可以设置增量更新任务为10秒更新一次。从而达到数据的实时同步。