第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