深入理解Elasticsearch(原书第3版)
书籍作者:[印度] 波哈维·荻西特 |
ISBN:9787111643074 |
书籍语言:简体中文 |
连载状态:全集 |
电子书格式:pdf,txt,epub,mobi,azw3 |
下载次数:8084 |
创建日期:2021-02-14 |
发布日期:2021-02-14 |
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板 |
内容简介
本书在回顾Elasticsearch基础知识的同时,介绍了*新版本Elasticsearch 5的新功能,并对其中级和高级的功能(如查询、索引、搜索和修改数据)进行了详细说明。本书还将探索聚集、指标控制、分片、复制和聚类等概念,并通过实例展示监控管理模块、创建分析插件等。通过本书,读者可以对Elasticsearch 5有一个全面的认识并掌握其性能。
作者简介
波哈维·荻西特(Bharvi Dixit) 是一位在搜索服务器、NoSQL数据库和云服务等多个领域有着丰富经验的IT专家,目前就职于Sentieo——一个总部位于美国的金融数据和股权研究平台,负责该公司横跨数百台服务器的整体平台和架构建设。他还在Sentieo的搜索和数据团队中扮演着重要角色。他感兴趣的领域包括搜索工程、数据分析和分布式计算等。
编辑推荐
Elasticsearch是一个开源的搜索和分析引擎,具有现代、快速、分布式、可扩展、容错等优点。Elasticsearch借助了Apache Lucene的能力,让你拥有更强的把控力,可以索引海量数据,并进行搜索。
本书先简单回顾基本知识,然后详细讲述Elasticsearch的中级和高级功能,比如查询、索引、搜索和修改数据。此外,还介绍许多高级概念,包括聚合、索引控制、分片、复制和集群等。
本书也会介绍Elasticsearch的监控和管理模块,包括备份和恢复。你将了解在特定的场景下,如何扩展Elasticsearch集群并提升它的性能。书中还会演示如何在Elasticsearch中创建分析插件。
通过阅读本书,你将学到:
?理解Apache Lucene和Elasticsearch 5的设计与架构。
?使用和配置Apache Lucene 6的默认文本评分机制。
?在用Elasticsearch处理关系型数据时如何避免遇到陷阱。
?如何根据不同的用例选择合适的查询,并使用脚本模块,包括新的默认脚本语言Painless。
?探索扩展生产集群的正确方法,提升Elasticsearch的性能。
?管理Elasticsearch的搜索、索引和聚合特性。
?开发自己的Elasticsearch插件,扩展Elasticsearch的功能。
前言
欢迎来到Elasticsearch的世界并阅读本书。在阅读的过程中,我们将带你了解与Elasticsearch紧密相关的各种话题。但请注意,本书的目标读者并不是初学者,Elasticsearch从1x演进到5x已经有了非常大的变化,因此本书在上一版的基础上补充了很多新内容。
本书将探讨与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 5x。主要关注基本概念以及Elasticsearch在从1x到5x的演进过程中发生的重要功能变化。
第2章讲解新的默认评分算法BM25,以及它与之前的TF-IDF算法相比的优点。另外还讲解了Elasticsearch的各种功能,如查询改写、查询模板、查询模块的变化,以及在特定场景下可以选择的不同查询方法,等等。
第3章讲述了多匹配控制、二次评分、函数评分查询等查询相关功能。这一章也包括Elasticsearch的脚本模块相关内容。
第4章讨论了在Elasticsearch中进行数据建模的不同方法,以及在真实场景中如何用parent-child关系和嵌套数据类型来处理文档之间的关系。这一章还进一步讨论了用于数据分析的Elasticsearch聚合模块。
第5章关注通过查询建议器(suggester)提升用户搜索体验的话题,它可以改正查询语句中的拼写错误,提供高效的自动补齐功能。本章内容还包括如何提高查询相关性,如何使用同义词进行搜索等。
第6章的主要内容包括选择正确的分片数和副本数、路由是怎么工作的、分片分配是怎么工作的、如何影响分片行为等。本章还讨论了查询执行偏好是什么,以及它是怎样影响查询执行的。
第7章讲述如何更改Apache Lucene的评分机制,以及如何选择备用的评分算法。本章还包括准实时搜索、索引和事务日志的使用,理解索引的段合并机制,再基于Elasticsearch 5x的删除合并策略细节,就可以根据场景来进行调优了。在本章的最后,还可以了解IO节流(IO Throttling)和Elasticsearch的缓存机制。
第8章关注与管理Elasticsearch相关的内容。其中介绍了什么是发现模块、网关模块和恢复模块,并讲解了如何配置它们,以及为什么值得如此大费周章地配置它们。本章还介绍了什么是Cat API、如何备份数据并恢复到不同云服务上(亚马逊AWS、微软Azure等)。
第9章讲述了Elasticsearch 5的最新特性——ingest节点,用它可以先对数据进行预处理,再在Elasticsearch中生成索引。本章也讲到了联盟搜索使用部落节点在不同的集群之间完成搜索的工作原理。
第10章讨论在不同的负载下如何提升性能、扩展生产集群的正确方法、垃圾回收原理、热点线程问题等以及如何应对它们,并进一步讨论了查询分析和查询基准测试。本章最后针对高查询量和高索引吞吐率这些不同场景,给出了一些Elasticsearch集群的调优建议。
第11章详细地演示和讲解了如何开发自己的REST操作插件和语言分析插件,以及Elasticsearch插件的开发方法。
第12章介绍了Elastic Stack 50的各个组件,包括Elasticsearch、Logstash、Kibana和Beats等。
阅读本书的必备资源
本书基于Elasticsearch 50x写成,所有范例代码都可以在该版本下正常运行。除此之外,还需要curl或者一个与curl类似的可以发送HTTP请求的命令行工具,curl在绝大多数操作系统上都可以使用。请注意,本书中的所有例子都使用了curl。如果想换用其他工具,请注意对请求进行正确的格式转换,以保证选择的工具可以正确地解析请求。
另外,如果想要成功运行第11章中的例子,需要在电脑上安装180_73版本或以上的JDK,并需要一个可以开发代码的编辑器,比如Eclipse之类的Java IDE。本书使用Apache Maven来构建代码和管理依赖项。
本书最后一章基于Elastic Stack 500写成,因此要准备好Logstash、Kibana和Metricbeat,并要注意保证版本兼容。
本书的目标读者
本书的目标读者是那些对Elasticsearch的基本概念已经熟悉,还想对这个强大的搜索服务器有进一步了解的Elasticsearch用户和发烧友。书中也包括Apache Lucene和Elasticsearch的工作原理,以及Elasticsearch从1x到5x的演进过程。除此之外,想了解如何改进查询相关性、如何自己开发插件来扩展Elasticsearch功能的读者,也可以从中受益。
如果刚刚接触Elasticsearch,对查询和索引等基本概念还不熟悉,阅读本书可能会有些吃力,因为大多数章节都假设读者已经具备了相关背景知识。
约定
在本书中可以看到不同字体的文字,它们是用来表示不同信息的。下面是一些例子,用来解释各种不同的字体各自代表什么意思。
下面是一段代码:
如果希望读者特别留意代码中的某些部分,相关内容会以粗体显示:
所有命令行的输入或输出都用下面的字体表示:
这个符号表示警告或者重要提示。
这个符号表示提示或者小窍门。
下载示例代码及彩色图片
本书的示例代码及所有截图,可以从http://wwwpacktpubcom通过个人账号下载,也可以访问华章图书官网http://wwwhzbookcom,通过注册并登录个人账号下载。
目录
译者序
前言
致谢
作者简介
审阅者简介
第1章 回顾Elasticsearch与演进历史 1
11 Apache Lucene简介 1
111 更深入地了解Lucene索引 2
112 Elasticsearch概览 7
12 Elasticsearch 5x介绍 8
121 Elasticsearch新特性简介 9
122 Elasticsearch的演进 10
123 2x到5x的变化 14
13 小结 16
第2章 查询DSL进阶 17
21 Lucene的新默认文本评分机制——BM25 17
211 理解精确率与召回率 18
212 回顾TF-IDF 18
213 BM25与TF-IDF有什么不同 21
22 查询DSL重构 22
23 为任务选择合适的查询 22
231 查询方式分类 22
232 使用示例 27
233 查询DSL的其他重要变化 36
24 查询改写 37
241 前缀查询示例 37
242 回到Apache Lucene 39
243 查询改写的属性 40
25 查询模板 43
251 引入查询模板 43
252 Mustache模板引擎 45
26 小结 49
第3章 不只是文本搜索 50
31 多匹配控制 50
32 多匹配类型 51
321 最佳字段匹配 51
322 跨字段匹配 54
323 最多字段匹配 55
324 短语匹配 56
325 带前缀的短语匹配 56
33 用函数得分查询控制分数 57
34 函数得分查询下的内嵌函数 58
341 weight函数 58
342 字段值因子函数 59
343 脚本评分函数 60
344 衰变函数——linear、exp和gauss 60
35 查询二次评分 61
36 二次评分查询的结构 62
37 Elasticsearch脚本 66
371 语法 66
372 Elasticsearch各版本中脚本的变化 66
38 新的默认脚本语言Painless 67
381 用Painless写脚本 67
382 示例 69
383 用脚本为结果排序 71
384 按多个字段排序 72
39 Lucene表达式 73
391 基础知识 73
392 一个例子 73
310 小结 75
第4章 数据建模与分析 76
41 Elasticsearch中的数据建模方法 76
42 管理Elasticsearch中的关系型数据 77
421 对象类型 77
422 嵌套文档 80
423 父子关系 82
424 其他可选方案 84
425 数据反范式的例子 84
43 用聚合做数据分析 85
431 Elasticsearch 50的快速聚合 85
432 重温聚合 86
433 一类新的聚合:矩阵聚合 93
44 小结 96
第5章 改善用户搜索体验 97
51 改正用户拼写错误 97
511 测试数据 98
512 深入技术细节 99
52 suggester 99
521 在_search端点下使用suggester 99
522 term suggester 103
523 phrase suggester 105
524 completion suggester 113
53 实现自己的自动完成功能 117
54 处理同义词 120
541 为同义词搜索准备settings 120
542 格式化同义词 121
543 同义词扩展与收缩 122
55 小结 123
第6章 分布式索引架构 125
61 配置示例的多节点集群 125
62 选择合适数量的分片和副本 127
621 分片和预分配 127
622 预分配的正面例子 128
623 多分片与多索引 128
63 路由 129
631 分片和数据 129
632 测试路由功能 130
633 在索引过程中使用路由 132
634 路由实战 132
635 查询 134
636 别名 136
637 多值路由 137
64 分片分配控制 137
641 部署意识 138
642 确定每个节点允许的总分片数 142
643 确定每台物理服务器允许的总分片数 143
65 查询执行偏好 146
651 preference参数 146
652 使用查询执行偏好的例子 148
66 将数据切分到多个路径中 148
67 索引与类型——创建索引的改进方法 148
68 小结 149
第7章 底层索引控制 150
71 改变Apache Lucene的评分方式 150
72 可用的相似度模型 151
73 为每个字段配置相似度模型 151
74 相似度模型配置 152
75 选择默认的相似度模型 153
76 选择合适的目录实现——store模块 156
77 存储类型 156
78 准实时、提交、更新及事务日志 158
781 索引更新及更新提交 159
782 更改默认的刷新时间 159
783 事务日志 160
784 实时读取 161
79 控制段合并 162
791 Elasticsearch合并策略的变化 163
792 配置tiered合并策略 163
793 合并调度 164
794 强制合并 165
710 理解Elasticsearch缓存 166
7101 节点查询缓存 166
7102 分片查询缓存 166
7103 字段数据缓存 168
7104 使用circuit breaker 168
711 小结 169
第8章 管理Elasticsearch 170
81 Elasticsearch的节点类型 170
811 数据节点 171
812 主节点 171
813 Ingest节点 171
814 部落节点 172
815 协调节点/客户端节点 172
82 发现和恢复模块 172
821 发现模块的配置 173
822 网关和恢复模块的配置 177
823 索引恢复API 179
83 使用对人类友好的Cat API 182
831 Cap API的基础知识 183
832 使用Cat API 184
84 备份 18