為了研究elasticsearch的源碼,可以從github下載下傳源碼,到本地編譯,但這種方法比較麻煩。
我是采用eclipse建構maven項目,在pom檔案中引用elasticsearch的jar包的方式來搭建源碼閱讀的環境。
搭建
因為我搭建的es叢集是2.2.1版本(關于如何搭建叢集,可以參考ElasticSearch 分布式安裝及調優 ,是以選用的elasticsearch也是2.2.1版本,maven依賴如下:
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>2.2.1</version>
</dependency>
如果叢集版本不一樣,也可以到maven倉庫選擇其他版本。
建立用戶端
為了跟叢集通信,首先需要建立用戶端,在這裡,我使用了TransportCllient,參照官方文檔,我對其進行了封裝,友善後續使用,具體代碼如下:
package es;
import java.net.InetAddress;
import java.net.UnknownHostException;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
public class MyTransportClient {
private TransportClient transportClient;
private static MyTransportClient clientInstance;
private MyTransportClient() {
/**
* 設定
*/
Settings settings = Settings.settingsBuilder()
.put("cluster.name","qiaqia")//我的叢集名
.put("client.transport.sniff",true)
.build();
try {
transportClient = TransportClient.builder().settings(settings).build()
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.0.4"), ));
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
/*
* 單例
*/
public static MyTransportClient getInstance(){
if(clientInstance==null){
clientInstance = new MyTransportClient();
}
return clientInstance;
}
public TransportClient getTransportClient() {
return transportClient;
}
}
在叢集中索引一條資料
指令行執行:
curl -XPUT 'http://192.168.0.4:9200/library/book/1?pretty' -d '
{ "title":"mastering elasticsearch"}'
得到
{
"_index" : "library",
"_type" : "book",
"_id" : "1",
"_version" : ,
"_shards" : {
"total" : ,
"successful" : ,
"failed" :
},
"created" : true
}
通過用戶端擷取es中的索引資料
package es;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.client.transport.TransportClient;
public class MyClientTest {
public static void main(String[] args) {
TransportClient client = MyTransportClient.getInstance().getTransportClient();
//get document
GetResponse response = client.prepareGet("library","book","1").get();
System.out.println(response.getSourceAsString());
}
}
測試
執行MyClientTest,console輸出以下資訊:
四月 , :: 下午 org.elasticsearch.plugins.PluginsService <init>
資訊: [Termagaira] modules [], plugins [], sites []
{"title":"mastering elasticsearch"}
表明用戶端連接配接成功并且能正确擷取es叢集的資料。
在eclipse 的
maven Dependences
裡面,可以檢視相關的類的源碼。
