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

相关文章

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

mysql表操作与查询功能详解

《mysql表操作与查询功能详解》本文系统讲解MySQL表操作与查询,涵盖创建、修改、复制表语法,基本查询结构及WHERE、GROUPBY等子句,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随... 目录01.表的操作1.1表操作概览1.2创建表1.3修改表1.4复制表02.基本查询操作2.1 SE

MySQL之InnoDB存储引擎中的索引用法及说明

《MySQL之InnoDB存储引擎中的索引用法及说明》:本文主要介绍MySQL之InnoDB存储引擎中的索引用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录1、背景2、准备3、正篇【1】存储用户记录的数据页【2】存储目录项记录的数据页【3】聚簇索引【4】二

c++中的set容器介绍及操作大全

《c++中的set容器介绍及操作大全》:本文主要介绍c++中的set容器介绍及操作大全,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录​​一、核心特性​​️ ​​二、基本操作​​​​1. 初始化与赋值​​​​2. 增删查操作​​​​3. 遍历方

全面解析MySQL索引长度限制问题与解决方案

《全面解析MySQL索引长度限制问题与解决方案》MySQL对索引长度设限是为了保持高效的数据检索性能,这个限制不是MySQL的缺陷,而是数据库设计中的权衡结果,下面我们就来看看如何解决这一问题吧... 目录引言:为什么会有索引键长度问题?一、问题根源深度解析mysql索引长度限制原理实际场景示例二、五大解决

MySQL追踪数据库表更新操作来源的全面指南

《MySQL追踪数据库表更新操作来源的全面指南》本文将以一个具体问题为例,如何监测哪个IP来源对数据库表statistics_test进行了UPDATE操作,文内探讨了多种方法,并提供了详细的代码... 目录引言1. 为什么需要监控数据库更新操作2. 方法1:启用数据库审计日志(1)mysql/mariad

springboot如何通过http动态操作xxl-job任务

《springboot如何通过http动态操作xxl-job任务》:本文主要介绍springboot如何通过http动态操作xxl-job任务的问题,具有很好的参考价值,希望对大家有所帮助,如有错... 目录springboot通过http动态操作xxl-job任务一、maven依赖二、配置文件三、xxl-

MySQL中的索引结构和分类实战案例详解

《MySQL中的索引结构和分类实战案例详解》本文详解MySQL索引结构与分类,涵盖B树、B+树、哈希及全文索引,分析其原理与优劣势,并结合实战案例探讨创建、管理及优化技巧,助力提升查询性能,感兴趣的朋... 目录一、索引概述1.1 索引的定义与作用1.2 索引的基本原理二、索引结构详解2.1 B树索引2.2

python3如何找到字典的下标index、获取list中指定元素的位置索引

《python3如何找到字典的下标index、获取list中指定元素的位置索引》:本文主要介绍python3如何找到字典的下标index、获取list中指定元素的位置索引问题,具有很好的参考价值,... 目录enumerate()找到字典的下标 index获取list中指定元素的位置索引总结enumerat

Python Pillow 库详解文档(最新推荐)

《PythonPillow库详解文档(最新推荐)》Pillow是Python中最流行的图像处理库,它是PythonImagingLibrary(PIL)的现代分支和继承者,本文给大家介绍Pytho... 目录python Pillow 库详解文档简介安装核心模块架构Image 模块 - 核心图像处理基本导入