Elasticsearch實戰(第2版) Elasticsearch in Action, Second Edition

[英]馬杜蘇丹·孔達(Madhusudhan Konda)

  • Elasticsearch實戰(第2版)-preview-1
  • Elasticsearch實戰(第2版)-preview-2
Elasticsearch實戰(第2版)-preview-1

相關主題

商品描述

本書全面深入地介紹Elasticsearch的核心功能及其工作機制。本書由淺入深,從Elasticsearch的基本用法和架構原理,以及倒排索引、分片、節點角色和相關性等核心概念講起;然後深入探討數據處理和索引管理,涵蓋映射模式、數據類型、文本分析、索引模板;接著詳細介紹詞項級搜索、全文搜索、復合查詢和高級搜索等Elasticsearch的搜索功能,並深入講解聚合;最後聚焦生產環境中的Elasticsearch管理和性能優化。本書特別註重實踐,提供了大量的代碼示例,涵蓋從基礎查詢到復雜功能的各種應用場景。與第1版相比,這一版更新並補充了許多新的功能點,如索引生命周期管理、可組合索引模板機制、地理位置查詢等。

  本書是使用Elasticsearch開發全功能搜索引擎的實踐指南,適合剛接觸Elasticsearch領域、希望瞭解其基本工作原理的開發者、架構師、分析師、管理者、產品負責人或希望利用Elasticsearch進行實時數據分析和處理的數據科學家閱讀,也適合在實際項目中遇到挑戰的資深工程師及學習大數據技術並對搜索技術感興趣的學生和研究人員閱讀。

作者簡介

[英]马杜苏丹·孔达(Madhusudhan Konda)是全栈首席工程师、架构师,也是技术导师和会议演讲者。他还是一位颇具盛名的技术图书作者,他关于Java、Spring和Hibernate生态系统的书广受读者欢迎。此外,他还提供有关Elasticsearch和Elastic Stack的在线培训。

目錄大綱

目錄

 

第 1章 概述 1

1.1 一個好的搜索引擎是怎樣的 1

1.2 搜索已成為新常態 2

1.2.1 結構化數據與非結構化(全文)數據 3

1.2.2 數據庫支持的搜索 4

1.2.3 數據庫與搜索引擎 5

1.3 現代搜索引擎 6

1.3.1 功能 6

1.3.2 流行的搜索引擎 7

1.4 Elasticsearch概述 7

1.4.1 核心領域 8

1.4.2 Elastic Stack 9

1.4.3 Elasticsearch的使用場景 10

1.4.4 不適合Elasticsearch的使用場景 11

1.4.5 誤解 12

1.5 業界案例 13

1.6 生成式人工智能與現代搜索 14

1.7 小結 16

第 2章 開始使用 17

2.1 往Elasticsearch中導入數據 18

2.1.1 在線書店 18

2.1.2 索引文檔 19

2.1.3 索引第 一個文檔 22

2.1.4 索引更多文檔 25

2.2 檢索數據 26

2.2.1 計算文檔數量 26

2.2.2 檢索文檔 27

2.3 全文搜索 31

2.3.1 匹配查詢:按作者找書 31

2.3.2 帶有AND運算符的匹配查詢 32

2.3.3 使用_bulk API索引文檔 34

2.3.4 多字段搜索 35

2.3.5 提升結果 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 復合查詢 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 指標聚合 47

2.6.2 桶聚合 49

2.7 小結 52

第3章 架構 53

3.1 概述 54

3.1.1 數據導入 54

3.1.2 數據處理 55

3.1.3 數據輸出 58

3.2 基本組件 58

3.2.1 文檔 58

3.2.2 索引 62

3.2.3 數據流 63

3.2.4 分片和副本 65

3.2.5 節點和集群 70

3.3 倒排索引 75

3.4 相關性 77

3.4.1 相關性分數 77

3.4.2 相關性(相似性)算法 78

3.5 路由算法 82

3.6 擴展 83

3.6.1 縱向擴展(垂直擴展) 83

3.6.2 橫向擴展(水平擴展) 84

3.7 小結 84

第4章 映射 85

4.1 概述 86

4.1.1 映射定義 86

4.1.2 首次索引文檔 87

4.2 動態映射 89

4.2.1 推斷類型的機制 90

4.2.2 動態映射的局限性 91

4.3 顯式映射 93

4.3.1 使用索引API定義映射 94

4.3.2 使用映射API更新模式 95

4.3.3 不允許修改現有字段 97

4.3.4 類型強制轉換 98

4.4 數據類型 98

4.5 核心數據類型 100

4.5.1 文本數據類型 100

4.5.2 關鍵詞數據類型 104

4.5.3 日期數據類型 106

4.5.4 數值數據類型 108

4.5.5 布爾數據類型 109

4.5.6 範圍數據類型 110

4.5.7 IP地址數據類型 111

4.6 高級數據類型 112

4.6.1 geo_point數據類型 112

4.6.2 object數據類型 114

4.6.3 nested數據類型 118

4.6.4 flattened數據類型 120

4.6.5 join數據類型 122

4.6.6 search_as_you_type數據類型 124

4.7 擁有多種數據類型的字段 126

4.8 小結 127

第5章 處理文檔 128

5.1 索引文檔 129

5.1.1 文檔API 129

5.1.2 索引機制 135

5.1.3 自定義刷新過程 137

5.2 檢索文檔 138

5.2.1 使用單文檔API 139

5.2.2 檢索多個文檔 140

5.2.3 ids查詢 141

5.3 操縱響應 142

5.3.1 從響應中移除元數據 142

5.3.2 抑制源數據 143

5.3.3 包含或排除字段 144

5.4 更新文檔 146

5.4.1 文檔更新機制 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執行批量請求 162

5.7 重新索引文檔 163

5.8 小結 164

第6章 索引操作 165

6.1 概述 166

6.2 創建索引 166

6.2.1 隱式創建索引(自動創建) 167

6.2.2 顯式創建索引(手動創建) 170

6.2.3 自定義索引設置 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 關閉索引和打開索引 180

6.5.1 關閉索引 180

6.5.2 打開索引 181

6.6 索引模板 182

6.6.1 創建可組合(索引)模板 183

6.6.2 創建組件模板 184

6.7 監控和管理索引 186

6.7.1 索引的統計信息 186

6.7.2 多個索引的統計信息 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 帶有滾動機制的索引生命周期 199

6.10 小結 202

第7章 文本分析 203

7.1 概述 204

7.1.1 查詢非結構化數據 204

7.1.2 分析器來拯救 205

7.2 分析器模塊 205

7.2.1 分詞 205

7.2.2 歸一化 206

7.2.3 分析器的結構 206

7.2.4 測試分析器 208

7.3 內置分析器 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 小結 242

第8章 搜索簡介 243

8.1 概述 243

8.2 搜索的工作原理 244

8.3 電影樣本數據 245

8.4 搜索的基礎知識 247

8.4.1 _search端點 247

8.4.2 查詢上下文和過濾上下文 248

8.5 請求和響應的結構 250

8.5.1 搜索請求 250

8.5.2 搜索響應 251

8.6 URI搜索 253

8.6.1 按片名搜索電影 253

8.6.2 搜索特定的電影 254

8.6.3 附加參數 254

8.6.4 使用Query DSL支持URI搜索 255

8.7 Query DSL 255

8.7.1 查詢樣例 256

8.7.2 通過cURL調用Query DSL 256

8.7.3 使用Query DSL進行聚合 257

8.7.4 葉子查詢和復合查詢 257

8.8 搜索功能 258

8.8.1 分頁 259

8.8.2 高亮顯示 260

8.8.3 解釋相關性分數 262

8.8.4 排序 264

8.8.5 操縱結果 267

8.8.6 跨索引和數據流搜索 271

8.9 小結 272

第9章 詞項級搜索 273

9.1 概述 273

9.1.1 詞項級查詢不進行分析 273

9.1.2 詞項級查詢示例 274

9.2 term查詢 275

9.2.1 在text類型的字段上執行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 小結 291

第 10章 全文搜索 292

10.1 概述 292

10.1.1 精確率 293

10.1.2 召回率 293

10.2 樣本數據 295

10.3 match_all查詢 295

10.3.1 構建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關鍵詞糾正拼寫錯誤 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 提升單個字段的權重 308

10.9 query_string查詢 309

10.9.1 query_string查詢中的字段 310

10.9.2 默認運算符 311

10.9.3 帶有短語的query_string查詢 312

10.10 模糊查詢 312

10.11 簡單的字符串查詢 313

10.12 simple_query_string查詢 314

10.13 小結 315

第 11章 復合查詢 316

11.1 產品樣本數據 317

11.1.1 產品模式 317

11.1.2 索引產品數據 318

11.2 復合查詢 318

11.3 bool查詢 320

11.3.1 bool查詢結構 320

11.3.2 must子句 321

11.3.3 增強must子句 322

11.3.4 must_not子句 324

11.3.5 增強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函數 344

11.7.2 script_score函數 345

11.7.3 field_value_factor函數 346

11.7.4 組合函數分數 347

11.8 小結 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 地理空間數據類型 352

12.2.1 geo_point數據類型 352

12.2.2 geo_shape數據類型 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 樣本數據 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 小結 381

第 13章 聚合 382

13.1 概述 382

13.1.1 端點和語法 383

13.1.2 結合搜索和聚合 383

13.1.3 多重聚合和嵌套聚合 384

13.1.4 忽略結果 384

13.2 指標聚合 385

13.2.1 樣本數據 385

13.2.2 value_count指標 386

13.2.3 avg指標 387

13.2.4 sum指標 388

13.2.5 min指標和max指標 388

13.2.6 stats指標 389

13.2.7 extended_stats指標 390

13.2.8 cardinality指標 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 樣本數據 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 小結 410

第 14章 集群管理 411

14.1 擴展集群 412

14.1.1 向集群中添加節點 412

14.1.2 集群健康 413

14.1.3 提高讀吞吐量 416

14.2 節點間通信 416

14.3 確定分片大小 417

14.3.1 設置單個索引 417

14.3.2 設置多個索引 418

14.4 快照 419

14.4.1 開始使用 420

14.4.2 註冊快照存儲庫 421

14.4.3 創建快照 423

14.4.4 恢復快照 424

14.4.5 刪除快照 424

14.4.6 自動化快照 424

14.5 高級配置 428

14.5.1 主配置文件 429

14.5.2 日誌選項 429

14.5.3 Java虛擬機選項 430

14.6 集群主節點 431

14.6.1 主節點 431

14.6.2 主節點選舉 432

14.6.3 集群狀態 432

14.6.4 法定人數 433

14.6.5 腦裂問題 433

14.6.6 專用主節點 434

14.7 小結 435

第 15章 性能與故障排查 437

15.1 搜索與速度問題 437

15.1.1 現代硬件 438

15.1.2 文檔建模 438

15.1.3 選擇keyword類型而不是text類型 441

15.2 索引速度問題 442

15.2.1 系統生成的ID 442

15.2.2 批量請求 442

15.2.3 調整刷新頻率 442

15.3 集群不穩定問題 445

15.3.1 集群狀態不是綠色 445

15.3.2 未分配的分片 445

15.3.3 磁盤使用閾值 447

15.4 斷路器 449

15.5 結束語 450

15.6 小結 451

附錄A 安裝 452

附錄B 攝取管道 459

附錄C 客戶端 466