1. 程式人生 > >ElasticSearch學習筆記之二十九 Java REST Client

ElasticSearch學習筆記之二十九 Java REST Client

ElasticSearch學習筆記之二十九 Java REST Client

Java REST Client

Java REST Client分為2種:

  • Java Low Level REST Client: Elasticsearch官方 low-level client . 它允許你通過http和 Elasticsearch 叢集互動. 它為我們序列化請求和反序列化響應。它相容所有的ElasticSearch版本。
  • Java High Level REST Client: Elasticsearch官方high-level client. 基於low-level client,它公開API方法併為我們序列化請求和反序列化響應。

Java High Level REST Client

注意:
elasticsearch6之後新增的

Java High Level REST Client 工作在Java Low Level REST client之上 . 它的主要目標是公開特定於API的方法,這些方法接受請求物件作為引數並返回響應物件,從而由客戶端來為我們序列化請求和反序列化響應。

每個API可以同步或非同步呼叫,同步方法返回一個響應物件,而非同步方法,其名稱以async字尾結尾,需要一個監聽器引數(在low level client管理的執行緒池中),一旦收到響應或錯誤進行通知。

Java High Level REST Client

依賴於Elasticsearch核心專案,它接受與TransportClient相同的請求引數,並返回相同的響應物件。

Compatibility(相容性)

Java High Level REST Client 需要Java1.8並依賴於Elasticsearch核心專案。客戶端的版本需要和它操作的ElasticSearch版本一致,它接受與TransportClient相同的請求引數,並返回相同的響應物件。如果需要將應用程式從TransportClient遷移到新的REST客戶端,請參閱Migration Guide

高階客戶端保證能夠與在相同的主要版本和較大或相同的次要版本上執行的任何Elasticsearch節點進行通訊,它不需要與它所通訊的Elasticsearch節點相同的小版本,由於它是向前相容的,因此它支援與後來版本的Elasticsearch進行通訊,而不是它所開發的版本。

6.0客戶端能夠與任何6.x Elasticsearch節點進行通訊。雖然6.1客戶端確實能夠與6.1、6.2和任何後面的6.x版本通訊,但是在與以前的Elasticsearch節點版本通訊時可能存在不相容性問題,例如在6.1和6.0之間,如果6.1客戶端支援一些API的新請求主體欄位,而這些API是6.0節點不知道的。

建議在升級Elasticsearch叢集到新的主要版本時升級高階客戶端,由於REST API的重大變化可能會導致意外結果,這取決於請求命中的節點,新新增的API只會由新版本的客戶端支援,客戶端應該在最後更新,一旦叢集中的所有節點都升級到新的主版本。

Javadoc

Java High Level REST Client 的 javadoc 請檢視https://artifacts.elastic.co/javadoc/org/elasticsearch/client/elasticsearch-rest-high-level-client/6.4.2/index.html

Maven Repository(Maven倉庫)

high-level Java REST client 可以在Maven Central找到,所需的最小Java版本是1.8。

High Level REST Client與Elasticsearch遵循相同的釋出週期,我們應該替換為所需的客戶端版本。

如果你想找SNAPSHOT 版本, 請訪問Elastic Maven Snapshot repository.

Maven configuration

以下是如何使用maven作為依賴項管理器配置依賴項的方法,在pom.xml檔案中新增以下內容:

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>6.4.2</version>
</dependency>

Gradle configuration

下面是如何使用gradle作為依賴項管理器來配置依賴項,在build.gradle檔案中新增以下內容:

dependencies {
    compile 'org.elasticsearch.client:elasticsearch-rest-high-level-client:6.4.2'
}

Lucene Snapshot repository

任何主要版本(如beta)的第一個releases版本都可能構建在Lucene Snapshot版本之上,在這種情況下,您將無法解析客戶端的Lucene依賴項。

例如,如果您想使用基於Lucene 7.0.0-snapshot-00142c9的6.0.0-beta1版本,您必須定義以下儲存庫。

For Maven:

<repository>
    <id>elastic-lucene-snapshots</id>
    <name>Elastic Lucene Snapshots</name>
    <url>http://s3.amazonaws.com/download.elasticsearch.org/lucenesnapshots/00142c9</url>
    <releases><enabled>true</enabled></releases>
    <snapshots><enabled>false</enabled></snapshots>
</repository>

For Gradle:

maven {
    url 'http://s3.amazonaws.com/download.elasticsearch.org/lucenesnapshots/00142c9'
}

Dependencies(依賴)

High Level Java REST Client 依賴於以下構件及其傳遞依賴項:

  • org.elasticsearch.client:elasticsearch-rest-client
  • org.elasticsearch:elasticsearch

Initialization(初始化)

RestHighLevelClient例項需要REST low-level client建立,建立方式如下:

RestHighLevelClient client = new RestHighLevelClient(
        RestClient.builder(
                new HttpHost("localhost", 9200, "http"),
                new HttpHost("localhost", 9201, "http")));

high-level client將在內部用提供的構建器建立low-level client 執行請求,並管理其生命週期。

low-level client維護一個執行緒池並且開啟很多執行緒。 所以當你不再使用high-level client 你應該關閉它,它會在內部關閉low-level client 去釋放資源,你可以這樣做來關閉:

client.close();

在關於Java High Level Client的其他文件中,RestHighLevelClient例項將作為客戶端引用。

RequestOptions

RestHighLevelClient的所有APIs
接受一個RequestOptions,您可以使用它來定製請求,而不會改變Elasticsearch執行請求的方式。例如,這是指定一個節點選擇器來控制哪個節點接收請求的地方。有關自定義選項的更多示例,請參見low level client文件。