Elasticsearch RestHighLevelClient 已标记为被弃用 它的替代方案 Elasticsearch Java API Client 的基础教程及迁移方案

在 Elasticsearch7.15 版本之后,Elasticsearch 官方将它的高级客户端 RestHighLevelClient 标记为弃用状态。同时推出了全新的 Java API 客户端 Elasticsearch Java API Client,该客户端也将在 Elasticsearch8.0 及以后版本中成为官方推荐使用的客户端。

Elasticsearch Java API Client 支持除 Vector tile search API 和 Find structure API 之外的所有 Elasticsearch API。且支持所有 API 数据类型,并且不再有原始 JsonValue 属性。它是针对 Elasticsearch8.0 及之后版本的客户端,目前 Elasticsearch 已经更新至 8.0.1,所以我们需要学习新的 Elasticsearch Java API Client 的使用方法。

  1. 环境要求 首先,你的项目需要支持 Java8 或以上,并且你的项目需要有一个 Json 对象映射库,比如 Jackson 等,本文章中使用 Jackson 作为示例。

  2. 安装依赖 在 Gradle 项目中安装:

dependencies { implementation ‘co.elastic.clients:elasticsearch-java:8.0.1’ implementation ‘com.fasterxml.jackson.core:jackson-databind:2.12.3’ } 在 Maven 项目中安装:

// 使用Jackson映射器创建传输层 ElasticsearchTransport transport = new RestClientTransport( restClient, new JacksonJsonpMapper());

// 创建API客户端 ElasticsearchClient client = new ElasticsearchClient(transport); 4. 测试查询请求 注意,需要ES内有相应的数据才可以查到。如没有数据可供测试可以直接跳过本项。

SearchResponse search = client.search(s -> s .index(“products”) .query(q -> q .term(t -> t .field(“name”) .value(v -> v.stringValue(“testname”)) )), Product.class);

for (Hit hit: search.hits().hits()) { processProduct(hit.source()); } 5. 索引 Index 的基本操作 5.1 创建索引 // 创建连接 RestClient restClient = RestClient.builder( new HttpHost(“localhost”, 9200)).build(); ElasticsearchTransport transport = new RestClientTransport( restClient, new JacksonJsonpMapper()); ElasticsearchClient client = new ElasticsearchClient(transport);

// 创建索引 CreateIndexResponse createIndexResponse = client.indices().create(c -> c.index(“newapi”)); // 打印结果 System.out.println(createIndexResponse.acknowledged());

// 关闭连接 transport.close(); restClient.close(); 其中,newapi 为你要创建索引的名字。

5.2 查询索引 // Create the low-level client RestClient restClient = RestClient.builder( new HttpHost(“localhost”, 9200)).build(); // Create the transport with a Jackson mapper ElasticsearchTransport transport = new RestClientTransport( restClient, new JacksonJsonpMapper()); // And create the API client ElasticsearchClient client = new ElasticsearchClient(transport); GetIndexResponse createIndexResponse = client.indices().get(e->e.index(“newapi”)); System.out.println(String.join(",", createIndexResponse.result().keySet())); transport.close(); restClient.close(); 其中,newapi 为你要查询索引的名字。

5.3 删除索引 // Create the low-level client RestClient restClient = RestClient.builder( new HttpHost(“localhost”, 9200)).build(); // Create the transport with a Jackson mapper ElasticsearchTransport transport = new RestClientTransport( restClient, new JacksonJsonpMapper()); // And create the API client ElasticsearchClient client = new ElasticsearchClient(transport); DeleteIndexResponse deleteIndexResponse = client.indices().delete(e->e.index(“newapi”)); System.out.println(deleteIndexResponse.acknowledged()); transport.close(); restClient.close(); 其中,newapi 为你要删除索引的名字。

  1. 文档 Doc 的基本操作 6.1 创建文档 Doc // 创建一个需要保存至 ES 的对象 Test test = new Test(); test.setName(“添加测试”); test.setSex(“男”); test.setAge(24);

// 构建一个创建 Doc 的请求 CreateResponse createResponse = client.create(e->e.index(“newapi”).id(“1003”).document(test));

// 打印请求结果 System.out.println(createResponse.result()); 其中,index 为文档 Doc 所属索引的名字,id 为该文档的 id,document 参数现在可以直接传入 Java 对象了。

6.2 修改文档 Doc // 构建需要修改的内容,这里使用了 Map Map<String, Object> map = new HashMap<>(); map.put(“age”, 35);

// 构建修改文档的请求 UpdateResponse response = client.update(e -> e.index(“newapi”).id(“1003”).doc(map), Test.class);

// 打印请求结果 System.out.println(response.result()); 6.3 查询文档 Doc // 构建查询请求 GetResponse response = client.get(e -> e.index(“newapi”).id(“1003”), Test.class);

// 打印查询结果 System.out.println(response.source().toString()); 6.4 删除文档 Doc // 构建删除文档请求 DeleteResponse response = client.delete(e -> e.index(“newapi”).id(“1001”));

// 打印请求结果 System.out.println(response.result()); 更多新版客户端 Elasticsearch Java API Client 的批量及复杂查询相关操作已更新,可以查阅我的新文章:Elasticsearch8.0 版本中 Elasticsearch Java API Client 客户端的基本使用方法_无枫的博客,分享 Java 及 Vue 方向的技术文章-CSDN 博客

如何从高级客户端 High Level Rest Client 迁移至新版客户端 Elasticsearch Java API Client? 根据官方给出的答案是无法平滑的迁移,不过新版客户端和旧版高级客户端是可以共存的,并且没有操作开销。所以在你的项目中可以逐步的从旧版客户端迁移至新版客户端。

    并且,官方还提供了使High Level Rest Client和Elasticsearch Java API Client使用相同的传输通道的方案,他可以使两个客户端共享相同的Low Level Rest Client,管理所有连接,循环策略的网络层以及节点嗅探等工作。

    以下代码展示了如何使用相同的HTTP客户端同时初始化新客户端和旧客户端:

// 创建低级客户端(新版客户端内容) RestClientBuilder httpClientBuilder = RestClient.builder( new HttpHost(“localhost”, 9200) );

// 创建旧版高级客户端 RestHighLevelClient RestHighLevelClient hlrc = new RestHighLevelClient(httpClientBuilder);

// 使用相同的低级客户端创建新的 Java 客户端 ElasticsearchTransport transport = new RestClientTransport( hlrc.getLowLevelClient(), new JacksonJsonpMapper() );

ElasticsearchClient esClient = new ElasticsearchClient(transport);

// 新旧客户端共享相同的 http 客户端 文章知识点与官方知识档案匹配,可进一步学习相关知识 ———————————————— 版权声明:本文为 CSDN 博主「无枫丶」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/anjiongyi/article/details/123328856

Licensed under CC BY-NC-SA 4.0
最后更新于 Jan 06, 2025 05:52 UTC
comments powered by Disqus
Built with Hugo
主题 StackJimmy 设计
Caret Up