Elasticsearch(四)——ES Java API——Http 客户端(简单使用,普通 Http 请求)、低级客户端、高级客户端(索引管理、文档操作(增删改查)、根据条件查询文档)

ElasticSearch Java API

一、Http 客户端

Java 操作 Es 的方案:

1、直接使用 HTTP 请求
直接使用 HTTP 请求,去操作 Es。HTTP 请求工具,可以使用 Java 自带的 HttpUrlConnection,也可以使用一些 HTTP 请求库,例如 HttpClient、OKHttp、Spring 中的 RestTemplate 都可以。这种方式有一个弊端,就是要自己组装请求参数,自己去解析响应的 JSON。

2、Low Level REST Client
用于 Es 的官方的低级客户端。这种方式允许通过 HTTP 与 Es 集群进行通信,但是请求时候的 JSON 参数和响应的 JSON 参数交给用户去处理。这种方式好处就是兼容所有的 Es 版本。但是就是数据处理比较麻烦。

3、 High Level REST Client
用户 Es 的官方的高级客户端。这种方式允许通过 HTTP 与 Es 集群进行通信,它是基于 Low LevelREST Client,但是提供了很多 API,开发者不需要自己去组装参数,也不需要自己去解析响应 JSON 。这种方式使用起来更加直接。但是需要注意,这种方式,所使用的依赖库的版本要和 Es 对应。

4、TransportClient
TransportClient 在 Es7 中已经被弃用,在 Es8 中将被完全删除。

1、前期准备

在这里插入图片描述

2、简单使用

这里使用 RestTemplate 来操作。

还是前面说过的,get 没有请求体,所以这里使用的是 post;所有能用 get 的地方都能用 post。

查询名字包含 java 的书:

json 格式那里根据这个层级结构一个个创建 HashMap:
在这里插入图片描述
在这里插入图片描述
结果:
在这里插入图片描述

成功运行!

3、Es 普通 HTTP 请求

在这里插入图片描述

二、低级客户端

低级客户端的版本无所谓,只要不是差的太离谱就行。

1、前期准备

在这里插入图片描述

2、普通查询

在这里插入图片描述

运行结果:
在这里插入图片描述
可以在 url 后面加个参数:
在这里插入图片描述

结果:
在这里插入图片描述

后面还有很多,就不截了。

3、传参数

基本所有操作,只要会如何传参数,基本都能做得到:

比如:name 里面包含 java 的书:
在这里插入图片描述

a、转义

alt + 回车:
在这里插入图片描述

接着搜索 json:
在这里插入图片描述

接着再一次 alt + 回车:
在这里插入图片描述

然后下面写,上面自动转义
在这里插入图片描述

b、完整代码

在这里插入图片描述
运行结果:
在这里插入图片描述
没问题。

三、高级客户端

高级客户端的版本必须一对一。比如 Es 用的是 7.5.2 版本,那么高级客户端也必须要 7.5.2。

高级客户端虽然方便了,不需要自己手动,但是要学习很多东西。

1、前期准备

其实上面那个依赖不加也行,因为下面的那个依赖会自动加入。
在这里插入图片描述

2、索引管理

a、方式一

来一个删除索引和创建索引的代码:
在这里插入图片描述
可以看到 mapping 这块还要自己去打;也可以像上面那样通过 map 来一层层构建。

b、方式二 —— XContentBuilder

通过 XContentBuilder 构建 mapping:
在这里插入图片描述

也可以设置分片数量和副本数量:
在这里插入图片描述
效果:
在这里插入图片描述

其他的配置例如配置别名的也类似:
在这里插入图片描述
如果觉得调 API 太麻烦,也可以直接上 JSON:
在 source 里面上 json
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

异步:
在这里插入图片描述

c、查询索引是否存在

在这里插入图片描述

d、关闭索引

在这里插入图片描述

e、打开索引

在这里插入图片描述

f、索引修改

在这里插入图片描述

g、克隆索引

被克隆的索引需要是只读索引:
在这里插入图片描述

h、查看索引

在这里插入图片描述

还有一部分就不一 一列举了。

3、文档操作

a、添加文档

在这里插入图片描述
结果:
在这里插入图片描述

查看文档:
在这里插入图片描述

可以看到是没问题的。

还可以做其他操作,这里截取部分演示代码(下面是同步操作):
在这里插入图片描述

b、获取文档

在这里插入图片描述
结果:
在这里插入图片描述

没有问题。

c、判断文档是否存在

判断文档是否存在和获取文档的 API 是一致的。只不过在判断文档是否存在时,不需要获取 source。
在这里插入图片描述

d、删除文档

删除 id 为 99 的文档:

在这里插入图片描述
删除文档的响应和添加文档成功的响应类似,可以对照着理解。

e、更新文档

(1)通过脚本更新:

在这里插入图片描述

(2)、通过 json 更新

在这里插入图片描述
当然,这个 JSON 字符串也可以通过 Map 或者 XContentBuilder 来构建:

(3)通过 map 更新

在这里插入图片描述

(4)通过 XContentBuilder 更新

在这里插入图片描述

也可以通过 upsert 方法实现文档不存在时就添加文档:
在这里插入图片描述

4、根据条件查询文档

像前面都是根据 id 获取文档;但更多时候都是根据条件来搜索文档。

不知道怎么写条件的时候,可以根据插件查询出来的结果去拼接 API 即可:
在这里插入图片描述

比如查询 name 里面有 java 的书:
在这里插入图片描述

结果:
在这里插入图片描述

除了官方的客户端,还有很多客户端,有些甚至是过度封装,几乎感觉不到 Es 的存在的都有。

完毕。以上!

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐