我在華為工作十多年,一直從事公司核心產(chǎn)品和項目的研發(fā)工作,后來加入中興,直到今日我仍然在堅持從事研發(fā)工作。我始終認(rèn)為,技術(shù)是個人立身之本、公司發(fā)展之能、社會進步之源。
我與本書作者相識已久。他于2013年就以項目第一負(fù)責(zé)人身份,主持研發(fā)了江蘇省省級科研項目“基于物聯(lián)網(wǎng)的智能輸液系統(tǒng)”,領(lǐng)導(dǎo)團隊攻克技術(shù)難點,順利通過了專家的鑒定。我深知他是一位謙虛低調(diào),甚至可以說是淡泊名利,但技術(shù)超群,追逐技術(shù)完美和至高點的人。尤其是在大數(shù)據(jù)和商業(yè)智能領(lǐng)域,本書作者深耕多年,可以說是該領(lǐng)域難得的“掃地僧”。
當(dāng)本書作者找我寫推薦序時,我心情激動,受寵若驚!當(dāng)拿到尚未正式出版的書稿時,本著對讀者負(fù)責(zé)的態(tài)度,我花了三天時間大致通讀了一遍。本書通俗易懂的講述方式,對Elasticsearch介紹的深度與廣度,超出了所有我閱讀過的關(guān)于Elasticsearch的書籍。作者敬業(yè)、務(wù)實的作風(fēng)令我敬服。
本書全面涵蓋Elasticsearch的技術(shù),對初學(xué)者來說是一本實戰(zhàn)類的入門和進階書籍,對資深技術(shù)和運維人員是一本優(yōu)秀的工具書。同時,本書穿插著作者獨到的技術(shù)見解,集作者十年大數(shù)據(jù)經(jīng)驗之大成。
我向廣大讀者強烈推薦本書。我相信,通過閱讀本書,讀者的Elasticsearch開發(fā)能力將會得到提升。
中興高級技術(shù)專家馬士龍2020年5月
習(xí)近平同志指出: “誰掌握了數(shù)據(jù),誰就掌握了主動權(quán)!边M入21世紀(jì),以互聯(lián)網(wǎng)、大數(shù)據(jù)、商業(yè)智能為代表的新一代信息技術(shù)迅猛發(fā)展,給世界經(jīng)濟的發(fā)展帶來了新的契機。大數(shù)據(jù)被譽為未來的石油,是21世紀(jì)最為珍貴的財產(chǎn)。
大數(shù)據(jù)領(lǐng)域需要解決以下三個問題。
(1) 如何存儲數(shù)據(jù)
傳統(tǒng)的關(guān)系數(shù)據(jù)庫(MySQL、Oracle和Access等)主導(dǎo)了20世紀(jì)的數(shù)據(jù)存儲模式,但當(dāng)數(shù)據(jù)量達(dá)到太字節(jié)級,甚至拍字節(jié)級時,關(guān)系數(shù)據(jù)庫表現(xiàn)出了難以解決的瓶頸問題。為了解決海量數(shù)據(jù)存儲和分布式計算問題,Google Lab提出了Map/Reduce 和 Google File System(GFS)解決方案,Hadoop作為其中一個優(yōu)秀的實現(xiàn)框架迅速得到了業(yè)界的認(rèn)可和廣泛應(yīng)用。但Hadoop的存儲模式?jīng)Q定了其并不支持對數(shù)據(jù)的實時檢索和計算。還有其他的替代方案嗎?為何不嘗試Elasticsearch的分布式存儲功能?
(2) 如何檢索數(shù)據(jù)
在互聯(lián)網(wǎng)時代的今天,信息的價值在很大程度上取決于其是否可實時傳播和獲取。在龐大的數(shù)據(jù)倉庫中,如何快速獲取少量有用的數(shù)據(jù)是必須解決的問題。數(shù)據(jù)的實時獲取能力取決于數(shù)據(jù)的存儲格式。有什么簡單易用的實時數(shù)據(jù)獲取方案嗎?為何不嘗試Elasticsearch的實時搜索功能?
(3) 如何展現(xiàn)數(shù)據(jù)
存儲數(shù)據(jù)和檢索數(shù)據(jù)是最終目的嗎?當(dāng)然不是!數(shù)據(jù)的真正價值和最終目的是為商業(yè)決策提供有力支撐。為此,必須挖掘出數(shù)據(jù)的內(nèi)在規(guī)律,并用友好的形式呈現(xiàn)在很可能并不懂技術(shù)的決策者面前。什么樣的數(shù)據(jù)展現(xiàn)形式最有說服力,最容易為決策者所接受和理解?毫無疑問是圖和表。正所謂千言萬語不如一張圖!有什么現(xiàn)成的數(shù)據(jù)挖掘和可視化方案嗎?為何不嘗試基于Elasticsearch的可視化平臺Kibana?
本書目的
通過閱讀本書,讀者可以全面掌握Elasticsearch的相關(guān)技術(shù),使用Elasticsearch解決上述三個問題,并掌握作者十多年積累的大數(shù)據(jù)處理經(jīng)驗和技巧,成為大數(shù)據(jù)高手。
本書內(nèi)容
本書基于Elasticsearch 7編寫,共14章,前12章全面介紹Elasticsearch的安裝部署、開發(fā)應(yīng)用、性能調(diào)優(yōu)、集群監(jiān)控、設(shè)計原理、SQL接口等核心內(nèi)容。第13章介紹基于Elasticsearch的可視化平臺Kibana的基礎(chǔ)內(nèi)容。第14章介紹一個實戰(zhàn)案例。前言Elasticsearch權(quán)威指南各章具體內(nèi)容如下。
第1章介紹Elasticsearch的基本概念和基礎(chǔ)操作,主要是讓讀者快速體驗Elasticsearch的功能,對Elasticsearch有一個直觀和大體的了解。
第2章詳細(xì)介紹Elasticsearch的安裝、啟動和參數(shù)配置。本章關(guān)于參數(shù)配置部分的內(nèi)容,可以直接用于生產(chǎn)環(huán)境的集群性能調(diào)優(yōu),讀者可仔細(xì)閱讀這部分內(nèi)容,并細(xì)心體會。
第3章介紹Elasticsearch所遵循的API規(guī)范,為后續(xù)API相關(guān)部分的內(nèi)容介紹打下基礎(chǔ)。
第4~9章詳細(xì)介紹Elasticsearch的各種API功能和使用方法,幾乎每種API都配有示例。這部分內(nèi)容是本書的重點,也是讀者在實際工作中應(yīng)用最多的。
第10章介紹Elasticsearch的查詢語言Query DSL。Query DSL是Elasticsearch特定的查詢語言,所有的查詢API都支持和遵循Query DSL約定的語法。
第11章介紹Elasticsearch所支持的SQL接口。SQL接口是比Query DSL更友好、更通用的一種接口形式,是Elasticsearch未來重點發(fā)展的一個方向。
第12章介紹搜索引擎的原理和Elasticsearch的分布式設(shè)計原理。通過閱讀本章內(nèi)容讀者可進一步理解Elasticsearch的內(nèi)部機制。
第13章介紹Elasticsearch的可視化平臺Kibana的基礎(chǔ)內(nèi)容,讓讀者對Kibana有一個基本的理解。
第14章介紹一個實戰(zhàn)案例,讓讀者進一步理解如何應(yīng)用Elasticsearch進行系統(tǒng)設(shè)計。
本書特色
重點介紹可直接用于工作中的Elasticsearch的應(yīng)用開發(fā)方法和技巧。
通過突出的形式呈現(xiàn)作者多年實際使用Elasticsearch的心得體會。
對書中代碼進行詳細(xì)注釋,降低閱讀門檻。
通過圖解的形式介紹Elasticsearch復(fù)雜的內(nèi)部設(shè)計原理和實現(xiàn)機制。
敘述方式通俗易懂。
本書讀者
Elasticsearch的入門人員。
想深入了解Elasticsearch的技術(shù)人員。
準(zhǔn)備從事或正在從事搜索引擎技術(shù)工作的技術(shù)人員。
準(zhǔn)備從事或正在從事大數(shù)據(jù)存儲、搜索、分析工作的技術(shù)人員。
Elasticsearch集群運維人員。
勘誤和支持
在互聯(lián)網(wǎng)時代,技術(shù)日新月異。有可能你剛買的書還沒閱讀完,書中涉及的技術(shù)就被升級,甚至被淘汰了。加之筆者水平有限,時間倉促,書中不可避免地會存在遺漏,懇請讀者將遇到的問題或建議反饋給出版社,我們對此萬分期待。
作者2020年5月于上海
第1章快速入門1
1.1基本概念1
1.2安裝部署4
1.3開始使用集群6
1.3.1集群健康信息6
1.3.2列出集群中的索引信息7
1.3.3創(chuàng)建一個索引8
1.3.4索引和查詢文檔8
1.3.5刪除索引9
1.4修改數(shù)據(jù)10
1.4.1索引和覆蓋文檔10
1.4.2更新文檔11
1.4.3刪除文檔12
1.4.4批量操作12
1.5探索數(shù)據(jù)12
1.5.1加載數(shù)據(jù)集13
1.5.2搜索API13
1.5.3Elasticsearch查詢語言15
1.5.4搜索文檔17
1.5.5條件過濾21
1.5.6聚合查詢22
第2章安裝部署27
2.1安裝JDK27
2.2安裝Elasticsearch28
2.2.1調(diào)整Linux系統(tǒng)的相關(guān)參數(shù)
設(shè)置 28
2.2.2創(chuàng)建用戶28
2.2.3下載Elasticsearch29
2.3配置Elasticsearch29目錄Elasticsearch權(quán)威指南
2.3.1配置文件的位置30
2.3.2配置文件的格式30
2.3.3環(huán)境變量替換30
2.3.4設(shè)置JVM參數(shù)31
2.3.5安全設(shè)置31
2.3.6創(chuàng)建密鑰庫32
2.3.7列出密鑰庫中的設(shè)置項32
2.3.8添加字符串設(shè)置33
2.3.9添加文件設(shè)置33
2.3.10刪除設(shè)置屬性33
2.3.11可重載的安全設(shè)置33
2.3.12日志配置33
2.3.13配置日志級別35
2.3.14JSON日志格式37
2.4跨集群復(fù)制設(shè)置(用于多個集群間的數(shù)據(jù)恢復(fù))37
2.4.1遠(yuǎn)程恢復(fù)設(shè)置37
2.4.2高級遠(yuǎn)程恢復(fù)設(shè)置37
2.4.3索引生命周期管理設(shè)置38
2.4.4序列號設(shè)置38
2.4.5監(jiān)控功能設(shè)置38
2.4.6一般的監(jiān)控設(shè)置38
2.4.7監(jiān)控收集設(shè)置39
2.4.8本地導(dǎo)出器設(shè)置40
2.4.9HTTP導(dǎo)出器設(shè)置40
2.4.10XPack監(jiān)控TLS/SSL相關(guān)設(shè)置42
2.4.11XPack監(jiān)控TLS/SSL密鑰和可信證書設(shè)置42
2.4.12PEM編碼文件42
2.5重要的Elasticsearch配置43
2.5.1數(shù)據(jù)和日志存放目錄43
2.5.2集群名稱43
2.5.3節(jié)點名稱44
2.5.4網(wǎng)絡(luò)設(shè)置44
2.5.5重要節(jié)點發(fā)現(xiàn)和集群初始化設(shè)置44
2.5.6Heap設(shè)置45
2.5.7JVM heap dump目錄設(shè)置46
2.5.8GC日志設(shè)置46
2.5.9臨時文件存儲目錄46
2.5.10JVM致命錯誤日志設(shè)置47
2.6重要的系統(tǒng)參數(shù)設(shè)置47
2.6.1配置系統(tǒng)設(shè)置47
2.6.2禁用交換區(qū)48
2.6.3文件描述符49
2.6.4虛擬內(nèi)存49
2.6.5線程數(shù)量限制50
2.6.6DNS緩存設(shè)置50
2.6.7JNA臨時目錄掛載位置50
2.7啟動檢查50
2.7.1Heap大小檢查51
2.7.2文件描述符檢查51
2.7.3內(nèi)存鎖定檢查51
2.7.4線程數(shù)限制核查52
2.7.5最大文件大小檢查52
2.7.6最大虛擬內(nèi)存檢查52
2.7.7最大mmap映射區(qū)域數(shù)量檢查53
2.7.8JVM模式檢查53
2.7.9JVM垃圾收集機制檢查53
2.7.10系統(tǒng)調(diào)用過濾器檢查53
2.7.11發(fā)現(xiàn)功能配置檢查54
2.8啟動和停止Elasticsearch54
2.9集群水平擴展54
第3章API規(guī)范56
3.1多索引56
3.2日期數(shù)學(xué)格式56
3.3通用選項58
3.3.1格式化搜索結(jié)果58
3.3.2可讀輸出58
3.3.3格式化日期值58
3.3.4返回信息過濾59
3.3.5展開設(shè)置63
3.3.6布爾值64
3.3.7數(shù)字值64
3.3.8時間單位64
3.3.9數(shù)據(jù)單位65
3.3.10縮略處理65
3.3.11距離單位65
3.3.12模糊性66
3.3.13啟用堆棧跟蹤66
3.3.14查詢字符串中的請求正文67
3.3.15ContentType要求67
3.4基于URL的訪問控制67
第4章操作文檔69
4.1讀寫文檔69
4.1.1基本寫模型70
4.1.2寫流程錯誤處理70
4.1.3基本讀模型71
4.1.4讀流程錯誤處理71
4.1.5一些簡單的知識點72
4.2索引API72
4.2.1自動創(chuàng)建索引73
4.2.2ID自動生成74
4.2.3路由75
4.2.4分發(fā)75
4.2.5等待活動分片75
4.2.6detect_noop參數(shù)76
4.3GET API76
4.3.1實時性77
4.3.2字段選擇77
4.3.3存儲字段77
4.3.4直接獲取_source 78
4.3.5路由78
4.3.6preference參數(shù)79
4.3.7refresh參數(shù)79
4.3.8分發(fā)79
4.3.9版本支持79
4.4刪除API79
4.5查詢刪除80
4.5.1URL參數(shù)82
4.5.2返回體82
4.5.3任務(wù)API83
4.5.4取消任務(wù)API84
4.5.5動態(tài)調(diào)整API85
4.5.6切片85
4.6更新API87
4.6.1使用script更新88
4.6.2部分字段更新89
4.6.3避免無效更新89
4.6.4upsert元素90
4.6.5scripted_upsert參數(shù)91
4.6.6doc_as_upsert 參數(shù)92
4.7查詢更新92
4.7.1URL參數(shù)95
4.7.2請求體95
4.7.3任務(wù)API96
4.7.4取消任務(wù)API96
4.7.5動態(tài)調(diào)整API96
4.7.6切片96
4.7.7獲取新屬性96
4.8MGet API98
4.8.1_source 過濾99
4.8.2存儲字段100
4.8.3路由100
4.8.4重新索引101
4.9跨集群索引106
4.10批量操作API107
4.10.1路由110
4.10.2更新110
4.11Term向量111
4.11.1返回值111
4.11.2Term過濾112
4.11.3行為分析114
4.11.4獲取多個文檔的Term向量118
4.12refresh參數(shù)119
4.12.1如何選擇refresh 的值120
4.12.2強制刷新120
4.13樂觀并發(fā)控制121
第5章搜索數(shù)據(jù)123
5.1基本概念和機制123
5.2搜索API125
5.3URI模式125
5.4Body模式126
5.4.1Explain 參數(shù)128
5.4.2折疊結(jié)果131
5.4.3對結(jié)果分頁133
5.4.4高亮結(jié)果133
5.4.5索引加權(quán)146
5.4.6命中文檔嵌套146
5.4.7分?jǐn)?shù)值過濾154
5.4.8查詢命名154
5.4.9post_filter過濾155
5.4.10分片選擇157
5.4.11重排序158
5.4.12腳本字段160
5.4.13滾動查詢161
5.4.14search_after參數(shù)164
5.4.15搜索類型166
5.4.16排序166
5.4.17_source 字段過濾173
5.4.18存儲字段174
5.4.19total返回值詳解175
5.4.20版本176
5.5返回搜索分片信息177
5.6Count API177
5.7Validate API178
5.8調(diào)試搜索請求179
第6章聚合180
6.1度量值聚合180
6.1.1均值聚合181
6.1.2帶權(quán)重的均值聚合183
6.1.3計數(shù)聚合185
6.1.4統(tǒng)計聚合187
6.1.5地理范圍聚合188
6.1.6地理距離質(zhì)心聚合189
6.1.7最大值聚合、最小值聚合、和值聚合192
6.1.8百分位數(shù)聚合192
6.1.9百分比排名聚合197
6.1.10腳本聚合198
6.1.11頂部命中聚合200
6.1.12單值度量聚合205
6.1.13中位數(shù)絕對偏差聚合206
6.2存儲桶聚合207
6.2.1鄰接矩陣聚合207
6.2.2區(qū)間聚合209
6.2.3日期區(qū)間聚合214
6.2.4IP區(qū)間聚合217
6.2.5Term聚合221
6.2.6直方圖聚合227
6.2.7過濾器聚合231
6.2.8多過濾器聚合232
第7章查看API235
7.1查看子目錄235
7.2應(yīng)用實例及參數(shù)236
7.2.1v參數(shù)236
7.2.2help參數(shù)236
7.2.3h參數(shù)236
7.2.4常用接口匯總236
第8章集群 API238
8.1節(jié)點過濾238
8.2節(jié)點類型239
8.3常用API241
8.3.1查看集群及節(jié)點信息241
8.3.2動態(tài)更新集群設(shè)置242
8.3.3重置路由242
第9章索引 API244
9.1創(chuàng)建索引API244
9.1.1索引設(shè)置244
9.1.2映射245
9.1.3別名245
9.2刪除索引246
9.3判斷索引是否存在246
9.4打開關(guān)閉索引246
9.5收縮索引246
9.6映射247
9.6.1數(shù)據(jù)類型248
9.6.2映射屬性設(shè)置253
第10章特定域查詢語言(DSL)258
10.1查詢和過濾上下文258
10.1.1查詢上下文258
10.1.2過濾上下文258
10.2匹配所有文檔259
10.3全文檢索260
10.3.1匹配查詢260
10.3.2模糊匹配260
10.3.3短語匹配查詢261
10.3.4查詢字符串261
第11章SQL接口265
11.1功能體驗265
11.2術(shù)語和約定266
11.3SQL REST API267
11.3.1返回數(shù)據(jù)格式267
11.3.2過濾結(jié)果269
11.3.3支持的參數(shù)270
11.4SQL Translate API270
11.5SQL語法介紹271
11.5.1詞法結(jié)構(gòu)271
11.5.2SQL命令275
第12章Elasticsearch原理剖析283
12.1為什么需要搜索引擎283
12.2搜索引擎雛形283
12.3搜索引擎實現(xiàn)原理283
12.3.1分析284
12.3.2Lucene倒排索引284
12.3.3搜索過程284
12.3.4結(jié)果排序286
12.4分布式原理287
12.4.1分布式索引過程288
12.4.2分布式檢索過程288
12.4.3分布式局部更新文檔288
12.5節(jié)點發(fā)現(xiàn)和集群形成機制289
12.5.1集群形成過程289
12.5.2重要配置291
第13章Kibana入門介紹292
13.1安裝Kibana292
13.1.1下載Kibana292
13.1.2簡單配置Kibana292
13.1.3啟動Kibana293
13.2基礎(chǔ)操作293
13.2.1加載樣例數(shù)據(jù)集293
13.2.2探索航班數(shù)據(jù)集294
13.2.3過濾數(shù)據(jù)295
13.2.4查詢數(shù)據(jù)295
13.2.5探索數(shù)據(jù)296
13.2.6編輯可視化組件297
13.3構(gòu)建Dashboard298
13.3.1導(dǎo)入樣例數(shù)據(jù)298
13.3.2定義索引模式300
13.3.3可視化組件介紹302
13.3.4構(gòu)建Dashboard302
第14章構(gòu)建集約化日志管理平臺305
14.1Elastic stack介紹305
14.2日志的特征305
14.2.1日志的重要性305
14.2.2日志的特征306
14.2.3日志的復(fù)雜性306
14.3集約化解決方案306
附錄A參考資料及網(wǎng)址309
附錄B中文分詞算法介紹310附錄CHead安裝312