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

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
简介: 打算写几篇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发力非常猛,版本迭代如火箭一般,社区也很活跃。我认为这个选择没有出错。

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
目录
相关文章
|
运维 监控 安全
【ELK入门】Elastic中文社区运维监控实战之架构篇
阿里云MVP曾勇撰写的《ELK运维监控入门实战》系列,以Elasticsearch中文社区网站运维监控体系搭建作为案例,讲解了ELK监控系统的相关原理和技术实现,可作为对ELK感兴趣的同学的入门级文章。本篇作为第一篇,介绍了项目背景和技术架构。
7276 0
|
Cloud Native 架构师 测试技术
如何画好一张架构图?(内含知识图谱)
架构图是什么?为什么要画架构图?如何画好架构图?有哪些方法?本文从架构的定义说起,分享了阿里文娱高级技术专家箫逸关于画架构图多年的经验总结,并对抽象这一概念进行了深入地讨论。内容较长,同学们可收藏起来细细阅读。
15967 0
如何画好一张架构图?(内含知识图谱)
|
Arthas SQL 监控
重启大法好!线上常见问题排查手册
本文从线上实际问题和故障的排查出发,分享如何快速定位和恢复线上常见问题和故障,总结了很多实操的方法,希望对大家有用。
10825 3
重启大法好!线上常见问题排查手册
|
存储 弹性计算 运维
性能调优-ossutil 调优
使用 osstuil 工具遇到隐藏的性能提升参数,和排查小技巧;
4000 0
性能调优-ossutil 调优
|
容器 双11 Cloud Native
重磅发布 | 《不一样的 双11 技术,阿里巴巴经济体云原生实践》电子书开放下载
2019 双11,订单创新峰值达到 54.4 万笔/秒,单日数据处理量达到 970PB,面对世界级流量洪峰,今年的阿里巴巴交出了一份亮眼的云原生技术成绩单,并实现了100% 核心应用以云原生的方式上云: 双11 基础设施 100% 上云 支撑 双11 在线业务容器规模达到 200 万 采用神龙弹性裸金属服务器计算性价比提升 20%  这些数据背后是对一个个技术问题的反复尝试与实践。
46578 0
重磅发布 | 《不一样的 双11 技术,阿里巴巴经济体云原生实践》电子书开放下载
|
Cloud Native 安全 Java
架构简洁之道:从阿里开源应用架构 COLA 说起
COLA 的主要目的是为应用架构提供一套简单的可以复制、可以理解、可以落地、可以控制复杂性的”指导和约束"。在实践中作者发现 COLA 在简洁性上仍有不足,因此给 COLA 做了一次“升级”,在这次升级中,没有增加任何新的功能,而是尽量多删减了一些概念和功能,让 COLA 更简洁有效。
15173 1
架构简洁之道:从阿里开源应用架构 COLA 说起
|
开发者 数据库 容器
阿里开发者技术交流钉钉群汇总【2022】
欢迎大家扫码或者点击链接进群,有缺失的技术方向请在评论里提出,我们可以一起共建
62500 1
|
机器学习/深度学习 固态存储 API
【最佳实践】Transforms数据透视让Elasticsearch数据更易分析
Transforms 使您能够从 Elasticsearch 索引中检索信息,对其进行转换并将其存储在另一个索引中。 使您能够透视数据并创建以实体为中心的索引,这些索引可以汇总实体的行为。 这会将数据组织成易于分析的格式。让我们使用Kibana示例数据来演示如何使用变换来透视和汇总数据。
3021 0
【最佳实践】Transforms数据透视让Elasticsearch数据更易分析
|
存储 关系型数据库 Java
【最佳实践】阿里云Logstash JDBC实现Elasticsearch与关系型数据库保持数据同步
为了充分利用阿里云 Elasticsearch 提供的强大搜索功能,很多公司都会在关系型数据库的基础上,部署 Elasticsearch。这种情况下,则需要确保 Elasticsearch 与所关联关系型数据库中的数据保持同步。 在本篇博文中,我会演示如何使用 Logstash 高效复制数据,将关系型数据库阿里云 RDS 中的数据更新同步到 Elasticsearch 中。
3183 0
【最佳实践】阿里云Logstash JDBC实现Elasticsearch与关系型数据库保持数据同步
|
存储 运维 监控
阿里云Elasticsearch日志增强版介绍
阿里云Elasticsearch官方在2017年的时候达成了非常紧密的战略合作关系。自此以后,一直在云上致力于为大家提供全链路的ElasticStack生态内所有的能力的一个托管服务。阿里云产品专家,洪阳和阿里云技术专家,志宸两位专家为大家带来阿里云Elasticsearch增强版的介绍。
41038 0
阿里云Elasticsearch日志增强版介绍