Elasticsearch搜尋引擎第十四篇-Java客戶端呼叫
文章目錄
ES支援多種程式語言客戶端
Elasticsearch支援多種程式語言客戶端,如下:
官網地址:https://www.elastic.co/guide/en/elasticsearch/client/index.html
ES 提供的客戶端連線方式
- REST API,埠9200
- Transport連線,埠9300
Java REST Client
ES提供兩個Java REST Client版本
- Java Low Level REST Client(少用): 低級別的REST客戶端,通過http與叢集互動,使用者需自己編組請求JSON串,及解析響應JSON串。相容所有ES版本。
- Java High Level REST Client(常用): 高級別的REST客戶端,基於低級別的REST客戶端,增加了編組請求、解析響應等相關api。
Java Low Level REST Client
因為低級別的REST客戶端用的比較少,這裡不展開說明,可以直接參考官網說明。
特點、maven引入、使用介紹參考:
https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-low.html
API doc請參考:
https://artifacts.elastic.co/javadoc/org/elasticsearch/client/elasticsearch-rest-client/6.2.4/index.html
Java High Level REST Client(常用)
從6.0.0開始加入的,目的是以java面向物件的方式來進行請求、響應處理。
每個API 支援 同步/非同步 兩種方式,同步方法直接返回一個結果物件。非同步的方法以 async 為字尾,通過listener 引數來通知結果。
高階java REST 客戶端依賴Elasticsearch core project
相容性說明:
- 依賴 java1.8 和 Elasticsearch core project
- 請使用與服務端ES版本一致的客戶端版本,否則會出錯!!!
maven中引入:
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>6.4.3</version>
</dependency>
Java High Level REST Client 初始化
//給定叢集的多個節點地址,將客戶端負載均衡地向這個節點地址集發請求
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("localhost", 9200, "http"),
new HttpHost("localhost", 9201, "http")));
client不再使用的話,要關閉:
client.close();
API及使用例項,參考官網:
https://www.elastic.co/guide/en/elasticsearch/client/java-rest/6.4/java-rest-high-supported-apis.html
Java Client
java client 使用 TransportClient,各種操作本質上都是非同步的(可以用 listener,或返回 Future )。
注意:ES的發展規劃中在7.0版本開始將廢棄 TransportClient,8.0版本中將完全移除 TransportClient,取而代之的是High Level REST Client。
High Level REST Client 中的操作API和java client 大多是一樣的。
官方學習連結:https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/index.html
maven中引入:
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>6.4.3</version>
</dependency>
初始化客戶端:
//連線叢集設定
Settings settings = Settings.builder()
.put("cluster.name", "myClusterName").build();
//連線的transport地址,注意埠為9300
TransportClient client = new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName("host1"), 9300))
.addTransportAddress(new TransportAddress(InetAddress.getByName("host2"), 9300));
//在關閉時記得關閉客戶端物件
client.close();
其他API操作可以直接參考官網,官網資料非常齊全