搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
weixin_40725706
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
五一长假必看!宅家也能六部国漫一次解锁,绝对不能错过!_五一宅家必看
2
PySide6将ui文件编译为py文件_pyside6中uic转py
3
SpringCloud整合Knife4j实现接口文档_knife4j 接口文档
4
对字母进行快速排序c语言,C语言qsort()函数:用于对记录从小到大快速排序
5
不可多得的干货,外包Java后端开发三年_java外包项目
6
Android studio 突然连接不上雷电/夜神模拟器_androidstudio连接夜神模拟器没有反应
7
区块链质押系统dapp开发系统架构设计全流程
8
Python爬虫5.11 — scrapy框架结合selenium+chromedriver的使用_spider给middlewares传driver
9
java线程安全总结
10
git对已经提交过的文件添加到.gitignore_git 已经提交过的文件 gitignore
当前位置:
article
> 正文
ElasticSearch - RestClient操作ES基本操作_es restclient
作者:weixin_40725706 | 2024-06-01 19:58:09
赞
踩
es restclient
目录
什么是RestClient
hotel数据结构分析
初始化RestClient
创建索引库
删除索引库
判断索引库是否存在
小结
新增文档
查询文档
更新文档
删除文档
批量导入文档
小结
什么是RestClient
ES官方提供了各种不同语言的客户端,用来操作ES
这些客户端的本质就是组装DSL语句,通过http请求发送给ES
其中的Java Rest Client又包括两种:
Java Low Level Rest Client
Java High Level Rest Client
我们学习的是Java HighLevel Rest Client客户端API
hotel数据结构分析
mapping映射分析
创建索引库,最关键的是mapping映射,而mapping映射要考虑的信息包括:
字段名
字段数据类型
是否参与搜索
是否需要分词
如果分词,分词器是什么?
其中:
字段名、字段数据类型,可以参考数据表结构的名称和类型
是否参与搜索要分析业务来判断,例如图片地址,就无需参与搜索
是否分词呢要看内容,内容如果是一个整体就无需分词,反之则要分词
分词器,我们可以统一使用ik_max_word
以此推出索引库结构
几个特殊字段说明:
location:地理坐标,里面包含精度、纬度
all:一个组合字段,其目的是将多字段的值 利用copy_to合并,提供给用户搜索
地理坐标说明
ES中支持两种地理坐标数据类型:
geo_point:由纬度(latitude)和经度(longitude)确定的一个点;例如:"32.8752345,120.2981576"
geo_shape:有多个geo_point组成的复杂几何图形;例如一条直线,"LINESTRING (-77.03653 38.897676,-77.009051 38.889939)"
copy_to说明
初始化RestClient
在elasticsearch提供的API中
与elasticsearch一切交互都封装在一个名为RestHighLevelClient的类中
必须先完成这个对象的初始化,建立与elasticsearch的连接
步骤1:引入es的RestHighLevelClient依赖
步骤2:因为SpringBoot默认的ES版本是7.6.2,所以我们需要覆盖默认的ES版本
步骤3:初始化RestHighLevelClient
创建索引库
整体分为三步:
(1)创建Request对象;因为是创建索引库的操作,因此Request是CreateIndexRequest
(2)添加请求参数,其实就是DSL的JSON参数部分;因为json字符串很长,这里是定义了静态字符串常量MAPPING_TEMPLATE,让代码看起来更加优雅
(3)发送请求,client.indices()方法的返回值是IndicesClient类型,封装了所有与索引库操作有关的方法
具体实例
(1)创建一个类,定义mapping映射的JSON字符串常量
(2)在HotelIndexTest测试类中,编写单元测试,实现创建索引:
删除索引库
删除索引库的DSL语句
DELETE /索引库名
与创建索引库相比:
请求方式从PUT变为DELTE
请求路径不变
无请求参数
所以代码的差异,主要体现在Request对象上;依然是三步走:
(1)创建Request对象;这次是DeleteIndexRequest对象
(2)准备参数;这里是无参
(3)发送请求;改用delete方法
在HotelIndexTest测试类中,编写单元测试,实现删除索引
判断索引库是否存在
判断索引库是否存在,本质就是查询
对应的DSL:
GET /索引库名
因此与删除的Java代码流程是类似的
依然是三步走:
(1)创建Request对象;这次是GetIndexRequest对象
(2)准备参数;这里是无参
(3)发送请求;改用exists方法
在HotelIndexTest测试类中,编写单元测试,实现判断索引
小结
JavaRestClient操作elasticsearch的流程基本类似
核心是client.indices()方法来获取索引库的操作对象
索引库操作的基本步骤:
初始化RestHighLevelClient
创建XxxIndexRequest;XXX是Create、Get、Delete
准备DSL(Create时需要,其它是无参)
发送请求;调用RestHighLevelClient#indices().xxx()方法,xxx是create、exists、delete
新增文档
要将数据库的酒店数据查询出来,导入到hotel索引库,实现酒店数据的CRUD
索引库实体类
数据库查询后的结果是一个Hotel类型的对象;但需要转变,结构如下:
与我们的索引库结构存在差异:
longitude和latitude需要合并为location
因此,需要定义一个新的类型,与索引库结构吻合
新增文档的DSL语句
POST /{索引库名}/_doc/1
{
"name": "Jack",
"age": 21
}
可以看到与创建索引库类似,同样是三步走
(1)创建Request对象
(2)准备请求参数,也就是DSL中的JSON文档
(3)发送请求
变化的地方在于,这里直接使用client.xxx()的API,不再需要client.indices()了
导入酒店数据,基本流程一致,但是需要考虑几点变化:
酒店数据来自于数据库,我们需要先查询出来,得到hotel对象
Hotel对象需要转为HotelDoc对象
HotelDoc需要序列化为json格式
在HotelDocumentTest测试类中,编写单元测试
查询文档
查询的DSL语句
GET /hotel/_doc/{id}
代码大概分两步
准备Request对象
发送请求
不过查询的目的是得到结果,解析为HotelDoc,因此难点是结果的解析
结果是一个JSON
其中文档放在一个_source属性中,因此解析就是拿到_source,反序列化为Java对象即可
与之前类似,也是三步走:
(1)准备Request对象;这次是查询,所以是GetRequest
(2)发送请求,得到结果。因为是查询,这里调用client.get()方法
(3)解析结果,就是对JSON做反序列化
在HotelDocumentTest测试类中,编写单元测试
更新文档
修改之前讲过两种方式:
全量修改:本质是先根据id删除,再新增
增量修改:修改文档中的指定字段值
在RestClient的API中,全量修改与新增的API完全一致,判断依据是ID:
如果新增时,ID已经存在,则修改
如果新增时,ID不存在,则新增
与之前类似,也是三步走:
(1)准备Request对象;这次是修改,所以是UpdateRequest
(2)准备参数;也就是JSON文档,里面包含要修改的字段
(3)更新文档;这里调用client.update()方法
在HotelDocumentTest测试类中,编写单元测试
删除文档
删除的DSL为
DELETE /hotel/_doc/{id}
与查询相比,仅仅是请求方式从GET变成DELETE,可以想象Java代码应该依然是三步走
(1)准备Request对象,因为是删除,这次是DeleteRequest对象;要指定索引库名和id
(2)准备参数,无参
(3)发送请求;因为是删除,所以是client.delete()方法
编写单元测试
批量导入文档
利用BulkRequest批量将数据库数据导入到索引库中
步骤如下:
利用mybatis-plus查询酒店数据
将查询到的酒店数据(Hotel)转换为文档类型数据(HotelDoc)
利用JavaRestClient中的BulkRequest批处理,实现批量新增文档
批量处理BulkRequest
其本质就是将多个普通的CRUD请求组合在一起发送
其中提供了一个add方法,用来添加其他请求
可以看到,能添加的请求包括:
IndexRequest,也就是新增
UpdateRequest,也就是修改
DeleteRequest,也就是删除
因此Bulk中添加了多个IndexRequest,就是批量新增功能了
其实还是三步走:
(1)创建Request对象;这里是BulkRequest
(2)准备参数;批处理的参数,就是其它Request对象,这里就是多个IndexRequest
(3)发起请求;这里是批处理,调用的方法为client.bulk()方法
在导入酒店数据时,将上述代码改造成for循环处理即可
在HotelDocumentTest测试类中,编写单元测试
小结
文档操作的基本步骤:
初始化RestHighLevelClient
创建XxxRequest;XXX是Index、Get、Update、Delete、Bulk
准备参数(Index、Update、Bulk时需要)
发送请求;调用RestHighLevelClient#.xxx()方法,xxx是index、get、update、delete、bulk
解析结果(Get时需要)
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/weixin_40725706/article/detail/659193
推荐阅读
article
Vue
之
Axios
跨域
问题
解决
方案 ----纯前端_
vue
axios
跨域
前端怎么
解决
...
方案1:既然使用
axios
直接进行
跨域
访问不可行,我们就需要配置代理了。代理可以
解决
的原因:因为客户端请求服务端的数据是...
赞
踩
article
毕业
答辩
PPT
怎么做?
制作
PPT
必备的
模板
网站和
AI
工具来了!_
ppt
模版
制作
csdn
...
临近毕业季,眼下应该有不少朋友忙着做论文
答辩
PPT
,但毕业前也有诸多事项要同时推进,如工作实习、毕业旅游、毕业照筹备等...
赞
踩
article
SQL
标准
简介...
SQL
标准
简介
SQL
是Structured Query Language的缩写,它的前身是著名的关系数据库原型系统S...
赞
踩
article
双口
RAM
及
Vivado
RAM
IP
核的
使用
_
双口
ram
使用
方法...
目录1.
双口
RAM
概述2.
Vivado
双口
RAM
IP
核2.1 Block Memory Generator概述2.2...
赞
踩
article
Spring
Boot
中使用
Redis
和
Lua
脚本实现
延时
队列_
lua
延时
...
通过使用
Redis
和
Lua
脚本,我们可以在
Spring
Boot
环境中实现一个高效且可靠的
延时
队列系统。这种方法利用了R...
赞
踩
article
Pytest
中实现
自动
生成
测试用例
脚本代码!_使用注解
生成
pytest
自动
化
测试代码
_
自动
解析需求文...
Python中通过自己设计脚本,从而能够
自动
生成
测试用例
脚本,提高我们
测试用例
维护的效率,当然不同的系统可能有自己特别的...
赞
踩
article
Java
并发
编程面试二...
synchronized 是和 if、else、for、while 一样的关键字,ReentrantLock 是类,1、...
赞
踩
article
java
之
网络
爬虫
介绍
_
java
是什么蜘蛛...
文章大纲一、
网络
爬虫
基本
介绍
二、
java
常见
爬虫
框架
介绍
三、WebCollector实战四、项目源码下载五、参考文章一、...
赞
踩
article
【
数据结构
】基于
顺序
表
实现
通讯录
...
学习了
顺序
表,我们就可以用
顺序
表做一些事情了,例如我们可以做一个简易的
通讯录
项目,加深自己对
顺序
表的理解【
数据结构
】基于...
赞
踩
article
电脑
中提示关于nt
dll
.
dll
错误
怎么办
,
解决
出现nt
dll
.
dll
错误
的办法...
nt
dll
.
dll
是Windows操作系统的一个关键系统文件
,
它包含了许多核心函数和系统调用
,
对于系统的稳定运行至关重要...
赞
踩
article
Esp
8266
学习之旅13 动手做个
8266
毕设小案例,
smartConfig
+
MQTT
协议轻松...
本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人...
赞
踩
article
LeetCode
2965.找出
缺失
和
重复
的
数字
:
小数据?我选择暴力(附
优化
方法
清单
:
O(
1
)空间方...
【LetMeFly】2965.找出
缺失
和
重复
的
数字
:
小数据?我选择暴力(附
优化
方法
清单
:
O(
1
)空间
方法
×3)给你一个下...
赞
踩
article
同元软控受邀出席2024
工业
软件
创新
发展
学术会议
...
工业
软件
是现代
工业
的“灵魂”,近年来,以人工智能为代表的新兴技术正在与
工业
软件
紧密结合,产教融合在人才培养、工程实践、科...
赞
踩
article
Cortex
-M0
中断
控制
和
系统
控制
_
cortex
-m scb
寄存器
...
中断
控制
和
系统
控制
_
cortex
-m scb
寄存器
cortex
-m scb
寄存器
...
赞
踩
article
关于
RPA
与
爬虫
的
区别
_
rpa
爬虫
...
其实关于
爬虫
和
RPA
之前的
区别
。刚刚过去的2019年,是数字化转型进程中极为重要的一年。企业纷纷开始走上转型之路,各种技...
赞
踩
article
三相
光伏
并网
逆变
器
资料,规格16-
20KW
,两路
MPPT
,T型三电平
逆变
拓扑_
并网
逆变
器
设计方案
...
此外,该资料还提供了双DSP平台的
设计方案
和控制算法。T型三电平
逆变
拓扑结构在
并网
逆变
器
中具有一定的优势,它可以有效地减...
赞
踩
article
初识
灵动
微
MM32
GPIO
_
灵动
微
单片机
io初始化...
GPIO
英文全称General-PurposeInput/OutputPorts,中文意思是通用I/O端口。由于MCU的...
赞
踩
article
改造
dify
项目适配自建的
OpenAI
API
服务
_
dify
openai
模型
one
a...
改造
dify
项目适配自建的
OpenAI
API
服务
_
dify
openai
模型
one
api
dify
ope...
赞
踩
article
mysql
实战——
mysql
主从复制
管理_
mysql
主从复制
binlog
会
删除
吗...
一、常见的管理操作1、查看主库状态2、查看从库复制的状态3、在主库上查看从库ip和端口信息。_
mysql
主从复制
bin...
赞
踩
article
出现“error:
failed
to
push
some
refs
to ‘
htt
ps://
git
...
经过不断查看别人的博客,分析问题:发现本地库确实与远程库内容不相符合。昨天在演示如何删除远程库中的文件时,采用的是直接在...
赞
踩
相关标签
java
http
网络
powerpoint
人工智能
ai
在线白板
boardmix
ppt
sql
sql标准
fpga开发
spring boot
redis
lua
pytest
测试用例
自动化
开发语言
数据结构
c语言
算法
c++
c#