那些年我们一起学过的 Elasticsearch

2020-05-29 00:00:00 索引 查询 数据 集群 的是

初始 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 '%一万小时极客%'

相关文章