初识 Elasticsearch
最开始听到这个单词(后面简称:ES)是在大三的一个午休时间,在某个技术灌水群。据群友聊天内容讲到应用很广。于是下来开始在网上扒拉相关资料。那个时候国内资料貌似还很少,但是依稀记得当时在知乎看到有个匿名用户回答的一个问题,大致意思是“滴滴目前正在尝试使用ES做相关服务”(去年有幸去杭州滴滴总部和他们一起交流)。经过一番扒拉,当时发现国内大型互联网公司对 ES 的应用还挺广的,比如百度内部也采用了ES,携程,阿里等等。也许是作为一个计算机专业的学生的原因,也或许是为了以后工作的原因。决定去学习并掌握 ES。
大三的时候因为和同学参与一个国家创新创业项目。当时是为了做一个名为共享饮水机的产品。项目大致愿景是希望人们在街边、学校、商场周围随时能够喝到干净、有品质保证、价格低廉的饮用水。种种原因只出了一个雏形,不过欣慰的是这几年在街边上看到了这样的产品。至少说明我们项目但是的方向是有前景的。
期间为了能够在APP界面上快速显示或推荐就近的饮水机饮水点,考虑到了借助 Elasticsearch 的 Geo-Point 数据类型(即用纬度-经度表示的坐标点)来实现。
从此,ES方便、简洁的设计吸引了我,直到现在我都还在使用。当然,需要说明的是,ES 也有自己的使用场景。我目前的场景是做 APM 系统(即应用性能监控系统),要求存储大量的指标信息,以及能够根据多种指标进行聚合分析做监控图标展示。
好了,到这里我们来概述一下 ES 是什么:
Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。作为 Elastic Stack 的核心,它集中存储您的数据,帮助您发现意料之中以及意料之外的情况。
当然,没太懂的话再多说几句:
全文搜索属于最常见的需求,比如我们平时购物搜索商品、在微博搜索话题和热点、维基百科搜索、在百度/谷歌搜索相关资料、程序员经常逛的Stack Overflow/Github搜索都属于检索类功能。那么开源的 Elasticsearch (以下简称 Elastic)是业界目前全文搜索引擎的首选。它可以快速地储存、搜索和分析海量数据。
再来详细的看看 ES 的特点,以下部分摘自 ES 官网,总结的很到位:
- 查询和分析:保持好奇心,从数据中探寻各种问题的答案
通过 Elasticsearch,您能够执行及合并多种类型的搜索(结构化数据、非结构化数据、地理位置、指标),搜索方式随心而变。先从一个简单的问题出发,试试看能够从中发现些什么。找到与查询最匹配的 10 个文档是一回事。但如果面对的是十亿行日志,又该如何解读呢?Elasticsearch 聚合让您能够从大处着眼,探索数据的趋势和模式。
- 速度:Elasticsearch 很快。快到不可思议。
但是要达到这样的速度并非易事。ES 通过有限状态转换器实现了用于全文检索的倒排索引,实现了用于存储数值数据和地理位置数据的 BKD 树,以及用于分析的列存储。而且由于每个数据都被编入了索引,因此您再也不用因为某些数据没有索引而烦心。您可以用快到令人惊叹的速度使用和访问您的所有数据。
如果你能够很快速的从你的数据存储介质中查询出数据,那么你就掌握了主动权。你就有条件进行商业迭代以此获得更多的可能。
- 可扩展性: 可以在笔记本电脑上运行。也可以在承载了 PB 级数据的成百上千台服务器上运行。
开发环境和生产环境可无缝切换;无论 Elasticsearch 是在一个节点上运行,还是在一个包含 300 个节点的集群上运行,您都能够以相同的方式与 Elasticsearch 进行通信。它能够水平扩展,每秒钟可处理海量事件,同时能够自动管理索引和查询在集群中的分布方式,以实现极其流畅的操作。
- 相关度:搜索所有内容,找到所需的详细信息。
基于各项因素(从词频或近因到热门度等)对搜索结果进行排序。将这些内容与功能进行混合和匹配,以对向用户显示结果的方式进行微调。而且,由于我们的大部分用户都是真实的人,Elasticsearch 具备齐全功能,可以处理包括各种复杂情况(例如拼写错误)在内的人为错误。
- 弹性:我们在您高飞的时候保驾护航。
硬件故障。网络分割。Elasticsearch 为您检测这些故障并确保您的集群(和数据)的安全性和可用性。通过跨集群复制功能,辅助集群可以作为热备份随时投入使用。Elasticsearch 运行在一个分布式的环境中,从设计之初就考虑到了这一点,目的只有一个,让您永远高枕无忧。
- 用例:我到底能够使用 Elasticsearch 做什么?
数字、文本、地理位置、结构化数据、非结构化数据。全文本搜索只是全球众多公司利用 Elasticsearch 解决各种挑战的冰山一角。
为什么我们需要通过 ES 来做检索?
上面讲到了ES实时、存储、搜索、分析。那我们之前使用的 SQL Server、Mysql、Oracle不也是可以做到吗?
相对于数据库,Elasticsearch的强大之处就是可以模糊查询。什么?我的数据库不也可以吗?反手就是给你一个 SQL:
select * from user where name like '%一万小时极客%'
这样还不是可以把包含 一万小时极客
的公众号搜索出来么。
的确,你这样做的确可以。但是要明白的是:name like %一万小时极客%
这种的查询在数据库中是不走索引的,不走索引意味着:只要你的数据库的量很大(1亿条),你的查询肯定会是秒级别的。注意,秒级别的查询对用户体验是很不友好的,因为一般一个业务不会只有一次查询。
而且,即使你觉得你秒级别查询没有哪里不好,那么假设在这一亿条数据中,只有10条数据是你想要的,但是包含了一万小时极客这个关键词的数据有五千条。那么,怎么确保你想要的是你真正想要的(有点拗口···)。
比如,我们经常在搜索页面中搜索:elasticsech
不知你有没有发现,我上面的 elasticsech
打错字了,但是搜索结果还是给我展示了Elasticsearch的相关数据。
通过上面例子,你可能也知道了Elasticsearch到底是用在哪里,以及解决的是什么问题。
Elasticsearch非常擅长对模糊搜索的处理,与此同时,搜索速度还很快,搜索出来的结果会根据各种评分规则帮助我们在检索数据的给结果打分,将我们想要的数据展示在我们眼前。
ELK(Elasticsearch、Logstash、Kibana, Elastic Stack)
Elastic公司围绕Elasticsearch做了很多事情,最终形成了现在的ELK(现在叫做 Elastic Stack)技术栈。或者说是整套的解决方案。而且还是开源的,也就是说你能拿到源码。官方链接:https://www.elastic.co/cn/what-is/elk-stack
ELK
"ELK" 是三个开源项目的首字母缩写,这三个项目分别是:Elasticsearch、Logstash 和 Kibana。
Elasticsearch 是一个搜索和分析引擎。Logstash 是服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到诸如 Elasticsearch 等“存储库”中。Kibana 则可以让用户在 Elasticsearch 中使用图形和图表对数据进行可视化。
所有的产品都是围绕着Elasticsearch形成了一家专门致力于搜索的公司——Elastic。
Elastic 上市
Elastic 上市
2018年10月06日,以Elastic之名进行交易的数据搜索软件初创公司Elastic search在纽约证券交易所上市。
Elastic search也第一时间在自己的官网发布消息表示感谢:“谢谢用户,客户,和合作伙伴!”
Elasticsearch上市消息一出,股票数据立刻大涨。有人称之为“技术创业的春天”。
Elastic 认证工程师
目前Elastic已经推出了Elastic 认证。
Elastic Certified Engineer Exam是Elastic官方推出的Elasticsearch使用能力认证考试,通过该考试表明考生具备了通过执行一些列操作构建完整Elasticsearch解决方案的能力,这些操作包括包括集群安装,配置,管理,数据索引,查询,分析等。
截止2019年12月7日,中国的Elastic认证工程师只有21位。全球:550位。
结尾
本文系重学Elastic Stack的第一篇。后面将慢慢从相关概念入手到一步步搭建ES并如何运用结合场景解决实际问题,欢迎关注。