使用java操作elasticsearch之與es簡歷連接


Elasticsearch 的 Java 客戶端非常強大;它可以建立一個嵌入式實例並在必要時運行管理任務。

運行一個 Java 應用程序和 Elasticsearch 時,有兩種操作模式可供使用。該應用程序可在 Elasticsearch 集群中扮演更加主動或更加被動的角色。在更加主動的情況下(稱為 Node Client),應用程序實例將從集群接收請求,確定哪個節點應處理該請求,就像正常節點所做的一樣。(應用程序甚至可以托管索引和處理請求。)另一種模式稱為 Transport Client,它將所有請求都轉發到另一個 Elasticsearch 節點,由后者來確定最終目標

ElasticSearch 服務默認端口 9300 (java操作的時候)
Web 管理平台端口 9200

Nodeclient的好處是提交代碼就是集群中的一台機器,node client知道整個集群的狀態,而且在執行api的時候可以少用一個網絡的跳躍

缺點:太沉重了,而且僅僅是api的網絡跳躍,對於整個集群來說,優化效果幾乎沒有

Transport Client有一個好處就是,如果我們要創建很多的連接,比如上千個連接,但是如果使用node client的話,就會有上千個node client假如集群;這樣就太沉重了,會給集群造成負擔;

如果使用的是Transport Client就輕了很多,因為Transport Client不是集群的一部分

導入maven

<dependencies>
    <!-- Elasticsearch核心依賴包 -->
    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>transport</artifactId>
        <version>5.5.2</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version></dependency>
    <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.9.1</version>
    </dependency></dependencies>

 


1.1:建立連接

import org.elasticsearch.client.Client;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.net.InetAddress;
import java.net.UnknownHostException;


/**
 * Created by angel on 2018/4/24.
 */
public class TestClientConn {
    

    public final static String HOST = "hadoop01";

    public final static int PORT = 9300;//http請求的端口是9200,客戶端是9300

    Settings settings = Settings.builder().put("cluster.name", "cluster_es").build();

    TransportClient transportClient;
    @Test
    public void getConnection(){

        try {
//TODO  PreBuiltTransportClient構建TransportClient連接遠程的elasticsearch

            transportClient = new PreBuiltTransportClient(settings)
                    .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(HOST), PORT));
            System.out.println("collection elasticsearch client:" + transportClient.toString());
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }finally {
            transportClient.close();
        }
    }
}

 

 


免責聲明!

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



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