本书循序渐进介绍了信息检索、布尔检索、向量空间模型、tf-idf、BM25排序算法、Lucene架构、Lucene创建索引、Lucene查询、Lucene项目实战、Elasticsearch安装与配置、Elasticsearch插件安装、REST API数据操作、映射与模板、索引别名、Elasticsearch基本和高级搜索、Elasticsearch同步数据库、Elasticsearch集群管理、项目实战等内容。阅读本书,读者能够掌握信息检索的核心概念,应用Lucene库处理全文检索业务,掌握Elasticsearch分布式搜索引擎的使用方法与技巧。 本书基于Lucene 6.0和Elasticsearch 5.4.0进行讲解,技术先进,示例丰富,适合想学习信息检索技术的初学者和相关专业的大学生、研究生学习,也很适合大数据及云计算平台构建人员以及有一定基础的IT开发人员使用。
腾讯、阿里巴巴、百度、等诸多一线互联网公司正大力推进Elasticsearch的使用场景,本书以丰富的实例着重介绍了Elasticsearch的方方面面,可帮助读者快速应用Lucene库处理全文检索业务,掌握使用Elasticsearch搭建分布式搜索引擎的方法与技巧。
本书是编者在信息检索、Lucene和Elasticsearch学习、实际项目实践过程中的心得体会和经验总结。本书从原理到实践,涉及的内容包括信息检索的核心概念、Lucene架构、使用Lucene创建索引和索引查询、Elasticsearch入门、Elasticsearch基本搜索、Elasticsearch高级搜索、Elasticsearch Java API、Elasticsearch同步数据库、Elasticsearch集群管理、Lucene与Elasticsearch项目实战等。
针对初级开发者,可以通过本书提供的众多实例入手,循序渐进,由点到面地进行学习;另外,本书的每个实例都提供了可执行程序与详尽的代码注解,从而有效降低学习门槛,提高学习效率。
对于有编程经验的开发者通过学习本书,可以用Lucene和Elasticsearch解决工作中的问题,增强业务处理能力,实现独立开发信息检索系统的目标。
姚攀:中国科学院大学硕士,擅长j2ee开发,对搜索引擎技术有浓厚的兴趣和较深入研究,有丰富的Lucene和ElasticSearch开发经历和项目经验,活跃于CSDN社区,目前在一家公司做ES搜索业务开发。
目 录
第1章 信息检索模型 1
1.1 信息检索概述 1
1.1.1 信息过载 1
1.1.2 信息检索定义 2
1.1.3 信息检索常用术语 3
1.1.4 信息检索系统 4
1.2 分词算法 5
1.2.1 分词算法概述 5
1.2.2 词典匹配分词法 6
1.2.3 语义理解分词法 6
1.2.4 词频统计分词法 7
1.3 倒排索引 7
1.4 布尔检索模型 9
1.5 tf-idf权重计算 11
1.6 向量空间模型 13
1.7 概率检索模型 16
1.7.1 贝叶斯决策理论 17
1.7.2 二值独立模型 18
1.7.3 Okapi BM25模型 20
1.7.4 BM25F模型 20
1.8 本章小结 21
第2章 Lucene开发入门 22
2.1 Lucene概述 22
2.1.1 Lucene简介 22
2.1.2 Lucene特点 22
2.1.3 Lucene架构 23
2.2 Lucene开发准备 25
2.2.1 下载Lucene文件库 25
2.2.2 工程中引入Lucene 26
2.2.3 下载Luke 27
2.2.4 下载IK分词工具 28
2.2.5 工程搭建 29
2.3 Lucene分词详解 30
2.3.1 Lucene分词系统 30
2.3.2 分词器测试 31
2.3.3 IK分词器配置 34
2.3.4 中文分词器对比 36
2.3.5 扩展停用词词典 38
2.3.6 扩展自定义词典 38
2.4 Lucene索引详解 40
2.4.1 Lucene字段类型 40
2.4.2 索引文档示例 41
2.4.3 Luke中查看索引 46
2.4.4 索引的删除 48
2.4.5 索引的更新 49
2.5 Lucene查询详解 50
2.5.1 搜索入门 51
2.5.2 多域搜索(MultiFieldQueryParser) 52
2.5.3 词项搜索(TermQuery) 53
2.5.4 布尔搜索(BooleanQuery) 53
2.5.5 范围搜索(RangeQuery) 54
2.5.6 前缀搜索(PrefixQuery) 55
2.5.7 多关键字搜索(PhraseQuery) 55
2.5.8 模糊搜索(FuzzyQuery) 55
2.5.9 通配符搜索(WildcardQuery) 56
2.6 Lucene查询高亮 56
2.7 Lucene新闻高频词提取 58
2.7.1 问题提出 58
2.7.2 需求分析 58
2.7.3 编程实现 58
2.8 本章小结 61
第3章 Lucene文件检索项目实战 62
3.1 需求分析 62
3.2 架构设计 63
3.3 文本内容抽取 64
3.3.1 Tika简介 64
3.3.2 Tika下载 64
3.3.3 搭建工程 65
3.3.4 内容抽取 66
3.3.5 自动解析 68
3.4 工程搭建 71
3.5 索引文档 72
3.6 查询界面 75
3.7 文件检索 77
3.8 结果展示 80
3.9 本章小结 85
第4章 从Lucene到Elasticsearch 86
4.1 Elasticsearch概述 86
4.1.1 诞生过程 86
4.1.2 流行度分析 88
4.1.3 架构解读 89
4.1.4 优点 89
4.1.5 应用场景 90
4.1.6 核心概念 92
4.1.7 对比RDMS 94
4.1.8 文档结构 94
4.2 安装Elasticsearch 95
4.2.1 安装Java 96
4.2.2 下载Elasticsearch 97
4.2.3 启动Elasticsearch 97
4.2.4 后台运行Elasticsearch 99
4.2.5 关闭Elasticsearch 99
4.2.6 基本配置 100
4.3 中文分词器配置 101
4.3.1 IK分词器安装 101
4.3.2 扩展本地词库 102
4.3.3 配置远程词库 103
4.4 Head插件使用指南 105
4.4.1 Head插件的安装 105
4.4.2 Head插件的使用 107
4.5 REST命令 109
4.5.1 CURL工具 110
4.5.2 Kibana Dev Tools 111
4.6 本章小结 112
第5章 Elasticsearch集群入门 113
5.1 索引管理 113
5.1.1 新建索引 113
5.1.2 更新副本 115
5.1.3 读写权限 115
5.1.4 查看索引 116
5.1.5 删除索引 117
5.1.6 索引的打开与关闭 118
5.1.7 复制索引 118
5.1.8 收缩索引 119
5.1.9 索引别名 120
5.2 文档管理 123
5.2.1 新建文档 123
5.2.2 获取文档 125
5.2.3 更新文档 127
5.2.4 查询更新 129
5.2.5 删除文档 129
5.2.6 查询删除 130
5.2.7 批量操作 130
5.2.8 版本控制 133
5.2.9 路由机制 136
5.3 映射详解 137
5.3.1 映射分类 137
5.3.2 动态映射 138
5.3.3 日期检测 140
5.3.4 静态映射 141
5.3.5 字段类型 142
5.3.6 元字段 156
5.3.7 映射参数 162
5.3.8 映射模板 180
5.4 本章小结 181
第6章 Elasticsearch搜索详解 182
6.1 搜索机制 182
6.2 全文查询 188
6.2.1 match query 188
6.2.2 match_phrase query 190
6.2.3 match_phrase_prefix query 190
6.2.4 multi_match query 190
6.2.5 common_terms query 191
6.2.6 query_string query 193
6.2.7 simple_query_string 193
6.3 词项查询 193
6.3.1 term query 193
6.3.2 terms query 193
6.3.3 range query 194
6.3.4 exists query 194
6.3.5 prefix query 195
6.3.6 wildcard query 195
6.3.7 regexp query 196
6.3.8 fuzzy query 196
6.3.9 type query 196
6.3.10 ids query 197
6.4 复合查询 197
6.4.1 constant_score query 197
6.4.2 bool query 198
6.4.3 dis_max query 198
6.4.4 function_score query 199
6.4.5 boosting query 200
6.4.6 indices query 201
6.5 嵌套查询 202
6.5.1 nested query 202
6.5.2 has_child query 202
6.5.3 has_parent query 204
6.6 位置查询 205
6.6.1 geo_distance query 206
6.6.2 geo_bounding_box query 206
6.6.3 geo_polygon query 208
6.6.4 geo_shape query 209
6.7 特殊查询 210
6.7.1 more_like_this query 210
6.7.2 script query 211
6.7.3 percolate query 211
6.8 搜索高亮 213
6.8.1 自定义高亮片段 213
6.8.2 多字段高亮 213
6.8.3 高亮性能分析 214
6.9 搜索排序 215
6.9.1 默认排序 215
6.9.2 多字段排序 215
6.9.3 分片影响评分 216
6.10 本章小结 218
第7章 聚合分析 219
7.1 指标聚合 219
7.1.1 Max Aggregation 219
7.1.2 Min Aggregation 220
7.1.3 Avg Aggregation 220
7.1.4 Sum Aggregation 221
7.1.5 Cardinality Aggregation 221
7.1.6 Stats Aggregation 222
7.1.7 Extended Stats Aggregation 222
7.1.8 Percentiles Aggregation 223
7.1.9 Value Count Aggregation 224
7.2 桶聚合 224
7.2.1 Terms Aggregation 225
7.2.2 Filter Aggregation 227
7.2.3 Filters Aggregation 227
7.2.4 Range Aggregation 228
7.2.5 Date Range Aggregation 231
7.2.6 Date Histogram Aggregation 232
7.2.7 Missing Aggregation 233
7.2.8 Children Aggregation 233
7.2.9 Geo Distance Aggregation 234
7.2.10 IP Range Aggregation 235
7.3 本章小结 236
第8章 Elasticsearch Java API 237
8.1 Java API简介 237
8.2 Maven依赖 238
8.3 依赖冲突 240
8.4 连接到集群 240
8.4.1 传输机连接 241
8.4.2 节点连接 241
8.4.3 代码实现 241
8.5 索引管理 243
8.6 文档管理 246
8.6.1 新建文档 246
8.6.2 获取文档 249
8.6.3 删除文档 250
8.6.4 更新文档 250
8.6.5 查询删除 252
8.6.6 批量获取 252
8.6.7 批量操作 253
8.7 搜索详解 254
8.7.1 全文查询 257
8.7.2 词项查询 257
8.7.3 复合查询 258
8.7.4 嵌套查询 260
8.7.5 位置查询 260
8.7.6 特殊查询 261
8.8 聚合分析 262
8.8.1 指标聚合 263
8.8.2 桶聚合 265
8.9 集群管理 269
8.10 本章小结 269
第9章 集群管理 270
9.1 集群规划 270
9.2 索引规划 272
9.3 分布式集群 273
9.4 Cat API 275
9.4.1 cat aliases 275
9.4.2 cat allocation 275
9.4.3 cat count 275
9.4.4 cat fielddata 276
9.4.5 cat health 276
9.4.6 cat indices 276
9.4.7 cat master 276
9.4.8 cat nodeattrs 277
9.4.9 cat nodes 277
9.4.10 cat pending tasks 277
9.4.11 cat plugins 277
9.4.12 cat recovery 278
9.4.13 cat repositories 278
9.4.14 cat thread pool 278
9.4.15 cat shards 278
9.4.16 cat segments 279
9.4.17 cat templates 279
9.5 Cluster API 279
9.5.1 Cluster Health 279
9.5.2 Cluster State 281
9.5.3 Cluster Stats 282
9.5.4 Pending Cluster Tasks 282
9.5.5 Cluster Reroute 282
9.5.6 Cluster Update Settings 283
9.5.7 Nodes Stats 283
9.5.8 Nodes Info 283
9.5.9 Task Management API 284
9.5.10 Cluster Allocation Explain API 284
9.6 监控插件 284
9.7 本章小结 286
第10章 新闻搜索项目实战 287
10.1 需求分析 287
10.2 数据准备 288
10.3 数据导入 290
10.4 查询界面 294
10.5 搜索新闻 296
10.6 结果展示 298
10.7 本章小结 302
第11章 Elasticsearch For Hadoop 303
11.1 Hadoop基础 304
11.1.1 SSH配置 304
11.1.2 Hadoop下载 305
11.1.3 Hadoop单机模式 305
11.1.4 Hadoop伪分布式模式 306
11.1.5 HDFS常用操作 309
11.2 ES-Hadoop安装 310
11.2.1 压缩包下载 310
11.2.2 Maven依赖 310
11.3 从HDFS到Elasticsearch 311
11.3.1 测试数据 311
11.3.2 编写程序 312
11.3.3 代码分析 313
11.4 从Elasticsearch到HDFS 314
11.4.1 读取索引到HDFS 314
11.4.2 查询Elasticsearch写入HDFS 315
11.5 本章小结 316
参考文献 317