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'

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM