本書全面深入地介紹Elasticsearch的核心功能及其工作機(jī)制。本書由淺入深,從Elasticsearch的基本用法和架構(gòu)原理,以及倒排索引、分片、節(jié)點(diǎn)角色和相關(guān)性等核心概念講起;然后深入探討數(shù)據(jù)處理和索引管理,涵蓋映射模式、數(shù)據(jù)類型、文本分析、索引模板;接著詳細(xì)介紹詞項級搜索、全文搜索、復(fù)合查詢和高級搜索等Elasticsearch的搜索功能,并深入講解聚合;最后聚焦生產(chǎn)環(huán)境中的Elasticsearch管理和性能優(yōu)化。本書特別注重實踐,提供了大量的代碼示例,涵蓋從基礎(chǔ)查詢到復(fù)雜功能的各種應(yīng)用場景。與第1版相比,這一版更新并補(bǔ)充了許多新的功能點(diǎn),如索引生命周期管理、可組合索引模板機(jī)制、地理位置查詢等。
本書是使用Elasticsearch開發(fā)全功能搜索引擎的實踐指南,適合剛接觸Elasticsearch領(lǐng)域、希望了解其基本工作原理的開發(fā)者、架構(gòu)師、分析師、管理者、產(chǎn)品負(fù)責(zé)人或希望利用Elasticsearch進(jìn)行實時數(shù)據(jù)分析和處理的數(shù)據(jù)科學(xué)家閱讀,也適合在實際項目中遇到挑戰(zhàn)的資深工程師及學(xué)習(xí)大數(shù)據(jù)技術(shù)并對搜索技術(shù)感興趣的學(xué)生和研究人員閱讀。
[英]馬杜蘇丹·孔達(dá)(Madhusudhan Konda)是全棧首席工程師、架構(gòu)師,也是技術(shù)導(dǎo)師和會議演講者。他還是一位頗具盛名的技術(shù)圖書作者,他關(guān)于Java、Spring和Hibernate生態(tài)系統(tǒng)的書廣受讀者歡迎。此外,他還提供有關(guān)Elasticsearch和Elastic Stack的在線培訓(xùn)。
目錄
第 1章 概述 1
1.1 一個好的搜索引擎是怎樣的 1
1.2 搜索已成為新常態(tài) 2
1.2.1 結(jié)構(gòu)化數(shù)據(jù)與非結(jié)構(gòu)化(全文)數(shù)據(jù) 3
1.2.2 數(shù)據(jù)庫支持的搜索 4
1.2.3 數(shù)據(jù)庫與搜索引擎 5
1.3 現(xiàn)代搜索引擎 6
1.3.1 功能 6
1.3.2 流行的搜索引擎 7
1.4 Elasticsearch概述 7
1.4.1 核心領(lǐng)域 8
1.4.2 Elastic Stack 9
1.4.3 Elasticsearch的使用場景 10
1.4.4 不適合Elasticsearch的使用場景 11
1.4.5 誤解 12
1.5 業(yè)界案例 13
1.6 生成式人工智能與現(xiàn)代搜索 14
1.7 小結(jié) 16
第 2章 開始使用 17
2.1 往Elasticsearch中導(dǎo)入數(shù)據(jù) 18
2.1.1 在線書店 18
2.1.2 索引文檔 19
2.1.3 索引第 一個文檔 22
2.1.4 索引更多文檔 25
2.2 檢索數(shù)據(jù) 26
2.2.1 計算文檔數(shù)量 26
2.2.2 檢索文檔 27
2.3 全文搜索 31
2.3.1 匹配查詢:按作者找書 31
2.3.2 帶有AND運(yùn)算符的匹配查詢 32
2.3.3 使用_bulk API索引文檔 34
2.3.4 多字段搜索 35
2.3.5 提升結(jié)果 36
2.3.6 搜索短語 36
2.3.7 處理缺失單詞的短語 38
2.3.8 處理拼寫錯誤 38
2.4 詞項級查詢 39
2.4.1 term查詢 40
2.4.2 range查詢 41
2.5 復(fù)合查詢 41
2.5.1 bool查詢 42
2.5.2 must子句 43
2.5.3 must_not子句 44
2.5.4 should子句 44
2.5.5 filter子句 45
2.6 聚合 46
2.6.1 指標(biāo)聚合 47
2.6.2 桶聚合 49
2.7 小結(jié) 52
第3章 架構(gòu) 53
3.1 概述 54
3.1.1 數(shù)據(jù)導(dǎo)入 54
3.1.2 數(shù)據(jù)處理 55
3.1.3 數(shù)據(jù)輸出 58
3.2 基本組件 58
3.2.1 文檔 58
3.2.2 索引 62
3.2.3 數(shù)據(jù)流 63
3.2.4 分片和副本 65
3.2.5 節(jié)點(diǎn)和集群 70
3.3 倒排索引 75
3.4 相關(guān)性 77
3.4.1 相關(guān)性分?jǐn)?shù) 77
3.4.2 相關(guān)性(相似性)算法 78
3.5 路由算法 82
3.6 擴(kuò)展 83
3.6.1 縱向擴(kuò)展(垂直擴(kuò)展) 83
3.6.2 橫向擴(kuò)展(水平擴(kuò)展) 84
3.7 小結(jié) 84
第4章 映射 85
4.1 概述 86
4.1.1 映射定義 86
4.1.2 首次索引文檔 87
4.2 動態(tài)映射 89
4.2.1 推斷類型的機(jī)制 90
4.2.2 動態(tài)映射的局限性 91
4.3 顯式映射 93
4.3.1 使用索引API定義映射 94
4.3.2 使用映射API更新模式 95
4.3.3 不允許修改現(xiàn)有字段 97
4.3.4 類型強(qiáng)制轉(zhuǎn)換 98
4.4 數(shù)據(jù)類型 98
4.5 核心數(shù)據(jù)類型 100
4.5.1 文本數(shù)據(jù)類型 100
4.5.2 關(guān)鍵詞數(shù)據(jù)類型 104
4.5.3 日期數(shù)據(jù)類型 106
4.5.4 數(shù)值數(shù)據(jù)類型 108
4.5.5 布爾數(shù)據(jù)類型 109
4.5.6 范圍數(shù)據(jù)類型 110
4.5.7 IP地址數(shù)據(jù)類型 111
4.6 高級數(shù)據(jù)類型 112
4.6.1 geo_point數(shù)據(jù)類型 112
4.6.2 object數(shù)據(jù)類型 114
4.6.3 nested數(shù)據(jù)類型 118
4.6.4 flattened數(shù)據(jù)類型 120
4.6.5 join數(shù)據(jù)類型 122
4.6.6 search_as_you_type數(shù)據(jù)類型 124
4.7 擁有多種數(shù)據(jù)類型的字段 126
4.8 小結(jié) 127
第5章 處理文檔 128
5.1 索引文檔 129
5.1.1 文檔API 129
5.1.2 索引機(jī)制 135
5.1.3 自定義刷新過程 137
5.2 檢索文檔 138
5.2.1 使用單文檔API 139
5.2.2 檢索多個文檔 140
5.2.3 ids查詢 141
5.3 操縱響應(yīng) 142
5.3.1 從響應(yīng)中移除元數(shù)據(jù) 142
5.3.2 抑制源數(shù)據(jù) 143
5.3.3 包含或排除字段 144
5.4 更新文檔 146
5.4.1 文檔更新機(jī)制 146
5.4.2 _update API 147
5.4.3 腳本更新 148
5.4.4 替換文檔 152
5.4.5 更新插入 153
5.4.6 將更新視為更新插入 154
5.4.7 通過查詢更新 155
5.5 刪除文檔 156
5.5.1 通過ID刪除 156
5.5.2 通過查詢刪除 156
5.5.3 通過range查詢刪除 157
5.5.4 刪除所有文檔 158
5.6 批量處理文檔 159
5.6.1 _bulk API的格式 159
5.6.2 批量索引文檔 160
5.6.3 批量請求處理多個索引和操作 161
5.6.4 使用cURL執(zhí)行批量請求 162
5.7 重新索引文檔 163
5.8 小結(jié) 164
第6章 索引操作 165
6.1 概述 166
6.2 創(chuàng)建索引 166
6.2.1 隱式創(chuàng)建索引(自動創(chuàng)建) 167
6.2.2 顯式創(chuàng)建索引(手動創(chuàng)建) 170
6.2.3 自定義索引設(shè)置 170
6.2.4 索引映射 172
6.2.5 索引別名 173
6.3 讀取索引 177
6.3.1 讀取公開索引 177
6.3.2 讀取隱藏索引 178
6.4 刪除索引 179
6.4.1 刪除多個索引 179
6.4.2 僅刪除別名 180
6.5 關(guān)閉索引和打開索引 180
6.5.1 關(guān)閉索引 180
6.5.2 打開索引 181
6.6 索引模板 182
6.6.1 創(chuàng)建可組合(索引)模板 183
6.6.2 創(chuàng)建組件模板 184
6.7 監(jiān)控和管理索引 186
6.7.1 索引的統(tǒng)計信息 186
6.7.2 多個索引的統(tǒng)計信息 188
6.8 高級操作 189
6.8.1 拆分索引 189
6.8.2 縮小索引 191
6.8.3 滾動更新索引別名 193
6.9 索引生命周期管理 195
6.9.1 索引生命周期 196
6.9.2 手動管理索引生命周期 197
6.9.3 帶有滾動機(jī)制的索引生命周期 199
6.10 小結(jié) 202
第7章 文本分析 203
7.1 概述 204
7.1.1 查詢非結(jié)構(gòu)化數(shù)據(jù) 204
7.1.2 分析器來拯救 205
7.2 分析器模塊 205
7.2.1 分詞 205
7.2.2 歸一化 206
7.2.3 分析器的結(jié)構(gòu) 206
7.2.4 測試分析器 208
7.3 內(nèi)置分析器 209
7.3.1 standard分析器 210
7.3.2 simple分析器 216
7.3.3 whitespace分析器 217
7.3.4 keyword分析器 218
7.3.5 fingerprint分析器 219
7.3.6 pattern分析器 220
7.3.7 語言分析器 221
7.4 自定義分析器 224
7.5 指定分析器 227
7.5.1 為索引指定分析器 227
7.5.2 為搜索指定分析器 228
7.6 字符過濾器 230
7.6.1 html_strip字符過濾器 231
7.6.2 mapping字符過濾器 232
7.6.3 pattern_replace字符過濾器 234
7.7 分詞器 235
7.7.1 standard分詞器 235
7.7.2 ngram分詞器和edge_ngram分詞器 236
7.7.3 其他分詞器 238
7.8 詞元過濾器 238
7.8.1 stemmer詞元過濾器 239
7.8.2 shingle詞元過濾器 239
7.8.3 synonym詞元過濾器 240
7.9 小結(jié) 242
第8章 搜索簡介 243
8.1 概述 243
8.2 搜索的工作原理 244
8.3 電影樣本數(shù)據(jù) 245
8.4 搜索的基礎(chǔ)知識 247
8.4.1 _search端點(diǎn) 247
8.4.2 查詢上下文和過濾上下文 248
8.5 請求和響應(yīng)的結(jié)構(gòu) 250
8.5.1 搜索請求 250
8.5.2 搜索響應(yīng) 251
8.6 URI搜索 253
8.6.1 按片名搜索電影 253
8.6.2 搜索特定的電影 254
8.6.3 附加參數(shù) 254
8.6.4 使用Query DSL支持URI搜索 255
8.7 Query DSL 255
8.7.1 查詢樣例 256
8.7.2 通過cURL調(diào)用Query DSL 256
8.7.3 使用Query DSL進(jìn)行聚合 257
8.7.4 葉子查詢和復(fù)合查詢 257
8.8 搜索功能 258
8.8.1 分頁 259
8.8.2 高亮顯示 260
8.8.3 解釋相關(guān)性分?jǐn)?shù) 262
8.8.4 排序 264
8.8.5 操縱結(jié)果 267
8.8.6 跨索引和數(shù)據(jù)流搜索 271
8.9 小結(jié) 272
第9章 詞項級搜索 273
9.1 概述 273
9.1.1 詞項級查詢不進(jìn)行分析 273
9.1.2 詞項級查詢示例 274
9.2 term查詢 275
9.2.1 在text類型的字段上執(zhí)行term查詢 275
9.2.2 term查詢示例 276
9.2.3 簡化的詞項級查詢 277
9.3 terms查詢 277
9.3.1 terms查詢示例 278
9.3.2 terms查找查詢 279
9.4 ids查詢 280
9.5 exists查詢 281
9.6 range查詢 282
9.7 wildcard查詢 284
9.8 prefix查詢 286
9.8.1 簡化查詢 287
9.8.2 加速prefix查詢 288
9.9 fuzzy查詢 289
9.10 小結(jié) 291
第 10章 全文搜索 292
10.1 概述 292
10.1.1 精確率 293
10.1.2 召回率 293
10.2 樣本數(shù)據(jù) 295
10.3 match_all查詢 295
10.3.1 構(gòu)建match_all查詢 295
10.3.2 match_all查詢的簡寫格式 296
10.4 match_none查詢 296
10.5 match查詢 297
10.5.1 match查詢的格式 297
10.5.2 使用match查詢搜索 298
10.5.3 分析match查詢 298
10.5.4 搜索多個單詞 299
10.5.5 至少匹配幾個單詞 300
10.5.6 使用fuzziness關(guān)鍵詞糾正拼寫錯誤 301
10.6 match_phrase查詢 301
10.7 match_phrase_prefix查詢 303
10.8 multi_match查詢 304
10.8.1 最佳字段 304
10.8.2 dis_max查詢 306
10.8.3 tie_breaker 306
10.8.4 提升單個字段的權(quán)重 308
10.9 query_string查詢 309
10.9.1 query_string查詢中的字段 310
10.9.2 默認(rèn)運(yùn)算符 311
10.9.3 帶有短語的query_string查詢 312
10.10 模糊查詢 312
10.11 簡單的字符串查詢 313
10.12 simple_query_string查詢 314
10.13 小結(jié) 315
第 11章 復(fù)合查詢 316
11.1 產(chǎn)品樣本數(shù)據(jù) 317
11.1.1 產(chǎn)品模式 317
11.1.2 索引產(chǎn)品數(shù)據(jù) 318
11.2 復(fù)合查詢 318
11.3 bool查詢 320
11.3.1 bool查詢結(jié)構(gòu) 320
11.3.2 must子句 321
11.3.3 增強(qiáng)must子句 322
11.3.4 must_not子句 324
11.3.5 增強(qiáng)must_not子句 325
11.3.6 should子句 327
11.3.7 filter子句 332
11.3.8 組合所有子句 334
11.3.9 命名查詢 335
11.4 constant_score查詢 337
11.5 boosting查詢 339
11.6 dis_max查詢 341
11.7 function_score查詢 343
11.7.1 random_score函數(shù) 344
11.7.2 script_score函數(shù) 345
11.7.3 field_value_factor函數(shù) 346
11.7.4 組合函數(shù)分?jǐn)?shù) 347
11.8 小結(jié) 348
第 12章 高級搜索 349
12.1 位置搜索簡介 350
12.1.1 bounding_box查詢 350
12.1.2 geo_distance查詢 351
12.1.3 geo_shape查詢 351
12.2 地理空間數(shù)據(jù)類型 352
12.2.1 geo_point數(shù)據(jù)類型 352
12.2.2 geo_shape數(shù)據(jù)類型 353
12.3 地理空間查詢 355
12.4 geo_bounding_box查詢 355
12.5 geo_distance查詢 359
12.6 geo_shape查詢 360
12.7 shape查詢 362
12.8 span查詢 364
12.8.1 樣本數(shù)據(jù) 364
12.8.2 span_first查詢 365
12.8.3 span_near查詢 366
12.8.4 span_within查詢 367
12.8.5 span_or查詢 369
12.9 專用查詢 370
12.9.1 distance_feature查詢 370
12.9.2 pinned查詢 375
12.9.3 more_like_this查詢 376
12.9.4 percolate查詢 377
12.10 小結(jié) 381
第 13章 聚合 382
13.1 概述 382
13.1.1 端點(diǎn)和語法 383
13.1.2 結(jié)合搜索和聚合 383
13.1.3 多重聚合和嵌套聚合 384
13.1.4 忽略結(jié)果 384
13.2 指標(biāo)聚合 385
13.2.1 樣本數(shù)據(jù) 385
13.2.2 value_count指標(biāo) 386
13.2.3 avg指標(biāo) 387
13.2.4 sum指標(biāo) 388
13.2.5 min指標(biāo)和max指標(biāo) 388
13.2.6 stats指標(biāo) 389
13.2.7 extended_stats指標(biāo) 390
13.2.8 cardinality指標(biāo) 391
13.3 桶聚合 392
13.3.1 直方圖 393
13.3.2 子聚合 396
13.3.3 自定義range聚合 397
13.3.4 terms聚合 399
13.3.5 multi-terms聚合 400
13.4 父聚合和兄弟聚合 401
13.4.1 父聚合 402
13.4.2 兄弟聚合 403
13.5 管道聚合 404
13.5.1 管道聚合的類型 404
13.5.2 樣本數(shù)據(jù) 404
13.5.3 管道聚合的語法 405
13.5.4 可用的管道聚合 406
13.5.5 cumulative_sum父管道聚合 407
13.5.6 max_bucket和min_bucket兄弟管道聚合 408
13.6 小結(jié) 410
第 14章 集群管理 411
14.1 擴(kuò)展集群 412
14.1.1 向集群中添加節(jié)點(diǎn) 412
14.1.2 集群健康 413
14.1.3 提高讀吞吐量 416
14.2 節(jié)點(diǎn)間通信 416
14.3 確定分片大小 417
14.3.1 設(shè)置單個索引 417
14.3.2 設(shè)置多個索引 418
14.4 快照 419
14.4.1 開始使用 420
14.4.2 注冊快照存儲庫 421
14.4.3 創(chuàng)建快照 423
14.4.4 恢復(fù)快照 424
14.4.5 刪除快照 424
14.4.6 自動化快照 424
14.5 高級配置 428
14.5.1 主配置文件 429
14.5.2 日志選項 429
14.5.3 Java虛擬機(jī)選項 430
14.6 集群主節(jié)點(diǎn) 431
14.6.1 主節(jié)點(diǎn) 431
14.6.2 主節(jié)點(diǎn)選舉 432
14.6.3 集群狀態(tài) 432
14.6.4 法定人數(shù) 433
14.6.5 腦裂問題 433
14.6.6 專用主節(jié)點(diǎn) 434
14.7 小結(jié) 435
第 15章 性能與故障排查 437
15.1 搜索與速度問題 437
15.1.1 現(xiàn)代硬件 438
15.1.2 文檔建模 438
15.1.3 選擇keyword類型而不是text類型 441
15.2 索引速度問題 442
15.2.1 系統(tǒng)生成的ID 442
15.2.2 批量請求 442
15.2.3 調(diào)整刷新頻率 442
15.3 集群不穩(wěn)定問題 445
15.3.1 集群狀態(tài)不是綠色 445
15.3.2 未分配的分片 445
15.3.3 磁盤使用閾值 447
15.4 斷路器 449
15.5 結(jié)束語 450
15.6 小結(jié) 451
附錄A 安裝 452
附錄B 攝取管道 459
附錄C 客戶端 466