如何系統(tǒng)的學(xué)習(xí) Elasticsearch ?
這是上一次技術(shù)直播里六個子主題中的最后一個主題的擴(kuò)展版本。近期又有讀者問到類似問題,我認(rèn)為非常有必要花長時間梳理后跟大家分享一下。
1、基礎(chǔ)篇:零基礎(chǔ)如何學(xué) Elasticsearch ?
常見問題:“ES 零基礎(chǔ)入門書籍看什么比較好?”
認(rèn)知前提:書籍的速度已遠(yuǎn)落后于 ES 版本更新的速度。ES 幾乎每個月發(fā)布一個版本,更新很快。
市面上的書籍,尤其國外翻譯書籍還大多是:1.x,2.x,5.x ,6.x 的版本,更新較慢。

有幾本7.X的書籍,我沒有買實體書,不太有發(fā)言權(quán)。不過:1.X——6.X全部實體書我都買了,也都看完了,可以說有發(fā)言權(quán)。
相比于實體書籍,我更推薦官方文檔,但鑒于“零基礎(chǔ)”讀者對英文的恐懼,書籍、視頻、學(xué)習(xí)路線等推薦列表如下:
1.1 零基礎(chǔ)書籍推薦
推薦1:《這就是搜索引擎》

這是一本介紹搜索引擎原理的書,有了搜索引擎原理的認(rèn)知再去理解 Elasticsearch 會有“居高臨下”俯視的感覺。
推薦理由 1:長銷書(比暢銷書高一個level)、作者是中科院軟件所博士、包含大量圖解、通俗易懂。 推薦理由 2:貌似在 medcl 大神(Elasti中文社區(qū)創(chuàng)始人、Elastic中國第1位員工) 書架也有這本書。
推薦 2:《Elasticsearch 權(quán)威指南》2.X 中文翻譯電子書

地址如下:
https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html
推薦理由 1:雖然基于 2.X,但底層原理的介紹并不過時,值得一看。 推薦理由 2:wood大叔(攜程架構(gòu)師、Elastic 中文社區(qū)排名第1名)也曾經(jīng)多次推薦且他看過2遍以上+。
推薦 3:《Elasticsearch 實戰(zhàn)》紙質(zhì)書
這本書是《Elasticsearch IN ACTION》 的翻譯版本。
推薦理由 1:作者之一已入職 Elasticsearch。 推薦理由 2:翻譯作者是極客時間數(shù)學(xué)課的作者:黃申博士,翻譯還可以,至少比《 Lucene 實戰(zhàn) 》翻譯好 100 倍。 推薦理由 3:這本書是 Medcl 大神寫的序。
推薦4:結(jié)合 ECE 考綱、《Elasticsearch 最少必要知識》電子教程啃官方文檔。
《Elasticsearch 最少必要知識》 地址:
https://www.yuque.com/deep_elasticsearch/tzcm9n

推薦理由 1:ECE 認(rèn)證考試是以考帶練,入門學(xué)習(xí)和進(jìn)階的絕佳方式,沒有之一。 推薦理由 2:單獨看官方文檔不知道重點,而 ECE 考綱就是重點。 推薦理由 3:單獨看官方文檔 + ECE大綱沒有頭緒,《Elasticsearch 最少必要知識》幫梳理清楚了。
1.2 零基礎(chǔ)入門視頻教程推薦
推薦 1:阮一鳴老師 7.1+ 極客時間視頻
地址:https://time.geekbang.org/course/intro/100030501
推薦 2:魏彬老師慕課網(wǎng)的視頻(6.X 版本)
地址:https://coding.imooc.com/class/181.html
推薦 3:李猛老師視頻課程(最新版本)
地址:https://www.gupaoedu.cn/course-es.html
推薦 4:中華石杉老師的 2.X 視頻教程
地址:https://www.roncoo.com/view/80
推薦 5:死磕 Elasticsearch 最少必要知識系列直播(7.x + 版本,推進(jìn)中)
地址:http://t.cn/RmwM3N9
因為每個人的“口味”不同,正所謂“眾口難調(diào)”,再好口碑的課程也有人覺得“雞肋”。
所以,上面列舉了幾乎所有 Elasticsearch 視頻教程,總有適合你的一款。
1.3 “零基礎(chǔ)”是相對的、不要怕!
所謂“零基礎(chǔ)”,Mysql 數(shù)據(jù)庫的一些常規(guī)操作基礎(chǔ)是有的吧?
推薦結(jié)合已有知識體系,類比學(xué)習(xí):
| MySQL | ElasticSearch |
|---|---|
| Table | Index |
| Table | Type |
| Row | Document |
| Column | Field |
| Schema | Mapping |
| Index | Everything is indexed |
| SQL | Query DSL |
| select * from … | GET http://… |
| update table set … | POST http://… |
| group by、avg、sum | Aggregations |
| 去重 distinct | cardinality |
| 數(shù)據(jù)遷移 | reindex |

通過類比:就可以由已有認(rèn)知過度到未知認(rèn)知,便于快速習(xí)得技能。
建議把基礎(chǔ)內(nèi)容分為兩部分,
part 1:增刪改查
這一部分相對好理解,或者可以借助已有知識體系類比加深理解。
進(jìn)一步細(xì)分為:
索引的增刪改查
文檔的增刪改查
Mapping 的增刪改查
template 的增刪改查
......
這些知識有了,基本的操作基本都經(jīng)過手了。
part 2:非增刪改查
進(jìn)一步細(xì)分為:
數(shù)據(jù)預(yù)處理 Ingest
自定義分詞
檢索分類
聚合分類
節(jié)點角色分類
集群備份與快照
集群安全
跨集群部署
冷熱集群架構(gòu)
跨機(jī)房跨機(jī)架檢索
......
有了上面的分類,一個知識點一個知識點的攻克就可以了。
1.4 形成自己的學(xué)習(xí)路線圖
我之前梳理的學(xué)習(xí)路線圖如下:
重磅 | Elasticsearch7.X學(xué)習(xí)路線圖
學(xué)習(xí)路線因人而異,上面的路線圖僅供參考。
需要結(jié)合自己的實踐和認(rèn)知,找到屬于自己的一條學(xué)習(xí)路線。
1.5 “零基礎(chǔ)”學(xué)習(xí)方法論——光看不夠,搭建環(huán)境 + 練起來更重要!
書籍和視頻一個道理,看再多不如練習(xí)一遍。
這里強(qiáng)調(diào)的練:是《刻意練習(xí)》書籍中推崇的概念“練習(xí)”的練,不是盲目的練習(xí)、而是有目的、有目標(biāo)的刻意練習(xí)。
你看星球考過的 46 位認(rèn)證工程師,都是刻意練習(xí) + 對官方文檔非常熟練的結(jié)果。
最簡單、最輕量化的方式:搭建好環(huán)境(單節(jié)點 Elasticsearch + kibana),用 kibana 自帶的三個示例數(shù)據(jù)就可以練習(xí)起來。
部署方式一:如果 PC 內(nèi)存足夠,搭建個虛擬機(jī)就可以開搞了。
部署方式二:如果對 docker 很熟悉,docker 部署 ELK 也非??臁?/span>
部署方式三:一、二都不喜歡,自己買個云服務(wù)器(最少2核4G)就夠了。
結(jié)合自己的需求,用自己最擅長的方式。
以上,期望有助于你快速入門!
2、進(jìn)階篇:實踐加深認(rèn)知
基礎(chǔ)篇強(qiáng)調(diào)練起來。進(jìn)階篇會進(jìn)一步強(qiáng)調(diào)“練”的重要性。
2.1 刻意學(xué)習(xí)一遍官方文檔
程序猿DD大佬說過:要切實的落實某個框架,全面了解和掌握的方式永遠(yuǎn)都是“官方文檔 + 學(xué)會讀源代碼”。
是的,如果說入門我們可以看博客、看視頻,站在別人“肩上”走的更快。那么進(jìn)階的話,系統(tǒng)的過一遍官方文檔就很有必要了。
如果感覺上來就全英文有些吃力,可以 7.X 最新版本的英文結(jié)合 2.X 中文文檔一起來看。

如果感覺吃力,可以看一下技術(shù)博客資源:
全網(wǎng)最牛逼的 Elasticsearch 天團(tuán)博客集合
2.2 實戰(zhàn)中刻意練習(xí)
在產(chǎn)品或項目架構(gòu)、開發(fā)、運(yùn)維的過程中,遇到問題,不要僅局限在解決問題本身,多刨根問底,問問底層原理是什么?
舉例 1:range query 對數(shù)值類型還是 keyword 類型來講,哪種數(shù)據(jù)類型會更快? 舉例 2:index sort 真的很快嗎?適用于什么場景?底層是如何實現(xiàn)的?
2.3 上學(xué)下幫的練習(xí)
社區(qū)中每天都有來自全國 N 多公司線上實戰(zhàn)問題,看看別人都遇到了哪些問題?用了哪些技術(shù)棧?
國內(nèi)Elastic社區(qū)地址:https://elasticsearch.cn/
2.3.1 向上學(xué)
向比自己厲害的人學(xué)習(xí)。
社區(qū)社群中有大量的大牛,即便很“偏門”、“刁鉆”的問題也能有非常獨到的見解和思路,這就很值得我們?nèi)W(xué)習(xí)。
學(xué)習(xí)什么?
學(xué)習(xí)他們拆解問題、分析問題、定位問題以及解決問題的思路。
2.3.2 向下幫
幫助需要幫助的人,大家都有知識盲區(qū)。幫助別人的同時個人也能得到飛速的提升。
正所謂:“講一遍有一遍的收貨”。
對于求助人來說,“能把問題講清楚、問題就解決了一大半”。
而對于解答者來說:“輸出倒逼輸入,幫助別人排查問題,本質(zhì)就是進(jìn)一步提升自己的認(rèn)知”。別的不說,社區(qū) wood 大叔的文章基本就是解決自己或者別人問題而累積的干貨,對 Elastic 學(xué)習(xí)者來說大有裨益。

你有一個蘋果,我有一個橘子,我們一交換,每個人得到的都是兩種不同味道的水果。
你知道一個知識點,我知道另外一個知識點,我們一交換,每個人得到的是兩個不同的知識點,甚至有可能擴(kuò)展彼此的認(rèn)知邊界。
不要忽視“重復(fù)的力量”,舉個例子:“小朋友聽兒歌,基本2-3遍+就能跟著哼出相應(yīng)的語調(diào)”,這就是聽的多、重復(fù)的次數(shù)多的原因。一樣的,我們給別人講解的多了之后,自己記憶的會越來越牢固。
2.4 逐步構(gòu)建屬于自己的知識體系
經(jīng)常收到的問題是:“知識不成體系,學(xué)的東西都很散,不用就忘記了”。
是這樣的,現(xiàn)在網(wǎng)絡(luò)資源非常多,甚至適合上手的項目、源碼都是開源的,所以上手不是難事。
遇到問題就去通過搜索引擎檢索答案本也無可厚非,但是看到的內(nèi)容、學(xué)到的內(nèi)容永遠(yuǎn)不是全貌。
所謂“只見樹木、不見森林”大抵也是這個意思。
舉個實戰(zhàn)例子:
模板 template 在數(shù)據(jù)量不大、索引不多的情況下根本用不到。
由于我們的思維慣性,會一直認(rèn)為創(chuàng)建索引、指定 Mapping 順理成章。
當(dāng)遇到海量數(shù)據(jù)的時候,可以通過腳本創(chuàng)建Mapping。項目結(jié)束或者其他什么時間,才發(fā)現(xiàn)有template。最后慨嘆:“早知道有template,我就不用維護(hù)那么多腳本了”。
Ingest 數(shù)據(jù)預(yù)處理,在寫入前處理數(shù)據(jù)的妙處,用過才知道很爽、很方便!
同樣是思維慣性,不知道 Ingest 的話,總感覺數(shù)據(jù)處理的操作屬于前置 ETL 的環(huán)節(jié),于是自己寫代碼實現(xiàn):數(shù)據(jù)字段的拆解、截取、更換字段名等操作。
實際上,這些操作用 ingest 幾行語句就能快速搞定。
知識體系的梳理,我推薦用腦圖,定期的把一些零散的知識點畫一畫。比如如下的幾個點細(xì)分知識點非常瑣碎,需要自己梳理建立完整體系認(rèn)知。


Elasticsearch 全景技術(shù)體系腦圖

畫的多了,就形成了自己的知識體系。
如下視頻是我用 30 + 分鐘的時間徒手敲了《Elasticsearch 最少必要知識》的核心知識點,這也是當(dāng)前 Elastic 認(rèn)證考試考綱的全部知識點。
2.5 以考帶練
可以考慮參加 Elastic 認(rèn)證考試,通過以考代練的方式,強(qiáng)迫自己夯實基本功。
之前分享過認(rèn)證考試的文章比較多,不再贅述。
對認(rèn)證感興趣的推薦閱讀:
如下是 BAT 大佬對認(rèn)證工程師的評價,至少在你簡歷不那么出彩的時候,認(rèn)證工程師算是一個簡歷的亮點。

有了這個亮點,入大廠的敲門磚才更有力!
死磕 Elasticsearch 知識星球已通過 46 位 認(rèn)證工程師(截止 2021年3月11日),其中三位拿到了大廠高薪 offer:
微軟 offer 阿里 offer 拼多多 offer



以上,通過進(jìn)一步的刻意練習(xí),助力構(gòu)建知識體系,期望有助于你快速進(jìn)階!
3、源碼原理篇:掌握本質(zhì),一通百通
目前來看只有互聯(lián)網(wǎng)大廠才會做 Elasticsearch 內(nèi)核級別優(yōu)化,所以大廠面試的第一個問題通常是:“有沒有看過 Elasticsearch 源碼?”。然后再問一些底層原理、優(yōu)化等實戰(zhàn)問題。
PS 補(bǔ)充一點:大廠必然會問基礎(chǔ)算法,建議提前力扣刷題備戰(zhàn)。
單純的讀源碼容易碰壁、經(jīng)常會是“一頭霧水、不知所云”。所以建議結(jié)合實戰(zhàn)問題,帶著問題看源碼。
也推薦開發(fā)一款 Elasticsearch 插件,開發(fā)的過程加強(qiáng)對 Elasticsearch 代碼和接入邏輯的認(rèn)知。
3.1 推薦1:張超老師的《Elasticsearch源碼解析與優(yōu)化實戰(zhàn)》書

推薦原因:市面上寫Elasticsearch 源碼的唯一一本書,豆瓣評分7.5+。 推薦原因2:我請過張超老師做過一次技術(shù)分享,球友們都一致反饋他研究的很深。
結(jié)合源碼解讀書,有必要的時候再去翻源碼,這樣學(xué)習(xí)相對更快,至少有了脈絡(luò)可循、能少走彎路。
3.2 推薦2:《Lucene 實戰(zhàn)》

Elasticsearch 底層是 Lucene,掌握 Lucene 的原理對于理解Elasticseach 非常有幫助。
翻譯實在不敢恭維,但貌似實體Lucene 書實在是稀缺,可以大致看一下。
3.3 推薦3:《Lucene 原理與代碼分析完整版》電子書

以上,期望有助于你理解底層原理!
4、系統(tǒng)學(xué)習(xí)的誤區(qū)
4.1 買課內(nèi)卷化

開工忙非常理解。但是,買課的目的得進(jìn)一步明確:0.1元課、1元課、9.9元課、19.9元課等都非常多,各大機(jī)構(gòu)競爭已經(jīng)出現(xiàn)了白熱化。我自己也幫推課,站在 IT 培訓(xùn)公司 或者 IT 知識付費公司推廣的角度能理解,吸引用戶無可厚非。
但,之前咱們也強(qiáng)調(diào)過,買課不是目的,和買書一個道理,再直白點說:
買了書不看和買了課不看,是一模一樣的邏輯。
買的時候心里是這樣的:
X 天掌握一門技能,太牛逼了。 X 天后,我就成大牛了。 X 天后,我就建立完整知識體系了。 我擦,業(yè)界大佬的課,得學(xué)啊! 我擦,群里球友或身邊同事都買了,我也得買啊。 我擦,買它買它買它。。。。
買了那一刻瞬間的感覺,很舒服、很踏實、仿佛產(chǎn)生了中彩票的幻覺。
但是,買完之后沒多久呢?
XXX,你的bug,過來看一下。 XXX,年度規(guī)劃會議,記得參加。 XXX,產(chǎn)品需求討論會議,記得參加。 XXX,架構(gòu)選型會議,記得參加。 XXX,開發(fā)問題討論、敲代碼。。。 XXX,不行,今天任務(wù)還沒完成,加班中。。。
如此反復(fù),進(jìn)入了 996 的死循環(huán)。
幾天后,或者幾十天后,又發(fā)現(xiàn)課程推廣廣告,哎,我不是買過這門課,我擦,忘記聽了、忘記學(xué)了。
課不在多,能學(xué)才靈!
課不在多,夠練就行!
練起來比買起來更重要。
買不可怕,買了不學(xué)才可怕!
學(xué)不可怕,學(xué)了不練才可怕!
練不可怕,練了不用才可怕!
4.2 注意力分散
我多次引用過李笑來的話:注意力 > 時間 > 金錢。
真的是這樣——你的注意力在哪里?你的成就就在哪里!
過年的時候跟朋友聊天提到了讀書的問題,“不怕你笑話,我好幾年沒有讀過一本書了”。

我是非常能理解的,工作之后加上結(jié)婚有了孩子之后,時間真的是很散的,如果工作是996的話,沒時間讀書真的是很務(wù)實的一句話。
要注意的是:正如羅胖所說的——“國民總時間”是恒定的。
如果不讀書,工作、生活或者其他方面有所專長足以養(yǎng)家糊口、家庭富足無可厚非。但,怕就怕把相對僅有的稀缺的休閑時間用在了:刷視頻、刷新聞上。
即便我能堅持寫博客,但我始終認(rèn)為我的自制力很差,容易刷視頻上癮。之前采取暴力的方式卸載掉APP,實際上不能本質(zhì)解決問題。
現(xiàn)在緩和的解決方案,給自己休閑(刷視頻、刷新聞)定個時間,過了點就得干正事:讀書、學(xué)習(xí)、實踐等。
并且,效果不好的話,一言不合我就會打卡學(xué)習(xí),通過打卡一句話總結(jié)每天干的事情,很笨但很有效。
推薦閱讀:打卡學(xué)習(xí)——應(yīng)對焦慮的一劑良方!
最后,我想說:把注意力集中在長期的、有意義的事情上。越集中、越幸運(yùn)!
5、小結(jié)
說是系統(tǒng)的學(xué),不知道大家看完了感覺是怎么樣的?夠不夠系統(tǒng)?
沒有普適的方法,大家結(jié)合自己的實際業(yè)務(wù)不斷刻意練習(xí),找到屬于自己的方法論才是王道!
畢竟是一家之言,如果有不對的地方,歡迎指正。也歡迎大家留言交流學(xué)習(xí)心得、方法等。
推薦:
中國最大的 Elastic 非官方公眾號
點擊查看“閱讀原文”,更短時間更快習(xí)得更多干貨。和全球 1000 位+ Elastic 愛好者(含中國 50%+ Elastic 認(rèn)證工程師)一起每日精進(jìn) ELK 技能!


