天天看点

深入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源码之环境搭建

继续阅读