為什么說程序員一定要看 ElasticSearch 源碼

前提

人工智能、大數據快速發(fā)展的今天,對于 TB 甚至 PB 級大數據的快速檢索已然成為剛需,大型企業(yè)早已淹沒在系統(tǒng)生成的浩瀚數據流當中。大數據技術業(yè)已集中在如何存儲和處理這些海量的數據上。Elasticsearch 作為開源領域的后起之秀,從2010年至今得到飛躍式的發(fā)展。 Elasticsearch 以其開源、分布式、RESTFul API 三大優(yōu)勢,已經成為當下風口中“會飛的豬”。

在我的電腦本地寫了幾篇 ElasticSearch 的源碼解析了,回過頭來想想應該也寫一篇為何我會去看它的源碼?

為什么呢?下面我講講自己從接觸搜索到現在看源碼的過程!

第一次接觸搜索

搜索,我們首先想到的是搜索引擎:Google、百度,這個就算是接觸的最早的了。

我自己項目里面接觸搜索是大二暑假那時練習的一個項目,里面用了 Solr,然后當時自己也稍微了解了下,并用在了項目里面。

第二次接觸搜索

從第一次項目里面用到了搜索,后面自己對這方面就比較感興趣。再一次接觸搜索是實習的時候進公司。第一件事情就是被老大叫的去學習搭建 Elasticsearch 集群,于是乎,電腦就裝了三個虛擬機,Elasticsearch 就一個個的裝了起來了。也記錄了博客下來:Elasticsearch 系列文章(二):全文搜索引擎 Elasticsearch 集群搭建入門教程,當時搭建的時候 ES 的版本才剛從 2.x 升級到 5.x 呢,截止本文時間 2018.08.04,現在 ES 版本已經是到 7.0 了,這版本升級是真的的快,這也說明了 ES 的活躍度很高,背后的開發(fā)工程師維護也快,側面突出要去看它源碼的重要性。

當時自己在本地測試搭建集群后,給分配了另外一個任務就是去了解 ES 中的自帶分詞、英文分詞、中文分詞的相同與差異、以及自己建立分詞需要注意的點。于是乎:當時在公司 wiki 貢獻了這篇文章:Elasticsearch 系列文章(一):Elasticsearch 默認分詞器和中分分詞器之間的比較及使用方法。這篇文章幾乎已經把市面上所有的分詞都寫進去了,包括他們的相同點、不同點、如何使用、如何自定義分詞器。

然后還有就是我同組的一個同學,她的任務就是 2.x 升級到 5.x 中 mapping 的大改變有哪些?后面我也看了她總結的文檔,很詳細!

在這次接觸了 ES 后,因為我自己本地已經有環(huán)境了,所以自己測試了一些功能,給 ES 安裝插件(IK、x-pack、支持 sql 的、),后面自己也去測試 ES 的索引、文檔、REST API。

第三次接觸搜索

由于是自己對其感興趣,所以后面就去找了些相關的視頻,比如:中華石衫的《Elasticsearch 頂尖高手系列-高手進階篇》幾個系列視頻教程個人感覺還是不錯的,看完這幾個系列估計入門肯定是沒有問題的。版權原因,不提供下載鏈接。

另外就是《Elasticsearch 權威指南》翻譯的版本,翻譯還沒有全,可以去看看,講得很詳細的,市面上應該還沒有哪本書講的有這么清楚,如果英文不錯的可以直接啃英文吧。

還有就是官網的文檔了,非常非常詳細,還有 demo,2.x 版本的是有中文的官方文檔,可以湊合著看。

學習新東西,要學會先看官方文檔,何況 Elasticsearch 的官方文檔這么詳細呢!

第四次接觸搜索

后面實習的時候,又分配了公司中間件監(jiān)控的兩個模塊:Elasticsearch 和 HBase 組件的監(jiān)控。于是乎,再次有機會接觸 Elasticsearch 了,這次主要還是利用 Elasticsearch 自帶的 REST API :_cluster/health 、_cluster/stats、_nodes、_nodes/stats 去獲取到集群的健康信息、節(jié)點信息(內存、CPU、網絡、JVM等信息)。為了做這個項目自己當時也去找了網上很多類似的文章參考常用的監(jiān)控指標和他們是怎么做監(jiān)控的。我當時的任務主要還是采集信息,然后存到公司大項目的 influxdb 中,最后用 grafana 展示出來,后面我組的運維大佬給我看了監(jiān)控大盤,界面挺酷炫的,哈哈哈,牛逼!

第五次接觸搜索

后面就沒怎么接觸 ElasticSearch 了,一直忙著其他的東西。

實習辭職后,畢業(yè)出來找工作的那段日子,自己又花了一星期稍微過了一遍 《Elasticsearch 權威指南》 這本書,話說還幫我面試挺過不少關呢,哈哈哈!因為我項目里寫了 Elasticsearch 的監(jiān)控,如果你對 Elasticsearch 其他的不熟悉,面試官稍微問些其他關于這方面的,那就不知道就有點尷尬了,所以還是準備了下??赐曛髴睹嬖嚊]多大的問題。

第六次接觸

看起來我接觸了 Elasticsearch 很久了,其實真正項目里面是沒有用到 Elasticsearch 做過項目的,沒有用到 Elasticsearch 的搜索做什么項目,于是自己當時找工作其實也打算找到工作后看能不能自己做個項目或者公司項目里面用用 Elasticsearch 呢?

結果在新公司新項目里,很快就用到了。只不過這次不是 Java 項目里面用了,而是和 GoLang 整合。不過 API 都差不多,多熟悉幾次就很快上手了,關鍵還是要懂 Elasticsearch 如何構造 DSL 查詢語句,這樣再轉換成 GO 里面的 API 就快了。

還有就是公司里剛好有個中科院研究生大佬,他就寫過 Elasticsearch 這塊的書籍《從 lucene 到 Elasticsearch 全文檢索實戰(zhàn)》,另外他的 CSDN 博客也很火,閱讀量很高,感興趣的可以買本書支持下。

中途自己遇到 Elasticsearch 實在不會的問題也會主動去找大佬咨詢,然后大佬耐心教教我這個渣渣菜雞,在文章這里感謝下大佬這段時間的關照。

萌生閱讀源碼的想法

既然接觸了這么久的 Elasticsearch ,項目里用過,書籍也看過,雖然還不是很熟,但是如果看看它的源碼是不是會讓我對它的印象更深呢?

說干就干,晚上回家就從 GitHub clone 了源碼在本地,那時剛好回家,就在火車上直接用 VS code 看了會源碼,也沒有在 ide 里 debug 起來。

寫這篇文章的時候已經把 Elasticsearch 的整個啟動流程(加載讀取配置、加載插件等)、如何支持 REST API 看了下,后面會在下班后回家繼續(xù)閱讀源碼,繼續(xù)分享我的源碼解析的。

有想法就去干,不嘗試下,怎么知道適不適合你?

總結

其實閱讀源碼的主要原因還是自己感興趣;另外就是這東西現在項目里確實也用到了,如果我對源碼熟悉的話可能會對我的理解會更加透徹點;還有就是 Elasticsearch 確實火,公司幾乎都用的,所以學習下還是有必要的。


如果你是一名程序員,如果你剛好又是Java程序員,恰巧剛好你的技術又遇到了瓶頸但是你又拒絕平庸,期待蛻變,想進入一線互聯網公司或者給自己漲薪

我這里剛好有一套自己保存的Java進階學習資料。包含了Spring框架、Mybatis框架SpringBoot框架、SpringMVC框架、SpringCloud微服務、Dubbo框架、Redis緩存、RabbitMq消息、JVM調優(yōu)、Tomcat容器、MySQL數據庫

之前的兩千人群滿了 這個是新群Java高級進階群:963,944.895,免費發(fā)送的喲

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容