第一部分 2
第1章 Elasticsearch介绍 2
1.1用Elasticsearch解决搜索问题 3
1.1.1提供快速查询 3
1.1.2确保结果的相关性 4
1.1.3超越精确匹配 5
1.2探索典型的Elasticsearch使用案例 6
1.2.1将Elasticsearch作为主要的后端系统 7
1.2.2将Elasticsearch添加到现有的系统 7
1.2.3将Elasticsearch和现有工具一同使用 8
1.2.4Elasticsearch的主要特性 10
1.2.5扩展Lucene的功能 10
1.2.6在Elasticsearch中组织数据 12
1.2.7安装Java语言 12
1.2.8下载并启动Elasticsearch 13
1.2.9验证是否工作 14
1.3小结 16
第2章 深入功能 17
2.1理解逻辑设计:文档、类型和索引 18
2.1.1文档 19
2.1.2类型 20
2.1.3索引 21
2.2理解物理设计:节点和分片 21
2.2.1创建拥有一个或多个节点的集群 22
2.2.2理解主分片和副本分片 23
2.2.3在集群中分发分片 25
2.2.4分布式索引和搜索 26
2.3索引新数据 27
2.3.1通过cURL索引一篇文档 28
2.3.2创建索引和映射类型 30
2.3.3通过代码样例索引文档 31
2.4搜索并获取数据 32
2.4.1在哪里搜索 33
2.4.2回复的内容 33
2.4.3如何搜索 36
2.4.4通过ID获取文档 39
2.5配置Elasticsearch 40
2.5.1在elasticsearch.yml中指定集群的名称 40
2.5.2通过logging.yml指定详细日志记录 41
2.5.3调整JVM设置 41
2.6在集群中加入节点 42
2.6.1启动第二个节点 43
2.6.2增加额外的节点 44
2.7小结 45
第3章 索引、更新和删除数据 47
3.1使用映射来定义各种文档 48
3.1.1检索和定义映射 49
3.1.2扩展现有的映射 50
3.2用于定义文档字段的核心类型 51
3.2.1字符串类型 52
3.2.2数值类型 54
3.2.3日期类型 55
3.2.4布尔类型 56
3.3数组和多字段 56
3.3.1数组 56
3.3.2多字段 57
3.4使用预定义字段 58
3.4.1控制如何存储和搜索文档 59
3.4.2识别文档 61
3.5更新现有文档 63
3.5.1使用更新API 64
3.5.2通过版本来实现并发控制 66
3.6删除数据 69
3.6.1删除文档 70
3.6.2删除索引 71
3.6.3关闭索引 72
3.6.4重新索引样本文档 73
3.7小结 73
第4章 搜索数据 74
4.1搜索请求的结构 75
4.1.1确定搜索范围 75
4.1.2搜索请求的基本模块 76
4.1.3基于请求主体的搜索请求 78
4.1.4理解回复的结构 81
4.2介绍查询和过滤器DSL 82
4.2.1match查询和term过滤器 82
4.2.2常用的基础查询和过滤器 85
4.2.3match查询和term过滤器 91
4.2.4phrase_prefiix查询 92
4.3组合查询或复合查询 93
4.3.1bool查询 93
4.3.2bool过滤器 96
4.4超越match和过滤器查询 98
4.4.1range查询和过滤器 98
4.4.2prefiix查询和过滤器 99
4.4.3wildcard查询 100
4.5使用过滤器查询字段的存在性 102
4.5.1exists过滤器 102
4.5.2missing过滤器 102
4.5.3将任何查询转变为过滤器 103
4.6为任务选择最好的查询 104
4.7小结 105
第5章 分析数据 106
5.1什么是分析 106
5.1.1字符过滤 107
5.1.2切分为分词 108
5.1.3分词过滤器 108
5.1.4分词索引 108
5.2为文档使用分析器 109
5.2.1在索引创建时增加分析器 109
5.2.2在Elasticsearch的配置中添加分析器 111
5.2.3在映射中指定某个字段的分析器 112
5.3使用分析API来分析文本 113
5.3.1选择一个分析器 114
5.3.2通过组合即兴地创建分析器 115
5.3.3基于某个字段映射的分析 115
5.3.4使用词条向量API来学习索引词条 116
5.4分析器、分词器和分词过滤器 117
5.4.1内置的分析器 117
5.4.2分词器 119
5.4.3分词过滤器 122
5.5N元语法、侧边N元语法和滑动窗口 128
5.5.1一元语法过滤器 128
5.5.2二元语法过滤器 129
5.5.3三元语法过滤器 129
5.5.4设置min_gram和max_gram 129
5.5.5侧边N元语法过滤器 129
5.5.6N元语法的设置 130
5.5.7滑动窗口分词过滤器 131
5.6提取词干 132
5.6.1算法提取词干 133
5.6.2使用字典提取词干 133
5.6.3重写分词过滤器的词干提取 134
5.7小结 134
第6章 使用相关性进行搜索 136
6.1Elasticsearch的打分机制 137
6.1.1文档打分是如何运作的 137
6.1.2词频 137
6.1.3逆文档频率 138
6.1.4Lucene评分公式 138
6.2其他打分方法 139
6.3boosting 141
6.3.1索引期间的boosting 142
6.3.2查询期间的boosting 142
6.3.3跨越多个字段的查询 143
6.4使用“解释”来理解文档是如何被评分的 144
6.5使用查询再打分来减小评分操作的性能影响 147
6.6使用function_score来定制得分 148
6.6.1weight函数 149
6.6.2合并得分 150
6.6.3fiield value factor函数 151
6.6.4脚本 152
6.6.5随机 152
6.6.6衰减函数 153
6.6.7配置选项 155
6.7尝试一起使用它们吧 156
6.8使用脚本来排序 157
6.9字段数据 158
6.9.1字段数据缓存 158
6.9.2字段数据用在哪里 159
6.9.3管理字段数据 160
6.10小结 163
第7章 使用聚集来探索数据 164
7.1理解聚集的具体结构 166
7.1.1理解聚集请求的结构 166
7.1.2运行在查询结果上的聚集 168
7.1.3过滤器和聚集 169
7.2度量聚集 170
7.2.1统计数据 171
7.2.2高级统计 172
7.2.3近似统计 173
7.3多桶型聚集 176
7.3.1terms聚集 177
7.3.2range聚集 183
7.3.3histogram聚集 185
7.4嵌套聚集 187
7.4.1嵌套多桶聚集 189
7.4.2通过嵌套聚集获得结果分组 190
7.4.3使用单桶聚集 192
7.5小结 196
第8章 文档间的关系 197
8.1定义文档间关系的选项概览 197
8.1.1对象类型 198
8.1.2嵌套类型 200
8.1.3父子关系 200
8.1.4反规范化 200
8.2将对象作为字段值 202
8.2.1映射和索引对象 203
8.2.2在对象中搜索 204
8.3嵌套类型:联结嵌套的文档 206
8.3.1映射并索引嵌套文档 207
8.3.2搜索和聚集嵌套文档 210
8.4父子关系:关联分隔的文档 216
8.4.1子文档的索引、更新和删除 218
8.4.2在父文档和子文档中搜索 220
8.5反规范化:使用冗余的数据管理 227
8.5.1反规范化的使用案例 228
8.5.2索引、更新和删除反规范化的数据 230
8.5.3查询反规范化的数据 233
8.6应用端的连接 234
8.7小结 235
第二部分 238
第9章 向外扩展 238
9.1向Elasticsearch集群加入节点 238
9.2发现其他Elasticsearch节点 241
9.2.1通过广播来发现 241
9.2.2通过单播来发现 242
9.2.3选举主节点和识别错误 243
9.2.4错误的识别 244
9.3删除集群中的节点 245
9.4升级Elasticsearch的节点 250
9.4.1进行轮流重启 250
9.4.2最小化重启后的恢复时间 251
9.5使用_cat API 252
9.6扩展策略 254
9.6.1过度分片 254
9.6.2将数据切分为索引和分片 255
9.6.3最大化吞吐量 256
9.7别名 257
9.7.1什么是别名 258
9.7.2别名的创建 259
9.8路由 261
9.8.1为什么使用路由 261
9.8.2路由策略 262
9.8.3使用search shards API来决定搜索在哪里执行 263
9.8.4配置路由 265
9.8.5结合路由和别名 265
9.9小结 267
第10章 提升性能 268
10.1合并请求 269
10.1.1批量索引、更新和删除 269
10.1.2多条搜索和多条获取API接口 273
10.2优化Lucene分段的处理 276
10.2.1刷新和冲刷的阈值 276
10.2.2合并以及合并策略 279
10.2.3存储和存储限流 282
10.3充分利用缓存 285
10.3.1过滤器和过滤器缓存 285
10.3.2分片查询缓存 291
10.3.3JVM堆和操作系统缓存 293
10.3.4使用预热器让缓存热身 296
10.4其他的性能权衡 297
10.4.1大规模的索引还是昂贵的搜索 298
10.4.2调优脚本,要么别用它 301
10.4.3权衡网络开销,更少的数据和更好的分布式得分 305
10.4.4权衡内存,进行深度分页 308
10.5小结 310
第11章 管理集群 311
11.1改善默认的配置 311
11.1.1索引模板 312
11.1.2默认的映射 315
11.2分配的感知 318
11.2.1基于分片的分配 318
11.2.2强制性的分配感知 319
11.3监控瓶颈 320
11.3.1检查集群的健康状态 320
11.3.2CPU:慢日志、热线程和线程池 322
11.3.3内存:堆的大小、字段和过滤器缓存 326
11.3.4操作系统缓存 330
11.3.5存储限流 330
11.4备份你的数据 331
11.4.1快照API 331
11.4.2将数据备份到共享的文件系统 332
11.4.3从备份中恢复 335
11.4.4使用资料库插件 336
11.5小结 337