![581bdf307bd94a6a45b3659aebef4903f5954b64](https://i-blog.csdnimg.cn/blog_migrate/8b15bdc16c23bf0c7fa5281740ab771c.png)
前 言 Preface
欢迎来到ElasticSearch的世界。通过阅读本书,我们将带你接触与ElasticSearch紧密相关的各种话题。本书会从介绍Apache Lucene及ElasticSearch的基本概念开始。即使读者熟悉这些知识,简略的介绍也是很有必要的,掌握背景知识对于全面理解集群构建、索引文档、搜索这些操作背后到底发生了什么至关重要。
之后,读者将学习Lucene的评分过程是如何工作的,如何影响评分,以及如何让ElasticSearch选择不同的评分算法。本书也将介绍什么是查询重写以及进行查询重写的原因。除此之外,本书还将介绍如何修改查询来影响ElasticSearch的缓存功能以及如何最大限度地使用缓存。
接着你将学习索引控制的相关知识:如何通过设置不同的倒排表格式(posting format)来改变索引字段的写入模式;索引的段合并机制和段合并的重要性,以及如何调整段合并来适应应用场景;深入探讨索引分片(shard)的分配机制、路由机制,以及当数据量、查询量日渐增长时的应对策略。
当然本书也不会遗漏垃圾收集的相关内容,包括垃圾收集的工作原理、触发时间以及如何调整垃圾收集的行为。此外,本书也将涉及ElasticSearch状态诊断的介绍,例如,描述系统段合并状况,ElasticSearch在高级API背后是如何工作以及如何限制I/O操作的。然而,本书并不仅限于讨论ElasticSearch的底层机制,同时也涵盖了如何改进用户搜索体验,例如处理拼写检查,高效地输入自动提示以及如何改进查询等内容。
除了前面介绍的那些,本书还将指导读者熟悉ElasticSearch的Java API,并演示它的使用方法,其中不仅包含CRUD(增删查改)等基本功能,同时也包含集群、索引的维护与操作等高级功能。最后,读者将通过开发一个用于数据索引的自定义river插件,以及一个在检索期和索引期用于数据分析的自定义分析插件来深入了解ElasticSearch的扩展机制。
目 录
前言
第1章 ElasticSearch简介
1.1 Apache Lucene简介
[1.2 ElasticSearch简介
1.2.1 ElasticSearch的基本概念
1.2.2 ElasticSearch架构背后的关概念
1.2.3 ElasticSearch的工作流程](https://yq.aliyun.com/articles/107906)
1.3 小结
[第2章 查询DSL进阶
2.1 Apache Lucene默认评分公式解释
2.1.1 何时文档被匹配上
2.1.2 TF/IDF评分公式
2.1.3 ElasticSearch如何看评分](https://yq.aliyun.com/articles/107918)
[2.2 查询改写
2.2.1 前缀查询范例
2.2.2 回顾Apache Lucene
2.2.3 查询改写的属性](https://yq.aliyun.com/articles/107930)
[2.3 二次评分
2.3.1 理解二次评分
2.3.2 范例数据
2.3.3 查询
2.3.4 二次评分查询的结构
2.3.5 二次评分参数配置
2.3.6 小结](https://yq.aliyun.com/articles/107938)
[2.4 批量操作
2.4.1 批量取
2.4.2 批量查询](https://yq.aliyun.com/articles/107949)
[2.5 排序
2.5.1 基于多值字段的排序
2.5.2 基于多值geo字段的排序
2.5.3 基于嵌套对象的排序](https://yq.aliyun.com/articles/107958)
[2.6 数据更新API
2.6.1 简单字段更新
2.6.2 使用脚本按条件更新
2.6.3 使用更新 API创建或删除文档](https://yq.aliyun.com/articles/107971)
[2.7 使用过滤器优化查询
2.7.1 过滤器与缓存
2.7.2 词项查找过滤器](https://yq.aliyun.com/articles/107984)
[2.8 ElasticSearch切面机制中的过滤器与作用域
2.8.1 范例数据
2.8.2 切面计算和过滤
2.8.3 过滤器作为查询的一部分
2.8.4 切面过滤器
2.8.5 全局作用域](https://yq.aliyun.com/articles/108004)
2.9 小结
[第3章 底层索引控制
3.1 改变Apache Lucene的评分方式
3.1.1 可用的相似度模型
3.1.2 为每字段配置相似度模型](https://yq.aliyun.com/articles/108011)
[3.2 相似度模型配置
3.2.1 选择默认的相似度模型
3.2.2 配置被选用的相似度模型](https://yq.aliyun.com/articles/108025)
[3.3 使用编解码器
3.3.1 简单使用范例
3.3.2 工作原理解释
3.3.3 可用的倒排表格式
3.3.4 配置编解码器](https://yq.aliyun.com/articles/108038)
[3.4 准实时、提交、更新及事务日志
3.4.1 索引更新及更新提交
3.4.2 事务日志
3.4.3 准实时读取](https://yq.aliyun.com/articles/108048)
[3.5 深入理解数据处理
3.5.1 输入并不总是进行文本分析
3.5.2 范例的使用
3.5.3 索引期更换分词器
3.5.4 搜索时更换分析器
3.5.5 陷阱与默认分析](https://yq.aliyun.com/articles/108057)
[3.6 控制索引合并
3.6.1 选择正确的合并策略
3.6.2 合并策略配置
3.6.3 调度](https://yq.aliyun.com/articles/108070)
3.7 小结
第4章 分布式索引架构
4.1 选择合适的分片和副本数
4.1.1 分片和过度分配
4.1.2 一个过度分配的正面例子
4.1.3 多分片与多索引
4.1.4 副本
4.2 路由
4.2.1 分片和数据
4.2.2 测试路由功能
4.2.3 索引时使用路由
4.2.4 别名
4.2.5 多个路由值
4.3 调整默认的分片分配行为
4.3.1 分片分配器简介
4.3.2 even_shard 分片分配器
4.3.3 balanced分片分配器
4.3.4 自定义分片分配器
4.3.5 裁决者
4.4 调整分片分配
4.4.1 部署意识
4.4.2 过滤
4.4.3 运行时更新分配策略
4.4.4 确定每个节点允许的总分片数
4.4.5 更多的分片分配属性
4.5 查询执行偏好
4.6 应用我们的知识
4.6.1 基本假定
4.6.2 配置
4.6.3 变化来了
4.7 小结
第5章 管理ElasticSearch
5.1 选择正确的目录实现-存储模块
5.2 发现模块的配置
5.2.1 Zen发现
5.2.2 亚马逊EC2发现
5.2.3 本地网关
5.2.4 恢复配置
5.3 索引段统计
5.3.1 segments API简介
5.3.2 索引段信息的可视化
5.4 理解ElasticSearch缓存
5.4.1 过滤器缓存
5.4.2 字段数据缓存
5.4.3 清除缓存
5.5 小结
第6章 故障处理
6.1 了解垃圾回收器
6.1.1 Java内存
6.1.2 处理垃圾回收问题
6.1.3 在类UNIX系统中避免内存交换
6.2 关于I/O调节
6.2.1 控制IO节流
6.2.2 配置
6.3 用预热器提升查询速度
6.3.1 为什么使用预热器
6.3.2 操作预热器
6.3.3 测试预热器
6.4 热点线程
6.4.1 澄清热点线程API的用法误区
6.4.2 热点线程API的响应信息
6.5 现实场景
6.5.1 越来越差的性能
6.5.2 混杂的环境和负载不平衡
6.5.3 我的服务器出故障了
6.6 小结
第7章 改善用户搜索体验
7.1 改正用户拼写错误
7.1.1 测试数据
7.1.2 深入技术细节
7.1.3 completion suggester
7.2 改善查询相关性
7.2.1 数据
7.2.2 改善相关性的探索之旅
7.3 小结
第8章 ElasticSearch Java API
8.1 ElasticSearch Java API简介
8.2 代码190
8.3 连接到集群
8.3.1 成为ElasticSearch节点
8.3.2 使用传输机连接方式
8.3.3 选择合适的连接方式
8.4 API剖析
8.5 CRUD操作
8.5.1 读取文档
8.5.2 索引文档
8.5.3 更新文档
8.5.4 删除文档
8.6 ElasticSearch查询
8.6.1 准备查询请求
8.6.2 构造查询
8.6.3 分页
8.6.4 排序
8.6.5 过滤
8.6.6 切面计算
8.6.7 高亮
8.6.8 查询建议
8.6.9 计数
8.6.10 滚动
8.7 批量执行多个操作
8.7.1 批量操作
8.7.2 根据查询删除文档
8.7.3 Multi GET
8.7.4 Multi Search
8.8 Percolator
8.9 explain API
8.10 构造JSON格式的查询和文档
8.11 管理API
8.11.1 集群管理API
8.11.2 索引管理API
8.12 小结
第9章 开发ElasticSearch插件
9.1 建立Apache Maven项目结构
9.1.1 了解基本知识
9.1.2 Maven Java项目的结构
9.1.3 POM的理念
9.1.4 运行构建过程
9.1.5 引入Maven装配插件
9.2 创建一个自定义river插件
9.2.1 实现细节
9.2.2 测试
9.3 创建自定义分析插件
9.3.1 实现细节
9.3.2 测试自定义分析插件
9.4 小结