1. 程式人生 > >Java與ElasticSearch的互動操作

Java與ElasticSearch的互動操作

Java與ElasticSearch的互動操作

節點客戶端(Node client)

節點客戶端作為一個非資料節點加入到本地叢集中。換句話說,它本身不儲存任何資料,但是它知道資料在叢集中的哪個節點中,並且可以把請求轉發到正確的節點。

傳輸客戶端(Transport client)

輕量級的傳輸客戶端可以將請求傳送到遠端叢集。它本身不加入叢集,但是它可以將請求轉發到叢集中的一個節點上。

本文使用Jest工具,Jest是一種Restful的傳輸客戶端,通過9300埠和ElasticSearch通訊,可以動態新增和刪除節點。

注意:客戶端必須具有與叢集中的節點相同的主版本號(例如2.x或5.x)。 客戶端可以連線到具有不同小版本(例如2.3.x)的群集,但是可能不支援新的功能。 理想情況下,客戶端應具有與群集相同的版本。

使用JestClientFactory工廠類初始化JestClient例項

/**
* 初始化JestClient例項
*/
private static JestClient initClient(String server) {
JestClientFactory factory = new JestClientFactory();
//可以批量建立使用,分隔的ElasticSearch客戶端
List

    HttpClientConfig clientConfig = new HttpClientConfig.Builder(esServerList)
            .multiThreaded(true)
            .readTimeout( 30 * 1000)
            .defaultCredentials("admin","xiaoadmin")
            .maxTotalConnection(5)
           //.discoveryEnabled(true)// 啟用自動發現 Enabling node discovery will (poll) and update the list of servers in the client periodically.
           //.discoveryFrequency(5L, TimeUnit.HOURS)// 5秒輪詢一次
            .build();
    //建立客戶物件
    factory.setHttpClientConfig(clientConfig);
    return factory.getObject();
}

對應的配置檔案示例

#Elasticsearch
#Elasticsearch伺服器地址
demo.index.server=http://es-test-head.demo.com
#索引分片數
demo.index.shards=5
#複製分片數
demo.index.replicas=1
#索引和型別名稱
demo.index.name=demo-index
demo.index.type=demo-type

初始化ES客戶端後,可以獲取對應的客戶端物件進行操作

/**
 *建立JestClient例項
 */
public static JestClient getJestClient(String server) {
    JestClient jestClient = jestClientMap.get(server);
    if (jestClient == null) {
        jestClient = initClient(server);
        jestClientMap.put(server, jestClient);
    }
    return jestClient;
}

參考文件:
與ElasticSearch的互動
Elasticsearch 2.3.3 JAVA api說明文件
searchbox-io/Jest GitHub