Java與ElasticSearch的互動操作
阿新 • • 發佈:2018-11-21
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