【玩转ElasticSearch】横向对比ElasticSearch与Sphinx

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 打算写几篇ElasticSearch使用心得。第一篇,先从ElasticSearch与Sphinx的横向对比开始。横向对比是反应优点和暴露问题的好方法。我是Sphinx阵营转向ElasticSearch阵营的,两者都是成熟的开源搜索引擎,各有优劣,这篇文章也可以给纠结使用哪套方案的同学提供一些选择的依据。 • 导入MySQL数据生成索引 ElasticSearch:GitHub -


打算写几篇ElasticSearch使用心得。

第一篇,先从ElasticSearch与Sphinx的横向对比开始。横向对比是反应优点和暴露问题的好方法。我是Sphinx阵营转向ElasticSearch阵营的,两者都是成熟的开源搜索引擎,各有优劣,这篇文章也可以给纠结使用哪套方案的同学提供一些选择的依据。

• 导入MySQL数据生成索引

ElasticSearch:GitHub - scharron/elasticsearch-river-mysql

Sphinx:原生支持基于MySQL的表建索引

ElasticSearch官方文档上,数据都是使用RESTful接口一条一条插入的,也就是增量更新。在数据量非常大的时候,遍历全表重建一次索引会非常消耗时间。而elasticsearch-rivel-mysql这个项目并不是很靠谱,开发者甚至曾经在git上标明deprecated(现在没了)。反正我是自己另外写了一套。

在导入MySQL数据生成索引时,从易用性、可靠性、速度上来看,Sphinx优于ElasticSearch。

• 增量更新支持

ElasticSearch优于Sphinx。ElasticSearch把增量更新作为首选CURD方式;而Sphinx使用辅助表的方案不但不优雅,还会让你的其他系统变得复杂起来,在你频繁更改单条数据的时候很容易出错。

• 可视化与辅助工具

ElasticSearch:KibanaLogstashMarvel

Sphinx:Sphinx Tools

Kibana是ElasticSearch提供的图形化界面,基本功能有:1)读取一个Index 2)对一个Index写query查询出具体数据 3)通过这些数据生成图表 4)拉几个图表生成一个报表。Kibana非常强大,根据这些基础功能,我们已经可以自由定制完成各种复杂需求了。Kibana还可以加各种插件,其中最常用的是Marvel(性能、状态监控)与Logstash(数据收集),非常好用。

反观Sphinx Tools,还停留在性能监控的阶段,而且还在内测,被ElasticSearch的Kibana+全家桶甩太远了。

• 搜索算法支持

ElasthcSearch的搜索底层功能基于Lucene,Sphinx也该有的都有。然而ElasticSearch的Query DSL支持更复杂的查询逻辑,这一点是超越Sphinx的。

在自定义Ranker方面,ElasticSearch的Function Score Query比Sphinx的expression-ranker强大许多。当年我为了让Sphinx支持一个定制的Ranker,不得不去改源码,后来发现这个功能在ElasticSearch上可以轻松实现。

总的来说,ElasticSearch稍微优于Sphinx。

• 横向扩展与高可用

ElasticSearch是天生为了集群化而设计的。索引如果没有Replica就会显示黄灯,有才会亮绿灯。每个节点分为Client Node、Data Node、Master Node三种角色,在合理的配置之下,任意一台(甚至多台)机器炸了,整个集群都能正常运行。ElasticSearch还支持动态加机器等等功能,暂不赘述。

Sphinx也有master searchd和slave searchd的概念,可以分布式,但想实现高可用就相当复杂了。

ElasticSearch优于Sphinx。Sphinx的劣势不在于做不到,而在于不好用。

• 资源占用

Sphinx优于ElasticSearch。

不得不说,java在这方面比不上C++。CPU还好,差距不大,内存占用方面真心天差地别。

• 搜索速度

搜索速度主要看怎么配置Cluster,越多搜起来就越快。

• NLP支持

这里只说中文NLP。

ElasticSearch:GitHub - medcl/elasticsearch-analysis-ik

Sphinx:曾经有个叫coreseek的项目,可惜没有继续维护了。

其实双方都可以开发第三方插件,接入国内的LTP或者ICTCLAS都不难。

• 总结

Sphinx和ElasticSearch都是很优秀的方案,都经历了实战的考验。当时为什么我从Sphinx倒戈去了ElasticSearch,主要原因是:

1)我有定制Ranker的需求,ElasticSearch的Functional Score Query刚好满足了我

2)业务越来越大,ElasticSearch有更强的横向扩展能力和高可用性

3)可以用Kibana整出好看的报表啊!

现在回头一看,ElasticSearch发力非常猛,版本迭代如火箭一般,社区也很活跃。我认为这个选择没有出错。

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
16天前
|
搜索推荐 Java 大数据
ElasticSearch安装
ElasticSearch安装
|
15天前
|
JSON Unix Linux
Elasticsearch如何安装
Elasticsearch如何安装
|
4月前
|
数据可视化 Docker 容器
elasticsearch 安装(一)
elasticsearch 安装
160 0
|
6月前
|
安全 Java Linux
ElasticSearch第四讲:ES详解:ElasticSearch和Kibana安装
ElasticSearch第四讲:ES详解:ElasticSearch和Kibana安装
203 0
|
4月前
elasticsearch7.x kibana的常用DSL(自己练习的)
elasticsearch7.x kibana的常用DSL(自己练习的)
|
4月前
|
自然语言处理 索引 Windows
elasticsearch 安装(二)
elasticsearch 安装
104 0
|
8月前
|
SQL 自然语言处理 Java
【ElasticSearch系列-01】初识以及安装elasticSearch
【ElasticSearch系列-01】初识以及安装elasticSearch
132 0
|
8月前
|
存储 算法 数据可视化
ElasticSearch六 ElasticSearch扩展之FileBeat、Logstash 1
ElasticSearch六 ElasticSearch扩展之FileBeat、Logstash
54 0
|
8月前
|
消息中间件 监控 NoSQL
ElasticSearch六 ElasticSearch扩展之FileBeat、Logstash 2
ElasticSearch六 ElasticSearch扩展之FileBeat、Logstash
158 0
|
10月前
|
安全 固态存储 网络协议
Elasticsearch详解与安装
Elasticsearch详解与安装
149 2