RestClient操作索引库和文档

2024-01-08 18:40

本文主要是介绍RestClient操作索引库和文档,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1.什么是RestClient

2.RestClient测试

2.1项目搭建

2.1.1创建springboot项目

2.1.2导入相关依赖

2.1.3配置项目文件

 2.1.4数据库表结构建立

2.1.5项目结构准备 

2.2分析数据结构

 2.3初始化JavaRestClient

2.3.1引入es的RestHighLevelClient的依赖

2.3.2初始化RestHighLevelClient

2.4索引库操作

2.4.1创建索引库

2.4.2删除索引库

2.4.3判断索引库是否存在

2.5文档操作

2.5.1新增文档

2.5.2查看文档

2.5.3更新文档

2.5.4删除文档

2.5.5批量导入文档


1.什么是RestClient

        ES官方提供了各种不同语言的客户端,用来操作ES。这些客户端的本质就是组装DSL语句,通过http请求发送给ES。官方文档地址: https://www.elastic.co/guide/en/elasticsearch/client/index.html

2.RestClient测试

2.1项目搭建

2.1.1创建springboot项目

2.1.2导入相关依赖

2.1.3配置项目文件

注意以下自己的数据库名称

 2.1.4数据库表结构建立

这里写好了sql语句,直接使用即可

CREATE TABLE `tb_hotel` (`id` bigint(20) NOT NULL COMMENT '酒店id',`name` varchar(255) NOT NULL COMMENT '酒店名称',`address` varchar(255) NOT NULL COMMENT '酒店地址',`price` int(10) NOT NULL COMMENT '酒店价格',`score` int(2) NOT NULL COMMENT '酒店评分',`brand` varchar(32) NOT NULL COMMENT '酒店品牌',`city` varchar(32) NOT NULL COMMENT '所在城市',`star_name` varchar(32)  NOT NULL COMMENT '酒店星级',`business` varchar(255)  NOT NULL COMMENT '商圈',`latitude` varchar(32) NOT NULL COMMENT '纬度',`longitude` varchar(32) NOT NULL COMMENT '经度',`pic` varchar(510)  NOT NULL COMMENT '酒店图片',primary key (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;INSERT INTO  tb_hotel VALUES (60363,'上海新世界丽笙大酒店','南京西路88号',1431,46,'丽笙','上海','五星级','人民广场地区','31.23462','121.47327','TEST');
INSERT INTO  tb_hotel VALUES (60398,'上海复旦皇冠假日酒店','邯郸路199号',924,47,'皇冠假日','上海','五星级','江湾/五角场商业区','31.295382','121.502547','TEST');
INSERT INTO  tb_hotel VALUES (60487,'上海外滩茂悦大酒店','黄浦路199号',689,44,'君悦','上海','五星级','外滩地区','31.245409.','121.492969','TEST');
INSERT INTO  tb_hotel VALUES (60522,'上海嘉豪淮海国际豪生酒店','汾阳路1号',425,45,'嘉豪','上海','四钻','淮海路/新天地地区','31.215497','121.456297','TEST');
INSERT INTO  tb_hotel VALUES (60916,'上海绿地万怡酒店','沪宜公路3101号',328,45,'万怡','上海','四钻','嘉定新城','31.368523','121.258567','TEST');
INSERT INTO  tb_hotel VALUES (60922,'上海虹桥祥源希尔顿酒店','红松东路1116号',1108,45,'希尔顿','上海','五钻','虹桥地区','31.18746','121.395312','TEST');
INSERT INTO  tb_hotel VALUES (60935,'上海虹口三至喜来登酒店','四平路59号',1899,46,'喜来登','上海','五星级','四川北路商业区','31.2579','121.487954','TEST');
INSERT INTO  tb_hotel VALUES (61075,'上海雅居乐万豪酒店','西藏中路555号',1152,46,'万豪','上海','五钻','人民广场地区','31.236681','121.473529','TEST');
INSERT INTO  tb_hotel VALUES (61083,'上海滴水湖皇冠假日酒店','自由贸易试验区临港新片区2号',971,44,'皇冠假日','上海','五钻','滴水湖临港地区','30.890867','121.473529','TEST');
INSERT INTO  tb_hotel VALUES (62091,'杭州君悦酒店','湖滨路28号',260,47,'君悦','杭州','五钻','西湖湖滨商圈','30.254862','121.473529','TEST');
INSERT INTO  tb_hotel VALUES (62605,'杭州西溪喜来登度日大酒店','紫金港路西溪天堂国际旅游区56号',1186,47,'喜来登','杭州','五星级','西溪湿地商圈','30.267639','121.473529','TEST');
INSERT INTO  tb_hotel VALUES (309208,'北京王府井希尔顿酒店','王府井东街8号',1679,46,'希尔顿','北京','五星级','天安门/王府井地区','39.914539','121.473529','TEST');
INSERT INTO  tb_hotel VALUES (394559,'北京东方君悦大酒店','长安街1号东方广场',689,45,'君悦','北京','四星级','天安门/王府井地区','39.909635','121.473529','TEST');
INSERT INTO  tb_hotel VALUES (394557,'北京宝辰饭店','建国门内大街甲18号',425,44,'宝辰','北京','五钻','北京站/建国门地区','39.905768','121.473529','TEST');
INSERT INTO  tb_hotel VALUES (394617,'北京新云南皇冠假日酒店','东北三环西坝河太阳宫桥东路18号',328,46,'皇冠假日','北京','五星级','国展中心地区','39.972409','121.473529','TEST');
INSERT INTO  tb_hotel VALUES (395434,'北京希尔顿酒店','东三环北路东方路1号',1108,45,'希尔顿','北京','五星级','燕莎/朝阳公园商业区','39.952703','121.473529','TEST');
INSERT INTO  tb_hotel VALUES (396702,'北京首都机场希尔顿酒店','首都机场3号航站楼三经路1号',1899,46,'希尔顿','北京','五钻','天安门/王府井地区','40.048969','121.473529','TEST');
INSERT INTO  tb_hotel VALUES (395787,'北京海航大厦万豪酒店','霄云路甲26号',1152,46,'万豪','北京','五钻','燕莎/朝阳公园商业区','39.959861','116.372327','TEST');
INSERT INTO  tb_hotel VALUES (395799,'北京国际艺苑皇冠假日酒店','王府井大街48号',971,44,'皇冠假日','北京','五星级','天安门/王府井地区','39.918994','116.372327','TEST');
INSERT INTO  tb_hotel VALUES (395815,'北京明豪华美达酒店','天竺镇府前一街13号',260,46,'美达','北京','四钻','首都机场/新国展地区','40.062832','116.372327','TEST');
INSERT INTO  tb_hotel VALUES (396189,'北京照样悠唐皇冠假日酒店','三丰北里号',1186,46,'皇冠假日','北京','五钻','三里屯/工体/东直门地区','39.92129','116.372327','TEST');
INSERT INTO  tb_hotel VALUES (396471,'维也纳酒店','海淀北太平花园路甲17号',1679,36,'维也纳','北京','三钻','马甸/安贞地区','39.970837','116.4099','TEST');
INSERT INTO  tb_hotel VALUES (396506,'北京金隅喜来酒店','北三环东路36号',686,47,'金隅喜来','北京','五星级','马甸/安贞地区','39.967163','116.421879','TEST');
INSERT INTO  tb_hotel VALUES (413460,'7天连锁酒店(北京天坛店)','东城天坛东里甲36号',418,38,'7天连锁','北京','二钻','前门/崇文门商贸区','39.875786','116.372327','TEST');
INSERT INTO  tb_hotel VALUES (413476,'7天连锁酒店(北京南站店)','丰台马家堡西路22号',485,37,'7天连锁','北京','二钻','永定门/南站/大红门','39.845364','116.374982','TEST');
INSERT INTO  tb_hotel VALUES (414168,'7天连锁酒店(北京西直门店)','西城平安里西大街翠花街264号',419,37,'7天连锁','北京','二钻','西单/金融街地区','39.931338','116.364982','TEST');

在数据库中运行sql文件,然后表就建好了 

2.1.5项目结构准备 

结构图如下:

mapper文件,通过mybatisplus实现了:

pojo文件:

service:

service.impl:

2.2分析数据结构

mapping要考虑的问题:

字段名、数据类型、是否参与搜索、是否分词、如果分词,分词器是什么?

举个栗子:我们上面创建好了的hotel表,里面的哪些字段需要我们去分词?

前置注意项:

ES中支持两种地理坐标数据类型:
1.  gegpoint:由纬度(latitude)和经度( longitude)确定的一个点。例如:"32.8752345,120.2981576"
2.  geo_shape:有多个geo_point组成的复杂几何图形。例如一条直线,
"LINESTRING(-77.03653 38.897676,-77.00905138.889939)"

 字段拷贝可以使用copy_to属性将当前字段拷贝到指定字段。示例:

 "score": {
        "type": "integer"
      },
      "brand": {
        "type": "keyword",

       "copy_to": "all"
      },

简单的理解,keyword就是不需要分词的字符串内容,text是需要分词的字符串内容,index 如果是true则代表需要被搜索,false是不需要被搜索.

如果我们想通过传入一个字段去同时搜索多个字段,是要一个一个去匹配搜索就会显得非常麻烦,还好我们可以使用copy_to来解决这个问题

可以看到我们在properties里增加了一个all字段,在其他字段中通过copy_to将其它字段拷贝到all字段

上面的是图片喔,这么贴一下代码:

PUT /hotel
{"mappings": {"properties": {"id": {"type": "keyword"},"name": {"type": "text","analyzer": "ik_max_word","copy_to": "all"},"address": {"type": "keyword","index": false        },"price": {"type": "integer"},"score": {"type": "integer"},"brand": {"type": "keyword","copy_to": "all"},"city": {"type": "keyword"},"starName": {"type": "keyword"},"business": {"type": "keyword","copy_to": "all"},"location": {"type": "geo_point"},"pic": {"type": "keyword","index": false},"all": {"type": "text","analyzer": "ik_max_word"}}}
}

 2.3初始化JavaRestClient

2.3.1引入es的RestHighLevelClient的依赖

大家要根据自己安装的版本去选择!

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

2.3.2初始化RestHighLevelClient

这里可以先做个测试

    private RestHighLevelClient client;@BeforeEachvoid setup () {this.client = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://127.0.0.1:9200")));}@AfterEachvoid teardown () throws IOException {this.client.close();}@Testpublic void testInit () {System.out.println(client);}

启动测试,输出结果:

2.4索引库操作

2.4.1创建索引库

下面是创建一个索引库的基本步骤:

MAPPING_TEMPLATE就是我们新增一个索引库的DSL语言,也就是被{}包裹起来的那部分,包括“{}”在内

在启动之前呢,从浏览器中检查一下有没有这个索引:

啊哈,结果当然是没有,那我们启动一下

得到结果:

我们去浏览器上看一下:

可以看出hotel这个索引库创建成功了!

2.4.2删除索引库

同样道理就不多说了

2.4.3判断索引库是否存在

经过2.4.2的删除操作后:

2.5文档操作

2.5.1新增文档

步骤很类似,这边为了方便,我们从之前在数据库里存好的数据随便取一个id的hotel对象,将这个hotel对象json化之后插入模板,然后打入请求

(为什么要将对象json化呢?因为它支持json格式的数据)

这个JSON依赖在哪呢,可以看这里

<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.54</version>
</dependency>

在浏览器中查看结果:

2.5.2查看文档

根据id查找的文档是json数据,需要我们反序列化得到对象

2.5.3更新文档

先记住原来的数据,我们现在就要进行修改了

代码如下,需要修改的数据像数组这样依序代入方法

在浏览器中查看结果

可以看到修改成功!

2.5.4删除文档

看到这里相信读者已经非常明白了,剩下的就自己探索吧!

2.5.5批量导入文档

当然,restclient也为我们提供了批量操作方法,代码如下,只是部分不同:

在浏览器中查看结果:

本专栏持续更新中...... 

这篇关于RestClient操作索引库和文档的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/584434

相关文章

Mysql数据库中数据的操作CRUD详解

《Mysql数据库中数据的操作CRUD详解》:本文主要介绍Mysql数据库中数据的操作(CRUD),详细描述对Mysql数据库中数据的操作(CRUD),包括插入、修改、删除数据,还有查询数据,包括... 目录一、插入数据(insert)1.插入数据的语法2.注意事项二、修改数据(update)1.语法2.有

Python文件操作与IO流的使用方式

《Python文件操作与IO流的使用方式》:本文主要介绍Python文件操作与IO流的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、python文件操作基础1. 打开文件2. 关闭文件二、文件读写操作1.www.chinasem.cn 读取文件2. 写

Java实现MinIO文件上传的加解密操作

《Java实现MinIO文件上传的加解密操作》在云存储场景中,数据安全是核心需求之一,MinIO作为高性能对象存储服务,支持通过客户端加密(CSE)在数据上传前完成加密,下面我们来看看如何通过Java... 目录一、背景与需求二、技术选型与原理1. 加密方案对比2. 核心算法选择三、完整代码实现1. 加密上

MySQL索引失效问题及解决方案

《MySQL索引失效问题及解决方案》:本文主要介绍MySQL索引失效问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql索引失效一、概要二、常见的导致MpythonySQL索引失效的原因三、如何诊断MySQL索引失效四、如何解决MySQL索引失

SQL常用操作精华之复制表、跨库查询、删除重复数据

《SQL常用操作精华之复制表、跨库查询、删除重复数据》:本文主要介绍SQL常用操作精华之复制表、跨库查询、删除重复数据,这些SQL操作涵盖了数据库开发中最常用的技术点,包括表操作、数据查询、数据管... 目录SQL常用操作精华总结表结构与数据操作高级查询技巧SQL常用操作精华总结表结构与数据操作复制表结

浅谈Redis Key 命名规范文档

《浅谈RedisKey命名规范文档》本文介绍了Redis键名命名规范,包括命名格式、具体规范、数据类型扩展命名、时间敏感型键名、规范总结以及实际应用示例,感兴趣的可以了解一下... 目录1. 命名格式格式模板:示例:2. 具体规范2.1 小写命名2.2 使用冒号分隔层级2.3 标识符命名3. 数据类型扩展命

Java使用Stream流的Lambda语法进行List转Map的操作方式

《Java使用Stream流的Lambda语法进行List转Map的操作方式》:本文主要介绍Java使用Stream流的Lambda语法进行List转Map的操作方式,具有很好的参考价值,希望对大... 目录背景Stream流的Lambda语法应用实例1、定义要操作的UserDto2、ListChina编程转成M

Git可视化管理工具(SourceTree)使用操作大全经典

《Git可视化管理工具(SourceTree)使用操作大全经典》本文详细介绍了SourceTree作为Git可视化管理工具的常用操作,包括连接远程仓库、添加SSH密钥、克隆仓库、设置默认项目目录、代码... 目录前言:连接Gitee or github,获取代码:在SourceTree中添加SSH密钥:Cl

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

Python中pywin32 常用窗口操作的实现

《Python中pywin32常用窗口操作的实现》本文主要介绍了Python中pywin32常用窗口操作的实现,pywin32主要的作用是供Python开发者快速调用WindowsAPI的一个... 目录获取窗口句柄获取最前端窗口句柄获取指定坐标处的窗口根据窗口的完整标题匹配获取句柄根据窗口的类别匹配获取句