首页>参考读物>计算机科学与技术>软件与程序设计

深入理解Elasticsearch(原书第3版)
作者 : (印度)波哈维·荻西特(Bharvi Dixit)著
译者 : 刘志斌 译
出版日期 : 2019-12-17
ISBN : 978-7-111-64307-4
定价 : 89.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 298
开本 : 16
原书名 : Mastering Elasticsearch 5.x - Third Edition
原出版社: Packt Publishing Ltd.
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

本书在回顾Elasticsearch基础知识的同时,介绍了最新版本Elasticsearch 5的新功能,并对其中级和高级的功能(如查询、索引、搜索和修改数据)进行了详细说明。本书还将探索聚集、指标控制、分片、复制和聚类等概念,并通过实例展示监控管理模块、创建分析插件等。通过本书,读者可以对Elasticsearch 5有一个全面的认识并掌握其性能。

图书特色

资深软件开发专家、架构师撰写,系统且深入阐释Elasticsearch涉及的工具、方法、原则和实践
从设计原理、部署调优、高级特性、扩展开发等方面助你全面进阶

图书前言

欢迎来到Elasticsearch的世界并阅读本书。在阅读的过程中,我们将带你了解与Elasticsearch紧密相关的各种话题。但请注意,本书的目标读者并不是初学者,Elasticsearch从1.x演进到5.x已经有了非常大的变化,因此本书在上一版的基础上补充了很多新内容。
本书将探讨与Elasticsearch和Lucene相关的各方面内容。首先简单介绍一下Lucene和Elasticsearch,带你了解Elasticsearch提供的各种查询方法。在这里会涉及与查询相关的不同主题,比如结果过滤、在特定场景下如何选择合适的查询方式等。Elasticsearch当然并非只具备查询功能,本书还将介绍Elasticsearch新引入的聚合功能以及其他特性,帮你挖掘出被索引数据的价值,并为用户提供更好的查询体验。
在与Elasticsearch脚本模块相关的章节中,也将讨论在Elasticsearch中进行数据建模和处理关系型数据的方法,同时也会展示一些用新的默认脚本语言Painless写成的例子。
对大多数用户来说,查询和数据分析是Elasticsearch最吸引人的部分,不过这些并不是本书讨论的全部内容。因此在索引架构的部分,本书还会试图与读者探讨一些额外的话题,比如如何选择合适的分片数和副本数、如何调整分片分配方式等。在讨论Elasticsearch和Lucene之间的关系时,还将介绍不同的评分算法、如何选择合适的存储机制、它们之间的差异、为什么做出合适的选择很重要等。
Elasticsearch的管理功能虽然被放在了最后讨论,但同样重要。这一部分内容包括发现模块和恢复模块,以及对人类友好的Cat API——使用它可以快速获取管理命令的结果,并将返回的JSON格式数据以人类易于阅读的格式展现,无须再次转换。我们还将讨论ingest节点,它可以在生成索引之前就对Elasticsearch中的数据进行预处理,以及如何利用部落节点来完成在多个节点之间进行联合搜索的功能。
看书名就知道,本书不会错过与性能相关的话题,会用整整一章来专门讨论它。
与本书第2版一样,也有一章专门讨论Elasticsearch插件的开发。展示如何构建Apache Maven项目,并开发两个不同类型的插件——自定义REST操作插件和自定义分析插件。
最后一章将讨论完整的Elastic Stack所包含的全部组件,读后会对如何开始使用Logstash、Kibana和Beats等工具有大致的了解。
读过上述内容之后,如果对某些内容产生了兴趣,那么这本书就是适合的。希望读者在读完整本书之后,会喜欢它。
本书主要内容
第1章先介绍了Apache Lucene的工作方式,再介绍Elasticsearch 5.x。主要关注基本概念以及Elasticsearch在从1.x到5.x的演进过程中发生的重要功能变化。
第2章讲解新的默认评分算法BM25,以及它与之前的TF-IDF算法相比的优点。另外还讲解了Elasticsearch的各种功能,如查询改写、查询模板、查询模块的变化,以及在特定场景下可以选择的不同查询方法,等等。
第3章讲述了多匹配控制、二次评分、函数评分查询等查询相关功能。这一章也包括Elasticsearch的脚本模块相关内容。
第4章讨论了在Elasticsearch中进行数据建模的不同方法,以及在真实场景中如何用parent-child关系和嵌套数据类型来处理文档之间的关系。这一章还进一步讨论了用于数据分析的Elasticsearch聚合模块。
第5章关注通过查询建议器(suggester)提升用户搜索体验的话题,它可以改正查询语句中的拼写错误,提供高效的自动补齐功能。本章内容还包括如何提高查询相关性,如何使用同义词进行搜索等。
第6章的主要内容包括选择正确的分片数和副本数、路由是怎么工作的、分片分配是怎么工作的、如何影响分片行为等。本章还讨论了查询执行偏好是什么,以及它是怎样影响查询执行的。
第7章讲述如何更改Apache Lucene的评分机制,以及如何选择备用的评分算法。本章还包括准实时搜索、索引和事务日志的使用,理解索引的段合并机制,再基于Elasticsearch 5.x的删除合并策略细节,就可以根据场景来进行调优了。在本章的最后,还可以了解IO节流(IO Throttling)和Elasticsearch的缓存机制。
第8章关注与管理Elasticsearch相关的内容。其中介绍了什么是发现模块、网关模块和恢复模块,并讲解了如何配置它们,以及为什么值得如此大费周章地配置它们。本章还介绍了什么是Cat API、如何备份数据并恢复到不同云服务上(亚马逊AWS、微软Azure等)。
第9章讲述了Elasticsearch 5的最新特性——ingest节点,用它可以先对数据进行预处理,再在Elasticsearch中生成索引。本章也讲到了联盟搜索使用部落节点在不同的集群之间完成搜索的工作原理。
第10章讨论在不同的负载下如何提升性能、扩展生产集群的正确方法、垃圾回收原理、热点线程问题等以及如何应对它们,并进一步讨论了查询分析和查询基准测试。本章最后针对高查询量和高索引吞吐率这些不同场景,给出了一些Elasticsearch集群的调优建议。
第11章详细地演示和讲解了如何开发自己的REST操作插件和语言分析插件,以及Elasticsearch插件的开发方法。
第12章介绍了Elastic Stack 5.0的各个组件,包括Elasticsearch、Logstash、Kibana和Beats等。
阅读本书的必备资源
本书基于Elasticsearch 5.0.x写成,所有范例代码都可以在该版本下正常运行。除此之外,还需要curl或者一个与curl类似的可以发送HTTP请求的命令行工具,curl在绝大多数操作系统上都可以使用。请注意,本书中的所有例子都使用了curl。如果想换用其他工具,请注意对请求进行正确的格式转换,以保证选择的工具可以正确地解析请求。
另外,如果想要成功运行第11章中的例子,需要在电脑上安装1.8.0_73版本或以上的JDK,并需要一个可以开发代码的编辑器,比如Eclipse之类的Java IDE。本书使用Apache Maven来构建代码和管理依赖项。
本书最后一章基于Elastic Stack 5.0.0写成,因此要准备好Logstash、Kibana和Metricbeat,并要注意保证版本兼容。
本书的目标读者
本书的目标读者是那些对Elasticsearch的基本概念已经熟悉,还想对这个强大的搜索服务器有进一步了解的Elasticsearch用户和发烧友。书中也包括Apache Lucene和Elasticsearch的工作原理,以及Elasticsearch从1.x到5.x的演进过程。除此之外,想了解如何改进查询相关性、如何自己开发插件来扩展Elasticsearch功能的读者,也可以从中受益。
如果刚刚接触Elasticsearch,对查询和索引等基本概念还不熟悉,阅读本书可能会有些吃力,因为大多数章节都假设读者已经具备了相关背景知识。
约定
在本书中可以看到不同字体的文字,它们是用来表示不同信息的。下面是一些例子,用来解释各种不同的字体各自代表什么意思。
下面是一段代码:

如果希望读者特别留意代码中的某些部分,相关内容会以粗体显示:

所有命令行的输入或输出都用下面的字体表示:

这个符号表示警告或者重要提示。
这个符号表示提示或者小窍门。
下载示例代码及彩色图片
本书的示例代码及所有截图,可以从http://www.packtpub.com通过个人账号下载,也可以访问华章图书官网http://www.hzbook.com,通过注册并登录个人账号下载。

上架指导

计算机\软件工程

封底文字

Elasticsearch是一个开源的搜索和分析引擎,具有现代、快速、分布式、可扩展、容错等优点。Elasticsearch借助了Apache Lucene的能力,让你拥有更强的把控力,可以索引海量数据,并进行搜索。
本书先简单回顾基本知识,然后详细讲述Elasticsearch的中级和高级功能,比如查询、索引、搜索和修改数据。此外,还介绍许多高级概念,包括聚合、索引控制、分片、复制和集群等。
本书也会介绍Elasticsearch的监控和管理模块,包括备份和恢复。你将了解在特定的场景下,如何扩展Elasticsearch集群并提升它的性能。书中还会演示如何在Elasticsearch中创建分析插件。

通过阅读本书,你将学到:
理解Apache Lucene和Elasticsearch 5的设计与架构。
使用和配置Apache Lucene 6的默认文本评分机制。
在用Elasticsearch处理关系型数据时如何避免遇到陷阱。
如何根据不同的用例选择合适的查询,并使用脚本模块,包括新的默认脚本语言Painless。
探索扩展生产集群的正确方法,提升Elasticsearch的性能。
管理Elasticsearch的搜索、索引和聚合特性。
开发自己的Elasticsearch插件,扩展Elasticsearch的功能。

作者简介

(印度)波哈维·荻西特(Bharvi Dixit)著:波哈维·荻西特(Bharvi Dixit) 是一位在搜索服务器、NoSQL数据库和云服务等多个领域有着丰富经验的IT专家,目前就职于Sentieo——一个总部位于美国的金融数据和股权研究平台,负责该公司横跨数百台服务器的整体平台和架构建设。他还在Sentieo的搜索和数据团队中扮演着重要角色。他感兴趣的领域包括搜索工程、数据分析和分布式计算等。

译者序

关于本书的主要内容介绍,作者已经在前言中进行了详细介绍,应该足以让读者非常全面地了解这本书。译者也绞尽脑汁地想洋洋洒洒一番,却总怕有画蛇添足之嫌,所以不如干脆凝成一句话:本书适合Elasticsearch的中高级读者阅读,他们可以从设计原理、部署调优、高级特性、扩展开发等方面进行进一步的学习。
译者默默耕耘于数据技术的广袤土地,忽然抬头仰望星空,深感韶华易逝,总觉得应该有些东西可以分享给大家,或者换种方式为这奔涌向前的时代多做一点贡献。幸得贵友推荐,机械工业出版社愿意给予机会,让我可以开始第一次尝试。
此次翻译历时约半年,中间经历反复断续最终得以全部完成。对于这本书的翻译,在不偏离原文内容的原则下,译者尽量使语句通顺、流畅。受水平和经验所限,不足之处在所难免,还请读者多多包涵并不吝赐教。本版的许多内容借鉴了前一版中文译作,在此要向前一版的所有译者表达衷心的感谢。
在此还要对我的家人表达感谢,感谢他们的理解与默默支持。孩子们学业繁重,也期盼能多出去玩乐,却常常只能一起相伴于青灯苦影。只好安慰自己说,我们是在分头努力吧!
最后,感谢Elastic提供的这个强大的搜索服务器,希望它也能越来越好,不断进步!

图书目录

译者序
前言
致谢
作者简介
审阅者简介
第1章 回顾Elasticsearch与演进历史 1
1.1 Apache Lucene简介 1
1.1.1 更深入地了解Lucene索引 2
1.1.2 Elasticsearch概览 7
1.2 Elasticsearch 5.x介绍 8
1.2.1 Elasticsearch新特性简介 9
1.2.2 Elasticsearch的演进 10
1.2.3 2.x到5.x的变化 14
1.3 小结 16
第2章 查询DSL进阶 17
2.1 Lucene的新默认文本评分机制——BM25 17
2.1.1 理解精确率与召回率 18
2.1.2 回顾TF-IDF 18
2.1.3 BM25与TF-IDF有什么不同 21
2.2 查询DSL重构 22
2.3 为任务选择合适的查询 22
2.3.1 查询方式分类 22
2.3.2 使用示例 27
2.3.3 查询DSL的其他重要变化 36
2.4 查询改写 37
2.4.1 前缀查询示例 37
2.4.2 回到Apache Lucene 39
2.4.3 查询改写的属性 40
2.5 查询模板 43
2.5.1 引入查询模板 43
2.5.2 Mustache模板引擎 45
2.6 小结 49
第3章 不只是文本搜索 50
3.1 多匹配控制 50
3.2 多匹配类型 51
3.2.1 最佳字段匹配 51
3.2.2 跨字段匹配 54
3.2.3 最多字段匹配 55
3.2.4 短语匹配 56
3.2.5 带前缀的短语匹配 56
3.3 用函数得分查询控制分数 57
3.4 函数得分查询下的内嵌函数 58
3.4.1 weight函数 58
3.4.2 字段值因子函数 59
3.4.3 脚本评分函数 60
3.4.4 衰变函数——linear、exp和gauss 60
3.5 查询二次评分 61
3.6 二次评分查询的结构 62
3.7 Elasticsearch脚本 66
3.7.1 语法 66
3.7.2 Elasticsearch各版本中脚本的变化 66
3.8 新的默认脚本语言Painless 67
3.8.1 用Painless写脚本 67
3.8.2 示例 69
3.8.3 用脚本为结果排序 71
3.8.4 按多个字段排序 72
3.9 Lucene表达式 73
3.9.1 基础知识 73
3.9.2 一个例子 73
3.10 小结 75
第4章 数据建模与分析 76
4.1 Elasticsearch中的数据建模方法 76
4.2 管理Elasticsearch中的关系型数据 77
4.2.1 对象类型 77
4.2.2 嵌套文档 80
4.2.3 父子关系 82
4.2.4 其他可选方案 84
4.2.5 数据反范式的例子 84
4.3 用聚合做数据分析 85
4.3.1 Elasticsearch 5.0的快速聚合 85
4.3.2 重温聚合 86
4.3.3 一类新的聚合:矩阵聚合 93
4.4 小结 96
第5章 改善用户搜索体验 97
5.1 改正用户拼写错误 97
5.1.1 测试数据 98
5.1.2 深入技术细节 99
5.2 suggester 99
5.2.1 在_search端点下使用suggester 99
5.2.2 term suggester 103
5.2.3 phrase suggester 105
5.2.4 completion suggester 113
5.3 实现自己的自动完成功能 117
5.4 处理同义词 120
5.4.1 为同义词搜索准备settings 120
5.4.2 格式化同义词 121
5.4.3 同义词扩展与收缩 122
5.5 小结 123
第6章 分布式索引架构 125
6.1 配置示例的多节点集群 125
6.2 选择合适数量的分片和副本 127
6.2.1 分片和预分配 127
6.2.2 预分配的正面例子 128
6.2.3 多分片与多索引 128
6.3 路由 129
6.3.1 分片和数据 129
6.3.2 测试路由功能 130
6.3.3 在索引过程中使用路由 132
6.3.4 路由实战 132
6.3.5 查询 134
6.3.6 别名 136
6.3.7 多值路由 137
6.4 分片分配控制 137
6.4.1 部署意识 138
6.4.2 确定每个节点允许的总分片数 142
6.4.3 确定每台物理服务器允许的总分片数 143
6.5 查询执行偏好 146
6.5.1 preference参数 146
6.5.2 使用查询执行偏好的例子 148
6.6 将数据切分到多个路径中 148
6.7 索引与类型——创建索引的改进方法 148
6.8 小结 149
第7章 底层索引控制 150
7.1 改变Apache Lucene的评分方式 150
7.2 可用的相似度模型 151
7.3 为每个字段配置相似度模型 151
7.4 相似度模型配置 152
7.5 选择默认的相似度模型 153
7.6 选择合适的目录实现——store模块 156
7.7 存储类型 156
7.8 准实时、提交、更新及事务日志 158
7.8.1 索引更新及更新提交 159
7.8.2 更改默认的刷新时间 159
7.8.3 事务日志 160
7.8.4 实时读取 161
7.9 控制段合并 162
7.9.1 Elasticsearch合并策略的变化 163
7.9.2 配置tiered合并策略 163
7.9.3 合并调度 164
7.9.4 强制合并 165
7.10 理解Elasticsearch缓存 166
7.10.1 节点查询缓存 166
7.10.2 分片查询缓存 166
7.10.3 字段数据缓存 168
7.10.4 使用circuit breaker 168
7.11 小结 169
第8章 管理Elasticsearch 170
8.1 Elasticsearch的节点类型 170
8.1.1 数据节点 171
8.1.2 主节点 171
8.1.3 Ingest节点 171
8.1.4 部落节点 172
8.1.5 协调节点/客户端节点 172
8.2 发现和恢复模块 172
8.2.1 发现模块的配置 173
8.2.2 网关和恢复模块的配置 177
8.2.3 索引恢复API 179
8.3 使用对人类友好的Cat API 182
8.3.1 Cap API的基础知识 183
8.3.2 使用Cat API 184
8.4 备份 186
8.4.1 快照API 187
8.4.2 在文件系统中保存备份 187
8.4.3 在云中保存备份 189
8.5 快照恢复 193
8.6 小结 196
第9章 数据转换与联盟搜索 197
9.1 用ingest节点在Elasticsearch里对数据进行预处理 197
9.1.1 使用ingest管道 198
9.1.2 处理管道中的错误 202
9.1.3 使用ingest处理器 204
9.2 联盟搜索 208
9.2.1 测试集群 208
9.2.2 建立部落节点 209
9.2.3 通过部落节点读取数据 211
9.2.4 主节点级别的读操作 212
9.2.5 通过部落节点写入数据 213
9.2.6 主节点级别的写操作 213
9.2.7 处理索引冲突 213
9.2.8 屏蔽写操作 215
9.3 小结 215
第10章 提升性能 216
10.1 查询验证与分析器 216
10.1.1 在执行前就验证代价大的查询 217
10.1.2 获得详细查询执行报告的查询分析器 219
10.1.3 关于查询分析用途的思考 221
10.2 热点线程 222
10.2.1 热点线程的使用说明 222
10.2.2 热点线程API的响应 223
10.3 扩展Elasticsearch集群 224
10.3.1 垂直扩展 224
10.3.2 水平扩展 225
10.3.3 在高负载的场景下使用Elasticsearch 231
10.4 用shrink和rollover API高效管理基于时间的索引 242
10.4.1 shrink API 243
10.4.2  rollover API 244
10.5 小结 246
第11章 开发Elastisearch插件 247
11.1 创建Apache Maven的项目架构 247
11.1.1 了解基础知识 248
11.1.2 Maven Java项目的结构 248
11.2 创建自定义REST行为插件 252
11.2.1 设定 252
11.2.2 实现细节 252
11.2.3 测试阶段 256
11.2.4 检验REST行为插件是否工作正常 257
11.3 创建自定义分析插件 258
11.3.1 实现细节 258
11.3.2 测试自定义分析插件 262
11.4 小结 264
第12章 介绍Elastic Stack 5.0 265
12.1 Elastic Stack 5.0简介 265
12.2 介绍Logstash、Beats和Kibana 266
12.2.1 使用Logstash 266
12.2.2 引入Beats作为数据传输器 271
12.2.3 使用Kibana 273
12.3 小结 282

教学资源推荐
作者: (美)Harold Abelson,Gerald Jay Sussman,Julie Sussman
作者: John Lewis Peter J. DePasquale;Joseph Chase;
作者: [美]沙伦·比奥卡·扎卡沃(Sharon Biocca Zakhour) 索娅·坎南(Sowmya Kannan) 雷蒙德·盖拉多(Raymond Gallardo) 著
参考读物推荐
作者: 康莉 李宽 等编著
作者: [美] 詹森·贝尔(Jason Bell)著
作者: 董超 胡炽维 编著