elastic seach 2.3.1(2)java client,transportclient的使用介绍获取transportclient连接,创建索引,删除索引, 更新索引,简单查询

1,前期的准备工作。

(1)测试使用的elastic search的版本是2.3.1版的,具体版本可以上官网下载,本地虚拟机配置的是3台服务器的集群。

(2)使用的jar包是2.3.5版本的。

 <dependency>
       <groupId>org.elasticsearch</groupId>
       <artifactId>elasticsearch</artifactId>
       <version>2.3.5</version>
</dependency>

 

2,获取transportclient的方式,通过esIp(elastic search集群服务器IP地址,也可以只传主节点的IP地址),以及elasticClusterName(这个集群的名字是在集群安装时,在config/elasticsearch.yml 里面可以配置,配置参数为:cluster.name) 获取transportClient对象,transportClient对象应设置成单例的对象。另外transportclient是通过9300端口来和es集群进行通信的,所以在新建InetSockTransportAddress对象时,需要指定端口号为9300。

    private static Byte LOCK = 1 ;
    public static TransportClient getTransportClientInstance(String esIp,String elasticClusterName) throws IOException {
        if (transportClient == null) {
            synchronized (LOCK) {
                if (transportClient == null) {
                    transportClient = getTransportClient(esIp,elasticClusterName);
                }
            }
        }
        return transportClient;
    }

    /**
     * 获取ES的连接client实例;
     */
    private static TransportClient getTransportClient(String esIp,String elasticClusterName) throws IOException {
        Settings settings = Settings.builder()
                .put("cluster.name", "testSearch")
                .put("client.transport.sniff", true)
                .build();
        TransportClient transportClient = TransportClient.builder().settings(settings).build();
        String[] ips =esIp.split(",");
        for (String ip : ips) {
            try {
                InetSocketTransportAddress ist = new InetSocketTransportAddress(InetAddress.getByName(ip),9300);
                transportClient.addTransportAddress(ist);
            }catch (Exception e){
            }
        }
        return transportClient;
    }

  

  

 3, 添加索引,官网上有好几种添加索引的方式,这边只介绍其中的两种。

(1)用Java代码构造一个XcontenBuilder的对象, 然后通过上面获得的transportclient来发送http请求来添加索引,其中下面的client.prepareIndex(INDEX, TYPE)方法接受两个参数INDEX和TYPE,INDEX是指索引库的名称,相当于mysql里面的数据库库名。TYPE是索引库的类型,相当于mysql数据库中的表名。

(需要注意的是,es在为一个文档创建索引的同时会为你创建好索引库的INDEX, 以及TYPE。不同于mysql,mysql中你需要先创建数据库以及数据库的表,然后你才能向相应的表中插入数据;es的话,不用提前创建好INDEX以及TYPE,你在向es添加数据的同时,INDEX和TYPE就创建完成了。)

   /**
     * 添加索引,结果查看 http://192.168.183.111:9200/_plugin/head/
     *
     */
    @Test
    public void addIndex() {
        TransportClient client = null;
        try {
            client = ESConnectFactory.getTransportClient("192.168.25.101",“esname”);
            client.prepareIndex("cars", "transactions")
                    .setSource(jsonBuilder()
                            .startObject()
                            .field("price", 30000)
                            .field("color", "red")
                            .field("make", "benz")
                            .field("sold", "2014-10-25")
                            .endObject()
                    )
                    .get();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

(2)在linux的平台上,通过curl命令,直接发送put请求来添加索引。其中上述所说的INDEX对应下面例子中的cars, TYPE对应下面例子中的transaction,另外car/transactions/1 中的1代表创建索引指定的id=1。

curl -XPUT 'http://192.168.25.101:9200/cars/transactions/1' -d '{
     "price": 30000,
     "color" : "red",
     "make":"benz",
     "sold":"2015-10-01",
     }'

 

4,删除索引(删除一个文档),也有两种方式

(1) 通过java代码构造一个Delete的请求。其中prepareDelete(INDEX, TYPE, ID)方法接受三个参数,分别是索引库的INDEX, TYPE以及需要删除文档的ID。

  @Test
    public void deleteIndex() {
        TransportClient client = null;
        try {
            client = ESConnectFactory.getTransportClient("192.168.25.101");
            DeleteResponse deleteResponse = client.prepareDelete(INDEX,TYPE,"AWGEs4y2jvUUEBNtYcCs").get();
            System.out.println(deleteResponse.isFound());//return true if a doc was found to delete
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

(2) 通过curl命令删除

#删除一个文档
curl -XDELETE 'http://192.168.25.101:9200/cars/transactions/AWGDE486jvUUEBNtYcCp'

 

5,更新索引。

(1) java代码进行更新,调用prepareUpdate(INDEX, TYPE, ID)的方法

   @Test
    public void prepareUpdate(){
        TransportClient client = null;
        try {
            client = ESConnectFactory.getTransportClient("192.168.25.101");
            client.prepareUpdate(INDEX, TYPE, "AWD46dWwaZGQx7zF0th7")
                    .setDoc(jsonBuilder()
                            .startObject()
                            .field("color", "red")
                            .endObject())
                .get();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

(2)使用curl命令, 发送post请求

curl -XPOST 'http://172.16.0.14:9200/cars/transaction/AWD46dWwaZGQx7zF0th7/_update' -d '{
  "doc": {
     "color" :"red"
  }
}'

 

6,简单的查询方法

(1)构造get请求

 /**
     * 通过id获取索引文档
     */
    @Test
    public void getDoc() {
        TransportClient client = null;
        try {
            client = ESConnectFactory.getTransportClient("192.168.25.101");
            GetResponse response = client.prepareGet(INDEX, TYPE, "AWD46PG8aZGQx7zF0th6").get();
            String sourceAsString = response.getSourceAsString();
            System.out.println(sourceAsString);
            System.out.println(response.getSourceAsString());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

(2) 使用curl命令发送get请求

curl -XGET 'http://192.168.25.101:9200/cars/transaction/AWD46PG8aZGQx7zF0th6'

  

posted @ 2018-02-24 15:01  2412cyy  阅读(2053)  评论(0编辑  收藏  举报