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

这篇具有很好参考价值的文章主要介绍了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项目中安装:

<project>

  <dependencies>
    <dependency>
      <groupId>co.elastic.clients</groupId>
      <artifactId>elasticsearch-java</artifactId>
      <version>8.0.1</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.12.3</version>
    </dependency>
  </dependencies>

</project>

3. 连接

// 创建低级客户端
RestClient restClient = RestClient.builder(
    new HttpHost("localhost", 9200)).build();

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

// 创建API客户端
ElasticsearchClient client = new ElasticsearchClient(transport);

4. 测试查询请求

注意,需要ES内有相应的数据才可以查到。如没有数据可供测试可以直接跳过本项。

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

for (Hit<Product> 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为你要删除索引的名字。

6. 文档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<Test> response = client.update(e -> e.index("newapi").id("1003").doc(map), Test.class);

// 打印请求结果
System.out.println(response.result());

6.3 查询文档Doc

// 构建查询请求
GetResponse<Test> 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客户端同时初始化新客户端和旧客户端:文章来源地址https://www.toymoban.com/news/detail-793464.html

// 创建低级客户端(新版客户端内容)
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客户端

到了这里,关于Elasticsearch RestHighLevelClient 已标记为被弃用 它的替代方案 Elasticsearch Java API Client 的基础教程及迁移方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vscode | linux | c++ intelliense 被弃用解决方案

    每日一句,vscode用的爽是爽,主要是可配置太强了。如果也很会研究,可以直接去咸鱼接单了 废话少说,直接整。 用着用着说是c++ intelliense被弃用,很多辅助功能无法使用,像查看定义、查看引用、函数跳转、智能提示…… 归根结底,还是太菜了,但真的很需要这些辅助啊

    2024年02月12日
    浏览(49)
  • Android Handler被弃用,那么以后怎么使用Handler,或者类似的功能

    Android API30左右,Android应用在使用传统写法使用Handler类的时候会显示删除线,并提示相关的方法已经被弃用,不建议使用。 Android studio中的显示和建议: 看下官方API关于此处的解释:  简要说就是如果在实例化Handler的时候不提供Looper, 可能导致操作丢失(Handler 没有预估到新

    2023年04月21日
    浏览(44)
  • WebSecurityConfigurerAdapter被弃用Spring Security基于组件化的配置和使用

    在Spring Security 5.7及之后的版本中 WebSecurityConfigurerAdapter 将被启用,安全框架将转向基于组件的安全配置。 spring security官方文档 Spring Security without the WebSecurityConfigurerAdapter 如果使用的Spring Boot版本高于低于2.7.0、Spring Security版本高于5.7,就会出现如下的提示: 1、被启用的原因

    2024年02月02日
    浏览(48)
  • Unity打包APK错误:‘android.enableR8‘选项已被弃用,不应再使用

    Unity打包APK错误:\\\'android.enableR8’选项已被弃用,不应再使用 在Unity游戏开发中,我们经常需要将游戏打包成APK文件以在Android设备上进行测试或发布。然而,有时候在打包APK的过程中,可能会遇到一些错误。其中一个常见的错误是 “The option ‘android.enableR8’ is deprecated and sh

    2024年02月08日
    浏览(68)
  • Python错题集-7:DeprecationWarning: Conversion of an array with ndim(被弃用警告)

    DeprecationWarning: Conversion of an array with ndim 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.)   X[i] = np.random.normal(loc=Ex, scale=np.abs(Enn), size=1) DeprecationWarning: Conversion of an array with ndim  是一个警告,通常出

    2024年04月09日
    浏览(46)
  • iOS中获取MCC和MNC的方法及iOS 16中CTCarrier被弃用的替代方案

    一、使用公共API获取MCC和MNC 在iOS中,我们可以使用CoreTelephony框架来获取用户的移动国家代码(MCC)和移动网络代码(MNC)。具体操作步骤如下: 在Xcode项目中,点击项目目标,进入“General”选项卡,在“Frameworks, Libraries, and Embedded Content”下点击“+”按钮,搜索并添加 Cor

    2024年02月11日
    浏览(107)
  • 还在用Calendar操作Date?Java8都弃用了,还不知道它的这款强大的工具吗?

    在过去的Java版本中,日期和时间的处理主要依赖于 java.util.Date 和 java.util.Calendar 类,然而随着业务系统的复杂以及技术层面的提升,这些传统的日期时间类暴露出了若干显著的不足之处。随着 Java8 的发布,其引入了一套全新的日期时间API,彻底改变了我们处理日期和时间的

    2024年03月18日
    浏览(48)
  • Elasticsearch-RestHighLevelClient基础操作

    该篇文章参考下面博主文章 Java中ElasticSearch的各种查询(普通,模糊,前缀,高亮,聚合,范围) 【es】java使用es中三种查询用法from size、search after、scroll 删除索引会把索引中已经创建好的数据也删除,就好像我们在mysql中删除库,会把库的数据也删除掉一样。 类似关闭数据

    2024年02月08日
    浏览(45)
  • Elasticsearch:RestHighLevelClient实现搜索、分页、排序、高亮

    1.引入依赖 2.自定义搜索DTO 3.封装工具类、实现 分页、高亮、排序 反射工具类 ReflectUtil 是我自定义的,原理是反射,可以引入hutool的工具包,同样也可以实现该结果

    2024年02月11日
    浏览(45)
  • RestHighLevelClient实现ElasticSearch关联查询之父子文档

    RestHighLevelClient实现ElasticSearch关联查询之父子文档今天分享,承接上一篇内容: DSL操作关联查询 这篇我们通过javaAPI的方式实现: 一、springboot 配置 1、pom文件引用: 2、初始化配置es操作类 3、业务层引用 二、核心伪代码 1、创建父子索引 kibana查看 2、判断索引是否存在 3、删

    2024年02月10日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包