首页>参考读物>计算机科学与技术>综合

深入理解Elasticsearch(原书第2版)
作者 : [美]拉斐尔?酷奇(Rafal Kuc) 马雷克?罗戈任斯基(Marek Rogoziński) 著
译者 : 张世武 余洪淼 商旦 译
出版日期 : 2017-05-20
ISBN : 978-7-111-56825-4
定价 : 79.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 320
开本 : 16
原书名 : Mastering Elasticsearch,Second Edition
原出版社: Packt Publishing Ltd.
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

图书前言

欢迎来到Elasticsearch的世界并阅读本书第2版。通过阅读本书,我们将带领你接触与Elasticsearch紧密相关的各种话题。请注意,本书不是为初学者写的。笔者将本书作为《Elasticsearch Server, Second Edition》的续作和姊妹篇。相对于《Elasticsearch Server》,本书涵盖了很多新知识,不过你偶尔也可以在本书中发现一些引自《Elasticsearch Server》的内容。
本书将探讨与Elasticsearch和Lucene相关的多个不同主题。首先,我们以介绍Lucene和Elasticsearch的基本概念作为开始,带领读者认识Elasticsearch提供的众多查询方式。在这里,将涉及和查询相关的不同主题,比如结果过滤以及如何为特定场景选择合适的查询方式。显然,Elasticsearch不仅仅只有查询功能。因此,本书还将介绍Elasticsearch新加入的聚集功能,以及众多能够赋予被索引数据意义的特性,并设法提供更佳的用户查询体验。
对大多数用户来说,查询和数据分析是Elasticsearch最吸引人的部分,不过这些还不是我们想要探索的全部内容。因此,本书在涉及索引架构时还会试图跟读者探讨一些额外话题,比如如何选择合适的分片数和副本数,如何调整分片分配行为等。当谈论Elasticsearch和Lucene之间的关系时,我们还将介绍不同的打分算法、算法之间的差异、如何选择合适的存储机制,以及为什么需要做此选择。
最后,我们还将触及Elasticsearch的管理功能,将探讨发现和恢复模块,以及对人类友好的Cat API。Cat API可以帮助我们快速获取相关的运维信息,它的返回数据组织成一种大多数人都易于阅读的格式,无需进行JSON解析。我们还将认识和使用部落节点,它能够为我们提供在多个节点间联合查询的能力。
因为本书的书名,我们无法忽略与性能相关的话题,所以我们决定用整整一章来探讨性能。我们谈论了文档取值及其相关改进,还介绍了垃圾回收器的工作方式,以及在垃圾回收器未能如我们期望般工作时可以做些什么。最后,探讨了如何扩展Elasticsearch以应对高索引量和查询量的场景。
和本书第1版一样,我们决定以开发Elasticsearch插件的话题作为本书结尾。我们将展示如何构建Apache Maven项目,并开发两个不同类型的插件—自定义REST操作插件和自定义分析插件。
假如你在读完某些主题后对其产生浓厚的兴趣,那么这本书就是适合你的。希望你在读完后能够喜欢这本书。
本书主要内容
第1章先介绍Apache Lucene的工作方式,再介绍Elasticsearch的基本概念,并演示Elasticsearch内部是如何工作的。
第2章描述Lucene评分过程,为什么要进行查询改写,什么是查询模板以及如何使用查询模板。除此之外,还介绍了过滤器的使用,以及如何为特定场景选择合适的查询方式。
第3章描述了查询二次评分、多匹配控制,并介绍了用于做查询分析的各种聚合类型。关键词项聚合和最优词项聚合可以根据所含内容片段对文档进行归类。除此之外,还介绍了Elasticsearch的parent-child文档关系处理,并提供了在Elasticsearch中使用脚本的相关知识。
第4章覆盖了有关用户体验提升的相关话题。本章介绍了查询建议(suggester),它能帮助修正查询中的拼写错误并构建高效的自动完成(autocomplete)机制。除此之外,通过实际的案例展示如何通过使用不同查询类型和Elasticsearch的其他功能来提高查询相关性。
第5章介绍了以下技术:如何选择合适的分片及副本数,路由是如何工作的,索引分片机制是如何工作的以及如何影响分片行为。同时介绍了什么是查询执行偏好,以及它是如何影响查询执行的。
第6章描述如何修改Lucene评分以及如何选择备用的评分算法。本章也介绍了Elasticsearch的准实时搜索和索引,事务日志的使用,理解索引的段合并,以及如何调整段合并来适应应用场景。在本章最后,还将介绍Elasticsearch的缓存机制和请求打断器,以避免出现内存用尽的故障。
第7章介绍了什么是发现、网关、恢复模块,如何配置这些模块,以及有哪些令人心烦的疑难点。还介绍了什么是Cat API,如何把数据备份到各种云服务上(比如亚马逊的AWS和微软的Azure),以及如何从云服务上恢复数据。最后还介绍了如何使用部落节点进行联盟搜索。
第8章覆盖了与Elasticsearch性能相关的各种主题,从使用文档取值来优化字段数据缓存的内存使用,到JVM垃圾回收器的工作原理,再到查询基准测试,最后到如何扩展Elasticsearch以适应更高的索引量和查询量场景。
第9章通过演示如何开发你自己的REST操作插件和查询语言分析插件来介绍Elasticsearch的插件开发。
阅读本书的必备资源
本书写作时采用了Elasticsearch的1.4.x版本,所有的范例代码应该能在该版本下正常运行。除此之外,读者需要一个能发送HTTP请求的命令行工具,例如curl,该工具在绝大多数操作系统上是可用的。请记住,本书的所有范例都使用了curl。如果读者想使用其他工具,请注意检查请求的格式,以保证你所选择的工具能正确解析它。
除此之外,为了运行第9章的范例,需要读者的机器上已安装了JDK,并且需要一个编辑器来开发相关代码(或者类似Eclipse的Java IDE)。另外,还要求使用Apache Maven进行代码的管理与构建。
本书的目标读者
本书的目标读者是那些对Elasticsearch基本概念已经很熟悉但是又想深入了解其本身,同时也对Apache Lucene、JVM垃圾收集感兴趣的Elasticsearch用户和发烧友。除此之外,想了解如何改进查询相关性、如何使用Elasticsearch Java API、如何编写自定义插件的读者,也会发现本书的趣味性和实用性。
如果你是Elasticsearch的初学者,连查询和索引这些基本概念都不熟悉,那么你会发现本书的绝大多数章节难以理解,因为这些内容假定读者已经有相关背景知识。如果是这种情况,建议参考Packt出版社出版的另一本关于Elasticsearch的图书—《Elasticsearch Server, Second Edition》。
读者反馈
欢迎读者的任何反馈。请让我们知道你对本书的看法—喜欢或者不喜欢哪些内容。读者的反馈对我们开发一些大众能够受益的课题是非常重要的。
一般性的反馈可直接发送e-mail至 feedback@packtpub.com ,请在邮件标题中提及相关书名。
如果你觉得自己在某个话题上有专长,并有兴趣撰写一本书或做一些贡献,请浏览www.packtpub.com/authors 上的作者指南。
客户支持
现在,你已经成为Packt图书尊贵的读者了。我们提供了各种服务来帮助你从本次购书行为中获得最大价值。
范例代码下载
如果读者通过http://www.packtpub.com 账号购买了Packt图书,可直接在本网站下载范例代码。如果读者在其他地方购买了Packt图书,可登录http://www.packtpub.com/support ,并注册账号,我们将通过e-mail发送代码给你。
勘误
尽管我们已经尽了最大努力来保障图书内容的准确性,错误还是难以避免的。如果读者发现了任何错误,不论是文字部分还是代码部分,请报告我们,我们将不胜感激。你的这种行为能帮助其他读者免受误导,并能帮助我们提高图书后续版本的质量。发现任何错误,请登录http://www.packtpub.com/submit-errata,选择相应的书名,单击errata submissionform并在表单中输入错误的详细信息。一旦所提交的错误被确认,它会被上传至我们的网站,或者被添加到现有的勘误表里。可登录http://www.packtpub.com/support选择具体的书名,查看现有的勘误表。

上架指导

计算机\程序设计

作者简介

[美]拉斐尔?酷奇(Rafal Kuc) 马雷克?罗戈任斯基(Marek Rogoziński) 著:暂无相关简介

译者简介

张世武 余洪淼 商旦 译:暂无简介

译者序

随着互联网时代的来临,人类面临着前所未有的信息过载问题。为了方便人们从海量信息中快速精准地检索感兴趣的内容,Web搜索引擎应运而生。在互联网发展早期,数据量比较小,单机索引就能支撑起一个完整应用。在这个时期,Apache Lucene凭借其精巧的代码设计、优异的性能、丰富的查询接口,以及众多衍生搜索产品(如Apache Solr、Nutch等),在开源搜索领域大放异彩。随着互联网的发展,数据量快速膨胀,此时对搜索引擎提出了分布式、准实时、高容错、可扩展、易于交互等诸多进阶要求。基于Lucene的简单二次开发已经不能满足日常搜索需求,Elasticsearch的诞生很好地满足了上述大数据时代的搜索产品需求。
Elasticsearch是一款基于Apache Lucene的开源搜索引擎产品,最早发布于2010年。之后Elasticsearch的开发团队成立了专门的商业公司,继续对其进行开发并提供服务和技术支持。Elasticsearch具有开源、分布式、准实时、RESTFul、便于二次开发等特点,代码实现精巧,系统稳定可靠,已经被国内外众多知名组织和公司广泛采用。
本书内容丰富,不仅深入介绍了Apache Lucene的评分机制、查询DSL、底层索引控制,还详细介绍了Elasticsearch的分布式索引机制、用户体验的改善、系统管理及性能优化,以及自定义插件的开发。本书文笔优雅,辅以大量翔实的实例,能帮助读者快速提高Elasticsearch应用水平。需要提醒读者的是,本书的目标读者是Elasticsearch的中高级用户,如果读者对Elasticsearch的基础概念(如Mapping、Type)缺乏了解的话,建议先阅读作者另一本针对初学者的书《Elasticsearch Server》(目前已经出了第2版)。
相对于第1版,本书重新组织了多个章节的内容,删减了部分对读者来说意义不大的内容,如Java API的使用,突出了Elasticsearch使用过程中的进阶技能,比如查询优化、用户体验改善、Elasticsearch节点集群管理等。
本书译文经过精心组织,结合了译者对Elasticsearch的使用经验,并参考了IBM、微软、百度、腾讯等众多知名企业的业界专业人士的意见。本书翻译团队由拥有丰富Elasticsearch实践经验的搜索算法专家、架构师和开发者组成。其中,张世武负责第3、5、6章的翻译和校对工作,余洪淼负责第7、8、9章的翻译和校对,商旦负责第1、2、4章的翻译及全书校对。在本书翻译过程中,翻译团队经过多次讨论、审校,力求翻译准确、优雅。由于本书涉及很多新概念,业界尚无统一术语,另外译者水平有限,难免会出现一些问题,欢迎广大读者及业内同行批评指正。
翻译团队的所有成员在精力和时间都很有限的情况下,能够四个月如一日,顶着日常工作和生活的压力,不计回报地通力合作,为一本书的翻译付出极大的热忱,实在难得。这里要感谢翻译团队家人们的理解和默默支持,让我们一路走到今天。
在本书的翻译过程中,译者张世武得到所在单位成都数联铭品科技有限公司(BBD)的大力支持。BBD是一家行业领先的金融大数据公司,Elasticsearch在BBD得到了广泛的应用。感谢曾途、尹康、丁国栋、宋开发、刘荀、田志伟、何宏靖等领导对本书出版给予的关怀与支持。技术部及兄弟部门同事提出了很多宝贵建议,感谢以下同事的支持:李想、王尧、丁明会、范东来、刘世林、赵龙、王振宇、何耀、刘兆强、金涛、黄光虎、范从俊、许尧、张伟、邢杰、丁永强、程柳航、何俊、唐国海、刘兴洋、苏印、刘俊杰、闫俊杰、张学锋、徐胜、吕司君、吴德文、邹俊、何正开、刘龙均、郭羽凌、吴勇、杨熹岑、曾昌强、秦德强、谭亚军、魏犇、席爱龄、沈思丞、田曲、陈珊、胡馨月、申秋艳、马小思、高翔、葛相宇、唐斌、苏柏铔、魏林玮、沈思成、韩远、夏阳、杨建蓉、孙健、蒲雪芹、何晓宁、薛双凯、张冬冬。
同样需要感谢机械工业出版社的编辑团队,感谢他们提供的这次翻译机会。尤其需要感谢张梦玲女士,没有她的督导和支持,本书很难如期翻译校对完毕。还要感谢出版社相关岗位的工作人员,离开他们的支持,本书也无法很快与读者见面。
再次感谢!

译者
2017年3月

图书目录

译者序
作者简介
评审者简介
前言
第1章 Elasticsearch简介 1
1.1 Apache Lucene简介 1
1.1.1 熟悉Lucene 2
1.1.2 Lucene的总体架构 2
1.1.3 分析数据 4
1.1.4 Lucene查询语言 5
1.2 何为Elasticsearch 8
1.2.1 Elasticsearch的基本概念 8
1.2.2 Elasticsearch架构背后的关键概念 10
1.2.3 Elasticsearch的工作流程 10
1.3 在线书店示例 14
1.4 小结 17
第2章 查询DSL进阶 18
2.1 Apache Lucene默认评分公式解释 18
2.1.1 何时文档被匹配上 19
2.1.2 TF/IDF评分公式 19
2.1.3 Elasticsearch如何看评分 21
2.1.4 一个例子 21
2.2 查询改写 24
2.2.1 前缀查询示例 24
2.2.2 回到Apache Lucene 26
2.2.3 查询改写的属性 28
2.3 查询模板 30
2.3.1 引入查询模板 31
2.3.2 Mustache模板引擎 33
2.3.3 把查询模板保存到文件 35
2.4 过滤器的使用及作用原理 36
2.4.1 过滤及查询相关性 36
2.4.2 过滤器的工作原理 40
2.4.3 性能考量 41
2.4.4 后置过滤和过滤查询 42
2.4.5 选择正确的过滤方式 44
2.5 选择正确的查询方式 45
2.5.1 查询方式分类 45
2.5.2 使用示例 50
2.6 小结 65
第3章 不只是文本搜索 66
3.1 查询二次评分 66
3.1.1 什么是查询二次评分 67
3.1.2 一个查询例子 67
3.1.3 二次评分查询的结构 67
3.1.4 二次评分参数 70
3.1.5 总结 70
3.2 多匹配控制 71
3.3 重要词项聚合 78
3.3.1 一个例子 79
3.3.2 选择重要词项 81
3.3.3 多值分析 81
3.3.4 额外的配置 84
3.3.5 使用限制 89
3.4 文档分组 89
3.4.1 top_hits聚合 90
3.4.2 一个例子 90
3.5 文档关系 95
3.5.1 对象类型 95
3.5.2 嵌套文档 98
3.5.3 parent-child关系 99
3.5.4 其他解决方案 102
3.6 Elasticsearch各版本中脚本的变化 102
3.6.1 脚本变迁 102
3.6.2 Groovy简单介绍 103
3.6.3 全文检索中的脚本 108
3.6.4 Lucene表达式 115
3.7 小结 118
第4章 改善用户搜索体验 119
4.1 改正用户拼写错误 119
4.1.1 测试数据 120
4.1.2 深入技术细节 121
4.1.3 suggester 121
4.2 改善查询相关性 142
4.2.1 数据 142
4.2.2 改善相关性的探索之旅 145
4.3 小结 157
第5章 分布式索引架构 159
5.1 选择合适的分片和副本数 159
5.1.1 分片和过度分配 160
5.1.2 一个过度分配的正面例子 161
5.1.3 多分片与多索引 161
5.1.4 副本 161
5.2 路由 162
5.2.1 分片和数据 162
5.2.2 测试路由功能 162
5.2.3 索引时使用路由 166
5.2.4 别名 169
5.2.5 多个路由值 169
5.3 调整默认分片的分配行为 170
5.3.1 部署意识 171
5.3.2 过滤 173
5.3.3 运行时更新分配策略 174
5.3.4 确定每个节点允许的总分片数 175
5.3.5 确定每个物理机器允许的总分片数 175
5.4 查询执行偏好 179
5.5 小结 181
第6章 底层索引控制 182
6.1 改变Apache Lucene的评分方式 182
6.1.1 可用的相似度模型 183
6.1.2 为每字段配置相似度模型 183
6.1.3 相似度模型配置 184
6.1.4 选择默认的相似度模型 185
6.2 选择适当的目录实现—store模块 188
6.3 准实时、提交、更新及事务日志 191
6.3.1 索引更新及更新提交 192
6.3.2 事务日志 193
6.3.3 准实时读取 194
6.4 控制索引合并 195
6.4.1 选择正确的合并策略 196
6.4.2 合并策略配置 197
6.4.3 调度 199
6.5 关于I/O调节 200
6.5.1 控制I/O节流 200
6.5.2 配置 200
6.6 理解Elasticsearch缓存 202
6.6.1 过滤器缓存 203
6.6.2 字段数据缓存 204
6.6.3 查询分片缓存 212
6.6.4 使用circuit breaker 213
6.6.5 清除缓存 214
6.7 小结 215
第7章 管理Elasticsearch 216
7.1 发现和恢复模块 216
7.1.1 发现模块的配置 217
7.1.2 主节点 218
7.1.3 网关和恢复模块的配置 223
7.1.4 索引恢复API 226
7.2 使用人类友好的Cat API 229
7.2.1 基础知识 230
7.2.2 使用Cat API 231
7.2.3 一些例子 232
7.3 备份 232
7.4 联盟搜索 236
7.4.1 测试用的集群 236
7.4.2 建立部落节点 237
7.4.3 通过部落节点读取数据 238
7.4.4 通过部落节点写入数据 239
7.4.5 处理索引冲突 240
7.4.6 屏蔽写操作 241
7.5 小结 242
第8章 提高性能 243
8.1 使用doc values来优化查询 243
8.1.1 字段缓存存在的问题 244
8.1.2 使用doc values的例子 245
8.2 了解垃圾回收器 247
8.2.1 Java内存 248
8.2.2 解决垃圾回收问题 249
8.2.3 在类UNIX系统上避免内存交换 254
8.3 对查询做基准测试 255
8.3.1 为基准测试配置集群 256
8.3.2 进行基准测试 256
8.3.3 控制运行中的基准测试 259
8.4 热点线程 261
8.4.1 热点线程的使用说明 261
8.4.2 热点线程API的响应 262
8.5 扩展Elasticsearch 263
8.5.1 垂直扩展 263
8.5.2 水平扩展 264
8.5.3 在高负载的场景下使用Elasticsearch 271
8.6 小结 283
第9章 开发Elasticsearch插件 284
9.1 创建Maven项目 284
9.2 了解基本知识 285
9.2.1 Maven Java项目的结构 285
9.2.2 POM的理念 285
9.2.3 执行构建过程 286
9.2.4 引入Maven装配插件 287
9.3 创建自定义REST行为 289
9.3.1 设定 289
9.3.2 实现细节 289
9.4 创建自定义分析插件 295
9.4.1 实现细节 295
9.4.2 测试自定义分析插件 302
9.5 小结 304

教学资源推荐
作者: 刘国忠 主编 吕勇 马牧燕 那云虓 参编
作者: 李龙澍 郑诚 等编著
作者: (美)Paul Ammann; Jeff Offutt 著
参考读物推荐
作者: 恽如伟 董浩 等编著
作者: 章小莉 王艳红 等