天天看點

深入elasticsearch源碼之環境搭建

為了研究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

裡面,可以檢視相關的類的源碼。

深入elasticsearch源碼之環境搭建

繼續閱讀