随着业务的增长,数据与日俱增,这时为用户带来丰富的、便捷的搜索功能就迫在眉睫了。传统的数据库在处理文本搜索、模糊查询、海量数据统计分析的时候总会力不从心,所以在处理这些复杂的搜索需求时,我们更倾向于使用 Elasticsearch 搜索引擎。

Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,其在 DB-Engines “兵器”排行榜中长期位列第一

排行榜.png

除了搜索领域外,Elasticsearch 与 Kibana、Logstash 组成的 ELK 系统还可以应用到日志采集、分析、监控等领域。

现在很多的企业和团队都在使用 Elasticsearch,那为啥 Elasticsearch 可以这么火呢?从 Elasticsearch 的官网上可以得出这几个优点。

  • 可从数据中探寻各种问题的答案。通过 Elasticsearch 你能够执行及合并多种类型的搜索(结构化数据、非结构化数据、地理位置、指标),搜索方式随心而变。

  • 快到不可思议的速度。你可以用快到令人惊叹的速度使用和访问你所有的数据。

  • 高度的可扩展性。它能够水平扩展,每秒钟可处理海量事件,同时能够自动管理索引和查询在集群中的分布方式,以实现极其流畅的操作。

  • 安全性和可靠性。Elasticsearch 可以为你检测到硬件、网络分区等故障,并确保你的集群和数据的安全性和可用性。通过跨集群复制功能,辅助集群可以作为热备份随时投入使用。

在本小册编写的时候最新的 Elasticsearch 7.13 版本已经发布了,所以本小册将以 7.13 为基础版本,由我带你一起学习 Elasticsearch 7.x 中的核心技术。

本小册的主要内容

本小册分为 4 个部分,将由浅入深为你介绍 Elasticsearch 7.x 中的核心技术。主要知识点包括基本概念、常用 API 的使用实践、核心特性的底层原理与思想、集群管理与调优、源码阅读等知识。整个小册的思维导图如下:

知识点.png

本小册将会从非常浅显的概念开始与你学习 Elasticsearch 7.x 中的常用 API,在熟悉使用 Elasticsearch 后,我们将会对 Elasticsearch 中部分重要的特性、概念的底层实现原理进行介绍。在了解这些原理后,我们将学习如何部署、运维线上小规模集群,并且与你一起搭建一个简单的 ELK 系统。最后我们会搭建源码阅读的环境并且与你一起阅读部分模块的源码。

所以,通过本小册 4 大部分的学习,你可以收获:

  • 熟练使用 Elasticsearch 来解决搜索需求;
  • 强化 Elasticsearch 集群运维、调优的能力;
  • 通晓 Elasticsearch 核心技术的底层实现;
  • 牢固掌握源码阅读与调试的技巧。

也就是说,学完本课程后,你不仅可以掌握 ElasticSearch 相关的技术,还可以帮助你根据业务的特点快速构建出相应的搜索业务、数据分析、日志系统。真正实现学以致用

适宜人群

  • 对 Elasticsearch 或搜索引擎感兴趣的同学。
  • 有了解和使用过 Elasticsearch,现在想进一步了解 Elasticsearch 的同学。
  • 准备从事数据搜索、分析相关工作的同学。
  • 从事 Elasticsearch 集群运维的同学。

行文约定

虽然本小册是一本电子读物,但是实际上为了提高阅读体验我会尽量减少代码的出现,所以:

  1. 我会把内容中大段的数据初始化脚本放到 ES 小册-giteegithub-小册-gitee 上;
  2. 很多接口返回的内容都比较长,我在文中保留了关键部分,其他用 “……” 省略了;
  3. 本小册主要以 7.13 为主,但绝大部分内容 7.x 的版本都适用;
  4. 后续内容中我们把 Elasticsearch 简称为 ES,有特别说明的除外。

我是谁

你好,我是 spoofer,一名后台研发工程师。平时热衷于技术分享和研究各种中间件的源码与实现,无聊时也打打天池的中间件比赛,尽管成绩一般般。

从业这些年来,专注于后台服务的研发,也研究过大数据相关的组件与系统。近几年在某 K12 教育公司任后台研发工程师,负责和参与公司 K12 云教育系统架构设计、核心组件和服务的实现。

阅读本小册的一些建议

  • 虽说小册的 4 个部分之间有一定关联性,但有基础的同学可以直接跳转到你需要的部分进行学习。
  • 由于作者的水平和时间有限,并且 Elasticsearch 版本更新太快,难免会有勘误,或者对部分知识的理解有误。小册中的内容并不是都对照了 Elasticsearch 的源码做过认证,所以如果发现有错误,欢迎给我留言和指正。
  • 本小册中好多的图例都经过精心设计和配色,所以为了保证阅读体验,请在好一点的显示器中阅读。
  • 如果条件允许,请准备一台配置正常点的电脑安装虚拟机和 Elasticsearch,当然你也可以在 Docker 中安装。
  • API 部分请边学边练,因为 Elasticsearch 的 API 可选参数有很多,所以想要更多的使用示例可参考官方文档。

学习 Elasticsearch 的一些建议

  • 对于任何一个框架或者中间件,我都是建议先用熟了再去看源码。Elasticsearch 也不例外。
  • 在学习 Elasticsearch 的时候,建议先广度学习各种 API、概念、原理,了解它们在实际中解决了什么问题,然后再深挖。
  • 当你有了一定基础后,可以到群里或者社区里帮助别人解决问题。平时可以看看别人遇到的问题,碰到不会的可以找找答案,并且整理记录下来。
  • 可以加入 Elasticsearch 中文社区,或者 Slack 频道、相关的 QQ 群,在社区中获取别人的帮助。

学习资料

  • 《Elasticsearch 权威指南》,这个是官方的资料,不过内容是基于 2.x 版本的,部分内容已经过时了,作为入门资料可以泛读。
  • 《深入理解 Elasticsearch(原书第2版)》,本书也是比较旧的资料了,作为入门资料可以泛读。
  • 《Elasticsearch 源码解析与优化实战》,基于 6.x 源码分析的书本,在打好基础后(学习完本小册后🐶),非常建议你通读一遍。
  • Chris 的博客,如果想要了解底层实现的话,Chris 的博客提供了很多不错的文章。
  • 官方文档!!!这个非常重要,关于 API 使用的示例上面都有。

其他

系统地学习一项技术是很难的,学习资料也非常重要。我写本小册的初衷就是因为自己学习时走了不少的弯路,将心比心,希望能有这样一份资料给刚入门或者有点基础的同学进行查阅。

虽然本小册的所有知识点及相关内容你都可以在网络上找到对应的文章,但是一份成体系的学习资料对初学者是非常重要的,这可以省去你大量查阅和筛选的时间。真心希望这本价格只需要一顿饭钱的小册能帮到你。

如果你在读完本小册后,真滴有所收获,欢迎你给我留言,你的鼓励和认同是我坚持分享的动力。当然,如果你在学习本小册过程中遇到什么问题,也欢迎你给我留言,我们一起交流、一起进步!