ES學習筆記之---從源碼啓動ES

開發中須要用到ES的插件, 開發ES插件須要瞭解ES的內部結構, 因而再次開始學習ES的源碼。一方面瞭解插件開發的套路,一方面瞭解get接口的實現細節。git

瞭解ES的原理,源碼是文檔最好的補充。源碼甚至比文檔更有助於瞭解ES的內部核心。github

首先從git上clone下源碼:編程

git clone https://github.com/elastic/elasticsearch.git

cd elasticsearch

git tag -l

git checkout v2.4.5

sh run.sh

若是使用run.sh沒有成功,再試一次, 有多是maven的jar包沒有下載到。
這裏使用v2.4.5是因爲在編譯es的過程當中會用到相關的jar包,而https://oss.sonatype.org/content/repositories/snapshots/org/elasticsearch/rest-api-spec/並非全部版本的jar包都有, 因此從中選取了v2.4.5, 這跟手機選號同樣,純屬我的主觀。api

這裏JDK要換成1.8, 1.7的jdk maven會報protocol_verson錯誤。
編譯成功後,就會生成elasticsearch的zip包, 須要解壓,由於源碼中會用到conf文件。curl

cd /home/shgy/es_workspace/elasticsearch/distribution/zip/target/releases/
unzip elasticsearch-2.4.5-SNAPSHOT.zip 
mv elasticsearch-2.4.5-SNAPSHOT /opt/

編譯完成後, 將源碼import到intellij中, intellij的啓動參數elasticsearch

vm options : 

-Des.path.home=/opt/elasticsearch-2.4.5-SNAPSHOT

Program arguments: 

start

啓動成功後使用maven

curl http://localhost:9200

便可看到經典的ide

{
  "name" : "Ruckus",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "ZIl7g86YRiGv8Dqz4DCoAQ",
  "version" : {
    "number" : "2.4.5",
    "build_hash" : "c849dd13904f53e63e88efc33b2ceeda0b6a1276",
    "build_timestamp" : "2018-08-12T01:30:55Z",
    "build_snapshot" : true,
    "lucene_version" : "5.5.4"
  },
  "tagline" : "You Know, for Search"
}

從源碼啓動成功後, 能夠作的事情就多了。 好比看看You Know, for Search是怎麼來的;看看ES內部的index/get/search等接口內部是如何運行的。
更重要的是, 能夠將相關接口的邏輯套用, 依樣畫葫蘆開發plugin實現本身的業務邏輯。學習

以debug的方式啓動es後, 第一個斷點能夠打在org.elasticsearch.http.netty.HttpRequestHandler.messageReceived(),這是netty的編程模式。ui

好比You Know, for Search, 經過debug, 能夠了解到其調用鏈爲:
HttpRequestHandler.messageReceived() --- RestMainAction.handleRequest()

Rest_xxx_Action是es全部http接口通用的套路。好比:

RestSearchAction    _search
RestGetAction    /{index}/{type}/{id}
RestIndexAction    /{index}/{type}/{id} 
......

能夠說, Rest_xxx_Action是es的外殼, 整個ES的結構大體以下圖所示:
ES學習筆記之---從源碼啓動ES

相關文章
相關標籤/搜索