Mik*_*ike 4 elasticsearch elasticsearch-5
使用 Elasticsearch 原生 Java 客户端 API ( TransportClient)的应用程序升级到使用 Java 的高级 REST 客户端的升级路径是什么?
文档(初步?)似乎表明:
Java High Level REST Client 依赖于 Elasticsearch 核心项目。它接受与 TransportClient 相同的请求参数并返回相同的响应对象。
(来源:https : //www.elastic.co/guide/en/elasticsearch/client/java-rest/5.x/java-rest-high.html)
但我并不完全清楚这意味着什么。我是否能够在不重写查询或其他客户端类型操作的情况下将我的整个代码库切换到高级 REST 客户端?REST 客户端似乎没有实现该Client接口。从脱钩的角度来看,这可能是有道理的。
我需要知道的是我是否应该围绕客户端操作构建自己的抽象,或者是否已经HighLevelRestClient基本上实现了Client接口。
我应该暂时继续针对 TransportClient API 编写代码,还是在 TransportClient 被弃用时需要重写所有代码?
请注意,我正在查看高级 REST 客户端,而不是低级 REST 客户端。
高级 REST 客户端不实现该Client接口。该计划在我不久前写的这篇博文中有所描述。
我们还在编写文档,其中将包含一个页面,其中包含有关如何从传输客户端迁移的说明。
新客户端重用来自现有传输客户端的请求和响应,但客户端对象不兼容,这意味着例如以下内容:
IndexRequest indexRequest = new IndexRequest("index", "type", "id");
indexRequest.source("field", "value");
IndexResponse indexResponse = transportClient.index(indexRequest).get();
Run Code Online (Sandbox Code Playgroud)
会变成这样:
IndexRequest indexRequest = new IndexRequest("index", "type", "id");
indexRequest.source("field", "value");
IndexResponse indexResponse = restHighLevelClient.index(indexRequest);
Run Code Online (Sandbox Code Playgroud)
至于异步请求,调用略有不同(请参阅方法名称),在新客户端中,我们使用了名称以“Async”后缀结尾的不同方法,您可以从以下内容开始:
transportClient.index(indexRequest, new ActionListener<IndexResponse>() {
@Override
public void onResponse(IndexResponse indexResponse) {
// called when the operation is successfully completed
}
@Override
public void onFailure(Exception e) {
// called on failure
}
});
Run Code Online (Sandbox Code Playgroud)
到以下几点:
restHighLevelClient.indexAsync(indexRequest, new ActionListener<IndexResponse>() {
@Override
public void onResponse(IndexResponse indexResponse) {
// called when the operation is successfully completed
}
@Override
public void onFailure(Exception e) {
// called on failure
}
});
Run Code Online (Sandbox Code Playgroud)
不幸的是,这些Client#prepare*方法在高级客户端中不可用,因此类似于:
IndexResponse indexResponse = transportClient.prepareIndex("index", "type", "id").setSource("field", "value").get();
Run Code Online (Sandbox Code Playgroud)
需要使用ActionRequests 而不是ActionRequestBuilders迁移到上面。我们正在进行此更改,因为传输客户端中的请求和构建器之间总是存在混淆,这两种方式完全相同。新客户端将有一种方式来提供请求。
如果您想查看当前的文档,它已经上线,但正在进行中:https : //www.elastic.co/guide/en/elasticsearch/client/java-rest/master/java-rest-high html的。
高级 REST 客户端将取代传输客户端,尽管其第一个即将发布的版本将仅支持索引、批量、获取、删除、更新、搜索、搜索滚动和清除滚动 API。接下来将支持缺失的 API,我们也像往常一样对用户的贡献持开放态度。
传输客户端将很快被弃用,因此我建议尽快转移高级 REST 客户端,这不应该是一个巨大的变化,它会得到回报,因为我们将加班改进它,已经通过REST 是一个很大的改进。
| 归档时间: |
|
| 查看次数: |
4428 次 |
| 最近记录: |