
关于本书
本书的目标读者
对于任何希望深入了解Elasticsearch和实际使用它的人,本书都是一份宝贵的资源。特别是以下人士,将从阅读本书中受益:
❏ 刚接触Elasticsearch领域、希望了解其基本工作原理的开发者、架构师、分析师、管理者或产品负责人;
❏ 希望在数据管道中利用Elasticsearch进行实时数据分析和处理的数据科学家;
❏ 维护大型数据库,希望使用Elasticsearch提高数据检索效率和整体系统性能的系统管理员;
❏ 需要了解Elasticsearch以便在客户项目中推荐使用和做出战略性IT决策的IT顾问或技术顾问;
❏ 熟悉技术且想了解Elasticsearch如何提高运营效率或为客户提供额外价值的企业管理者;
❏ 在计算机科学、数据科学或相关领域学习大数据技术,并对学习搜索技术感兴趣的学生和学术研究人员;
❏ 处理大数据集,渴望使用Elasticsearch增强搜索功能(包括全文搜索、模糊搜索、词项级搜索和其他复杂搜索功能)的个人用户;
❏ 目标是设计和开发与Elasticsearch集群通信的微服务的Elasticsearch架构师、开发者或分析师。
本书的组织结构:路线图
尽管本书没有划分部分,但各章遵循清晰的线性进展,先从特性和架构的角度开始介绍Elasticsearch。
❏ 第1章开启搜索世界的旅程,回顾从基本的数据库支持系统到今天普遍使用的高级搜索引擎的发展历程。聚焦于Elasticsearch这一强大、多功能的现代搜索引擎,它重新定义了搜索功能的能力,将其独特的特性、实际的应用和广泛的采用推向了前沿。这一章还展望通用人工智能工具的变革潜力,探讨像ChatGPT这样的技术带来的令人兴奋的可能性,探索它们将来如何重塑搜索空间,并在未来重新定义人类与信息的交互方式。
❏ 第2章深入了解Elasticsearch实践,通过使用文档API进行索引和检索文档,学习使用搜索API执行搜索查询。这一章带领读者了解从模式匹配到短语搜索、拼写纠正、范围结果、多字段搜索等基本的搜索条件,还会涉及一点高级查询以进一步丰富学习体验。这一章最后介绍数据排序、结果分页、高亮显示和其他出色的提升用户搜索能力的功能。
❏ 第3章揭开Elasticsearch架构的神秘面纱,引导读者了解它的基础组件和实现搜索与索引的复杂过程。这次探索涵盖驱动搜索引擎的基本概念,包括倒排索引、相关性和文本分析。这一章还探讨Elasticsearch服务器的集群和分布式特性。
❏ 第4章探索映射模式、数据类型和映射API,并详细介绍Elasticsearch数据处理的方式。这一章讨论映射模式如何提高搜索的准确性和效率,深入研究动态和显式映射。这一探索还扩展到核心数据类型,包括text、keyword、date和integer。这一章最后介绍高级数据类型,如geo_point、geo_shape、object、join、flattened等。
❏ 第5章全面讨论单文档API和多文档API及其相关操作。这一章不但从实践的角度理解使用这些API来索引、检索、更新和删除文档,而且探讨重新索引功能。
❏ 第6章聚焦使用索引API进行索引操作。这一章指导读者了解索引的基础配置,包括设置、映射和别名。这次探索提供了对为生产场景自定义索引的一种理解。这一章还讨论如何处理索引模板,探讨索引和可组合模板的机制。最后一节研究索引生命周期管理。
❏ 第7章深入文本分析,审视Elasticsearch的分析器模块是如何对全文进行分词和归一化处理的。这一章介绍文本分析的机制,探索内置分析器,如standard分析器、simple分析器、keyword分析器和语言分析器。这一章会让读者掌握创建自定义分析器的知识。
第8章到第13章专注于搜索。
❏ 第8章为理解搜索的基本原理打下基础,解释搜索请求的处理和响应生成的机制。这一章介绍两种主要的搜索类型,即URI搜索和Query DSL,还介绍一些通用的功能,如高亮显示、排序、分页等,为读者提供Elasticsearch搜索功能的全面介绍。
❏ 第9章探讨面向结构化数据的词项级查询,详细讨论各种类型的词项级查询,包括范围(range)查询、前缀(prefix)查询、通配符(wildcard)查询和模糊(fuzzy)查询等。
❏ 第10章着眼于专为搜索非结构化数据而设计的全文查询。这一章介绍使用全文搜索API的多种方式,包括match系列查询、query_string查询、fuzzy查询和simple_ query_string查询等。
❏ 第11章进入复合查询的复杂世界,重点介绍布尔查询作为构建高级搜索查询的多功能工具。这一章讨论如何使用条件子句(如must、must_not、should和filter)将子查询构造成更复杂的复合查询。这一章最后详细介绍boosting查询和constant_score查询。
❏ 第12章介绍专用查询,包括distance_feature、percolator、more_like_this和pinned。这一章介绍每类查询的独特优势,如distance_feature查询能够优先返回接近给定位置的结果,more_like_this查询可以查找类似的文档。这一章还详细介绍percolator查询,当有新的文档满足条件时,该查询可以通知用户。
❏ 第13章详细介绍聚合。这一章探讨指标聚合,如求和、平均值、最小值、最大值、排行(top_hits)等统计数据,还强调在收集聚合数据到一组桶中时使用桶聚合的方法。这一章还研究管道聚合,它提供诸如导数和移动平均等高级统计分析。
最后两章集中介绍管理和性能。
❏ 第14章介绍生产环境的Elasticsearch管理知识。这包括了解如何在不同负载下扩展集群、节点间通信和如何确定分片大小。这一章还探讨快照的核心概念,提供创建快照和在需要时从中检索数据的实际示例,详细介绍高级配置和集群主节点的概念。
❏ 第15章深入探讨如何对性能不佳或问题频繁的Elasticsearch集群进行故障排除。这一章介绍出现故障的常见原因,如搜索和速度瓶颈、不稳定和不健康的集群及断路器等,还提供诊断和解决性能问题的知识,确保用户的Elasticsearch集群平稳高效地运行。
本书还包含3个附录。
❏ 附录A是在本地环境中安装Elasticsearch和Kibana的实用指南。
❏ 附录B介绍摄取管道,这是Elasticsearch中数据预处理的一个关键组件,以及如何在各种场景中配置和使用它们。
❏ 附录C涵盖使用Java客户端与Elasticsearch进行交互的方法,并提供示例和最佳实践。
关于代码
本书的主要目标之一是通过包含易于执行的代码来提供无缝的实践体验。经过数次迭代,目前所有在Kibana上编写和执行的查询托管在GitHub上的文本文件中。这些查询是基于Query DSL的JSON代码。这样做的目标是提供一个简单明了的过程,让读者可以从GitHub复制这些文本文件,并将其粘贴到Kibana Dev Tools应用中立即执行。
为了进一步帮助读者学习,我在专门的数据集文件夹中提供了样本数据文件和这些索引的映射(必要时)。这种方法确保了一种实用的、对学习者友好的体验,让读者可以直接使用数据并运用新掌握的知识。
本书的所有源代码均可从本书的GitHub代码库和出版社网站下载。文件夹内容如下。
❏ kibana_scripts——每章的Query DSL脚本。
❏ datasets——各章所需的映射和样本数据集。
❏ code——Java和Python代码。
❏ docker——在本地环境中运行服务的Docker文件。例如,Elasticsearch-docker-8-6-2.yml包含了两个服务,即Elasticsearch和Kibana。因此,当执行docker-compose up命令时,它会在Docker容器中启动Elasticsearch和Kibana服务。
❏ appendices——鉴于Elasticsearch的快速迭代,本书也需要进行更新。新特性将在这个文件夹(或本书的GitHub代码库)中提供。我会根据Elasticsearch的新版本添加和修改内容。
Elasticsearch的版本发布频率相当高——当我开始撰写本书时,我使用的是7.x版本,而当本书准备付印时,版本已经是8.7了。等到你读到本书的时候,我预计Elastic还会有更多的版本发布!每次新版本发布,更新代码库都是一项艰巨的任务。我会努力保持代码的更新,但我也非常欢迎贡献者来维护代码库。如果你想成为这个项目的贡献者,请联系我。
本书列出了许多源代码示例,以带编号的代码清单和行内普通文本的形式出现。源代码都使用等宽字体,以便与普通文本区分开。
大多数时候,原始源代码已经做了重新格式化,我们添加了换行符并调整了缩进以适应书的页面宽度,但在极少数情况下,这样还不够,代码清单中会包含续行标记(➥)。此外,当源代码在正文中已经有描述时,源代码中的注释通常会被删掉。许多代码清单中都附加了代码注释,以强调一些重要概念。