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方法并为我们序列化请求和反序列化响应。注意:
elasticsearch6之后添加的
Java High Level REST Client
工作在Java Low Level REST client
之上 . 它的主要目标是公开特定于API的方法,这些方法接受请求对象作为参数并返回响应对象,从而由客户端来为我们序列化请求和反序列化响应。
每个API可以同步或异步调用,同步方法返回一个响应对象,而异步方法,其名称以async
后缀结尾,需要一个监听器参数(在low level clien
t管理的线程池中),一旦收到响应或错误进行通知。
Java High Level REST Client
依赖于Elasticsearch核心项目,它接受与TransportClient
相同的请求参数,并返回相同的响应对象。
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只会由新版本的客户端支持,客户端应该在最后更新,一旦集群中的所有节点都升级到新的主版本。
Java High Level REST Client
的 javadoc 请查看https://artifacts.elastic.co/javadoc/org/elasticsearch/client/elasticsearch-rest-high-level-client/6.4.2/index.html
high-level Java REST client
可以在Maven Central找到,所需的最小Java版本是1.8。
High Level REST Client
与Elasticsearch遵循相同的发布周期,我们应该替换为所需的客户端版本。
如果你想找SNAPSHOT
版本, 请访问Elastic Maven Snapshot repository.
以下是如何使用maven作为依赖项管理器配置依赖项的方法,在pom.xml
文件中添加以下内容:
<dependency>
<groupId>org.elasticsearch.clientgroupId>
<artifactId>elasticsearch-rest-high-level-clientartifactId>
<version>6.4.2version>
dependency>
下面是如何使用gradle作为依赖项管理器来配置依赖项,在build.gradle
文件中添加以下内容:
dependencies {
compile 'org.elasticsearch.client:elasticsearch-rest-high-level-client:6.4.2'
}
任何主要版本(如beta)的第一个releases版本都可能构建在Lucene Snapshot版本之上,在这种情况下,您将无法解析客户端的Lucene依赖项。
例如,如果您想使用基于Lucene 7.0.0-snapshot-00142c9的6.0.0-beta1版本,您必须定义以下存储库。
For Maven:
<repository>
<id>elastic-lucene-snapshotsid>
<name>Elastic Lucene Snapshotsname>
<url>http://s3.amazonaws.com/download.elasticsearch.org/lucenesnapshots/00142c9url>
<releases><enabled>trueenabled>releases>
<snapshots><enabled>falseenabled>snapshots>
repository>
For Gradle:
maven {
url 'http://s3.amazonaws.com/download.elasticsearch.org/lucenesnapshots/00142c9'
}
High Level Java REST Client
依赖于以下构件及其传递依赖项:
org.elasticsearch.client:elasticsearch-rest-client
org.elasticsearch:elasticsearch
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
实例将作为客户端引用。
RestHighLevelClient
的所有APIs
接受一个RequestOptions,您可以使用它来定制请求,而不会改变Elasticsearch执行请求的方式。例如,这是指定一个节点选择器来控制哪个节点接收请求的地方。有关自定义选项的更多示例,请参见low level client
文档。