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

相关文章

Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单

《Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单》:本文主要介绍Springboot的ThreadPoolTaskScheduler线... 目录ThreadPoolTaskScheduler线程池实现15分钟不操作自动取消订单概要1,创建订单后

oracle数据库索引失效的问题及解决

《oracle数据库索引失效的问题及解决》本文总结了在Oracle数据库中索引失效的一些常见场景,包括使用isnull、isnotnull、!=、、、函数处理、like前置%查询以及范围索引和等值索引... 目录oracle数据库索引失效问题场景环境索引失效情况及验证结论一结论二结论三结论四结论五总结ora

SpringBoot操作spark处理hdfs文件的操作方法

《SpringBoot操作spark处理hdfs文件的操作方法》本文介绍了如何使用SpringBoot操作Spark处理HDFS文件,包括导入依赖、配置Spark信息、编写Controller和Ser... 目录SpringBoot操作spark处理hdfs文件1、导入依赖2、配置spark信息3、cont

使用JavaScript操作本地存储

《使用JavaScript操作本地存储》这篇文章主要为大家详细介绍了JavaScript中操作本地存储的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... 目录本地存储:localStorage 和 sessionStorage基本使用方法1. localStorage

使用JavaScript将PDF页面中的标注扁平化的操作指南

《使用JavaScript将PDF页面中的标注扁平化的操作指南》扁平化(flatten)操作可以将标注作为矢量图形包含在PDF页面的内容中,使其不可编辑,DynamsoftDocumentViewer... 目录使用Dynamsoft Document Viewer打开一个PDF文件并启用标注添加功能扁平化

JavaScript DOM操作与事件处理方法

《JavaScriptDOM操作与事件处理方法》本文通过一系列代码片段,详细介绍了如何使用JavaScript进行DOM操作、事件处理、属性操作、内容操作、尺寸和位置获取,以及实现简单的动画效果,涵... 目录前言1. 类名操作代码片段代码解析2. 属性操作代码片段代码解析3. 内容操作代码片段代码解析4.

SpringBoot3集成swagger文档的使用方法

《SpringBoot3集成swagger文档的使用方法》本文介绍了Swagger的诞生背景、主要功能以及如何在SpringBoot3中集成Swagger文档,Swagger可以帮助自动生成API文档... 目录一、前言1. API 文档自动生成2. 交互式 API 测试3. API 设计和开发协作二、使用

SpringBoot使用Apache POI库读取Excel文件的操作详解

《SpringBoot使用ApachePOI库读取Excel文件的操作详解》在日常开发中,我们经常需要处理Excel文件中的数据,无论是从数据库导入数据、处理数据报表,还是批量生成数据,都可能会遇到... 目录项目背景依赖导入读取Excel模板的实现代码实现代码解析ExcelDemoInfoDTO 数据传输

Python使用asyncio实现异步操作的示例

《Python使用asyncio实现异步操作的示例》本文主要介绍了Python使用asyncio实现异步操作的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋... 目录1. 基础概念2. 实现异步 I/O 的步骤2.1 定义异步函数2.2 使用 await 等待异

Python中列表的高级索引技巧分享

《Python中列表的高级索引技巧分享》列表是Python中最常用的数据结构之一,它允许你存储多个元素,并且可以通过索引来访问这些元素,本文将带你深入了解Python列表的高级索引技巧,希望对... 目录1.基本索引2.切片3.负数索引切片4.步长5.多维列表6.列表解析7.切片赋值8.删除元素9.反转列表