深入elasticsearch源码之环境搭建

来源:互联网 发布:椅子 孩子写作业 知乎 编辑:程序博客网 时间:2024/05/19 13:17

为了研究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"), 9300));        } 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" : 1,  "_shards" : {    "total" : 2,    "successful" : 2,    "failed" : 0  },  "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输出以下信息:

四月 13, 2016 1:46:29 下午 org.elasticsearch.plugins.PluginsService <init>信息: [Termagaira] modules [], plugins [], sites []{"title":"mastering elasticsearch"}

表明客户端连接成功并且能正确获取es集群的数据。

在eclipse 的 maven Dependences 里面,可以查看相关的类的源码。
这里写图片描述

0 0