ES中的RestHighLevelClient学习——TransportClient迁移

由于TransportClient已经都学习过了,所以直接学习迁移指南就可以。
迁移指南官方给的很简单,有的地方需要动一下脑子,举一反三,因为官网给的都是例子,不过只要知道一个变化的情况,举一反三也不是很难。


Rest里值得一体的也多了很多新的功能,因为可以直接使用low-level rest client去模拟访问,相当于封装了kibana的dev tools直接构建的json表达式,所以可以灵活构建出各种Request对象,包括各种原来没见过的ListTasksRequest、MainResponse、PutRepositoryRequest等待,暂时我不需要深究,先熟练基本操作。

原因

官方说的对于TransportClient,7.0不建议使用,8.0删除
原因大概就是ES一直版本在更新,TransportClient对es版本的匹配要求比较高,而Rest服务要求不高,兼容能力强

迁移

Client初始化和关闭

这个区别主要在于端口,一个TCP,一个HTTP

Settings settings = Settings.builder()

.put("cluster.name", "prod").build();

TransportClient transportClient = new PreBuiltTransportClient(settings)

.addTransportAddress(new TransportAddress(InetAddress.getByName("localhost"), 9300))

.addTransportAddress(new TransportAddress(InetAddress.getByName("localhost"), 9301));

transportClient.close();

Rest

RestHighLevelClient client = new RestHighLevelClient(

RestClient.builder(

new HttpHost("localhost", 9200, "http"),

new HttpHost("localhost", 9201, "http")));

client.close();

Request和Response对象

这方面,两者的请求和响应(包括index、delete、update的upsert、bulk、bulkProcessor等等)因为他们都是使用导入的是(以index为例):
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
两者在一个包里,所以具体里面的东西没有什么区别,区别在于如何使用和返回这几个对象

但是Rest可以构建更多样的

以IndexResponse为例

IndexRequest构建情况是相同的,区别在于构建IndexResponse,transport使用RequestBuilder的相关prepare遗留方法去构建Response,rest直接使用client的对应方法去返回一个对应的Response。
比如transportClient.prepareBulk().get()直接变成client.bulk()得到的同样都是BulkResponse;
prepareSearch变成了search方法

IndexResponse response = transportClient.index(indexRequest).actionGet();

IndexResponse response = client.index(request, RequestOptions.DEFAULT);

不用Builder怎么执行——直接client执行

管理用low-level Rest client

transport直接可以使用client.admin()来管理查看cluster状态


ClusterHealthResponse response = client.admin().cluster().prepareHealth().get(); //

ClusterHealthStatus healthStatus = response.getStatus(); //

if (healthStatus != ClusterHealthStatus.GREEN) {

//

}

而Rest可以用low-level Rest client模拟请求返回


DeleteRequest request = new DeleteRequest("index", "doc", "id");

//同步

DeleteResponse response = transportClient.delete(request).actionGet();

DeleteResponse response = client.delete(request, RequestOptions.DEFAULT);

//异步

transportClient.delete(request, new ActionListener<DeleteResponse>() { //

@Override

public void onResponse(DeleteResponse deleteResponse) {

//

}

@Override

public void onFailure(Exception e) {

//

}

});

client.deleteAsync(request, new ActionListener<DeleteResponse>() {

@Override

public void onResponse(DeleteResponse deleteResponse) {

}

@Override

public void onFailure(Exception e) {

}

});
Request request = new Request("GET", "/_cluster/health");

request.addParameter("wait_for_status", "green");

Response response = client.getLowLevelClient().performRequest(request);

ClusterHealthStatus healthStatus;

try (InputStream is = response.getEntity().getContent()) {

Map<String, Object> map = XContentHelper.convertToMap(XContentType.JSON.xContent(), is, true);

healthStatus = ClusterHealthStatus.fromString((String) map.get("status"));

}

if (healthStatus != ClusterHealthStatus.GREEN) {

}

相关文章:

  1. ES中的TransportClient学习——Java代码全记录
  2. ElasticSearch: Index 和 Type 的区别以及6.0新变化
  3. ElasticSearch6.2.3 索引的建立与删除:基于Java High Level REST Client 实现
  4. 《深入理解ElasticSearch》读书笔记
  5. Field datatypes
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值