来聊一聊 ElasticSearch 最新版的 Java 客户端

本文介绍了Elasticsearch从7.17版本开始废弃高級Java客户端,转而使用Elasticsearch Java API Client的情况。文章详细讲解了如何引入API客户端,建立连接,以及进行索引和文档操作。强调了熟悉Elasticsearch查询脚本的重要性,并提供了简单的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

可能不少小伙伴都注意到了,从 ElasticSearch7.17 这个版本开始,原先的 Java 高级客户端 Java High Level REST Client 废弃了,不支持了。老实说,ElasticSearch 算是我用过的所有 Java 工具中,更新最为激进的一个了,在 Es7 中废弃了 TransportClient,7.17 又废弃了 TransportClient,那么现在用啥呢?现在的客户端叫做 Elasticsearch Java API Client。

一直偷懒选择无视 Elasticsearch Java API Client,不过最近工作中用到了,所以还是整篇文章和小伙伴们简单梳理一下 Elasticsearch Java API Client 的玩法。

下面的介绍我主要从索引操作和文档操作两个方面来给大家介绍。

不过需要跟大家强调的是,ElasticSearch 的 Java 客户端想要用的 6,必须要熟悉 ElasticSearch 的查询脚本,大家平时在工作中遇到 Es 相关的问题,我也都是建议先在 Kibana 中把操作脚本写好,然后再翻译成 Java 代码,或者直接拷贝到 Java 代码中,非常不建议上来就整 Java 代码,那样很容易出错。

如果你对 Es 的操作不熟悉,松哥录了免费的视频教程,大家可以参考:

不想看视频,也可以在微信公众号后台回复 es,有文档教程。

1. Elasticsearch Java API Client

Elasticsearch Java API Client 是 Elasticsearch 的官方 Java API,这个客户端为所有 Elasticsearch APIs 提供强类型的请求和响应。

这里跟大家解释下什么是强类型的请求和响应:因为所有的 Elasticsearch APIs 本质上都是一个 RESTful 风格的 HTTP 请求,所以当我们调用这些 Elasticsearch APIs 的时候,可以就当成普通的 HTTP 接口来对待,例如使用 HttpUrlConnection 或者 RestTemplate 等工具来直接调用,如果使用这些工具直接调用,就需要我们自己组装 JSON 参数,然后自己解析服务端返回的 JSON。而强类型的请求和响应则是系统把请求参数封装成一个对象了,我们调用对象中的方法去设置就可以了,不需要自己手动拼接 JSON 参数了,请求的结果系统也会封装成一个对象,不需要自己手动去解析 JSON 参数了。

小伙伴们看一下下面这个例子,我想查询 books 索引中,书名中包含 Java 关键字的图书:

public class EsDemo02 {
  
      public static void main(String[] args) throws IOException {
  
          URL url = new URL("http://localhost:9200/books/_search?pretty");        HttpURLConnection con = (HttpURLConnection) url.openConnection();        con.setRequestMethod("GET");        con.setRequestProperty("content-type","application/json;charset=utf-8");        //允许输出流/允许参数        con.setDoOutput(true);        //获取输出流        OutputStream out = con.getOutputStream();        String params = "{\n" +                "  \"query\": {\n" +                "    \"term\": {\n" +                "      \"name\": {\n" +                "        \"value\": \"java\"\n" +                "      }\n" +                "    }\n" +                "  }\n" +                "}";        out.write(params.getBytes());        if (con.getResponseCode() == 200) {
  
              BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));            String str = null;            while ((str = br.readLine()) != null) {
  
                  System.out.println(str);            }            br.close();        }    }}

复制代码

小伙伴们看到,这就是一个普通的 HTTP 请求,请求参数就是查询的条件,这个条件是一个 JSON 字符串,需要我们自己组装,请求的返回值也是一个 JSON 字符串,这个 JSON 字符串也需要我们自己手动去解析,这种可以算是弱类型的请求和响应。

Elasticsearch Java API Client 具有如下特性:

  • 为所有 Elasticsearch APIs 提供强类型的请求和响应。

  • 所有 API 都有阻塞和异步版本。

  • 使用构建器模式,在创建复杂的嵌套结构时,可以编写简洁而可读的代码。

  • 通过使用对象映射器(如 Jackson 或任何实现了 JSON-B 的解析器),实现应用程序类的无缝集成。

  • 将协议处理委托给一个 http 客户端,如 Java Low Level REST Client,它负责所有传输级的问题。HTTP 连接池、重试、节点发现等等由它去完成。

关于第三点,松哥吐槽一句,确实简洁,但是可读性一般般吧。

另外还有两点需要注意:

  • Elasticsearch Java 客户端是向前兼容的,即该客户端支持与 Elasticsearch 的更大或相等的次要版本进行通信。

  • Elasticsearch Java 客户端只向后兼容默认的发行版本,并且没有做出保证。

好了,那就不废话了,开整吧。

2. 引入 Elasticsearch Java API Client

首先需要我们加依赖,对 JDK 的版本要求是 1.8,我们需要添加如下两个依赖:

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

复制代码

如果是 Spring Boot 项目,就不用添加第二个依赖了,因

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值