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

相关文章

使用Java填充Word模板的操作指南

《使用Java填充Word模板的操作指南》本文介绍了Java填充Word模板的实现方法,包括文本、列表和复选框的填充,首先通过Word域功能设置模板变量,然后使用poi-tl、aspose-words... 目录前言一、设置word模板普通字段列表字段复选框二、代码1. 引入POM2. 模板放入项目3.代码

使用EasyPoi快速导出Word文档功能的实现步骤

《使用EasyPoi快速导出Word文档功能的实现步骤》EasyPoi是一个基于ApachePOI的开源Java工具库,旨在简化Excel和Word文档的操作,本文将详细介绍如何使用EasyPoi快速... 目录一、准备工作1、引入依赖二、准备好一个word模版文件三、编写导出方法的工具类四、在Export

利用Python操作Word文档页码的实际应用

《利用Python操作Word文档页码的实际应用》在撰写长篇文档时,经常需要将文档分成多个节,每个节都需要单独的页码,下面:本文主要介绍利用Python操作Word文档页码的相关资料,文中通过代码... 目录需求:文档详情:要求:该程序的功能是:总结需求:一次性处理24个文档的页码。文档详情:1、每个

Python内存管理机制之垃圾回收与引用计数操作全过程

《Python内存管理机制之垃圾回收与引用计数操作全过程》SQLAlchemy是Python中最流行的ORM(对象关系映射)框架之一,它提供了高效且灵活的数据库操作方式,本文将介绍如何使用SQLAlc... 目录安装核心概念连接数据库定义数据模型创建数据库表基本CRUD操作创建数据读取数据更新数据删除数据查

Go语言中json操作的实现

《Go语言中json操作的实现》本文主要介绍了Go语言中的json操作的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录 一、jsOChina编程N 与 Go 类型对应关系️ 二、基本操作:编码与解码 三、结构体标签(Struc

C++读写word文档(.docx)DuckX库的使用详解

《C++读写word文档(.docx)DuckX库的使用详解》DuckX是C++库,用于创建/编辑.docx文件,支持读取文档、添加段落/片段、编辑表格,解决中文乱码需更改编码方案,进阶功能含文本替换... 目录一、基本用法1. 读取文档3. 添加段落4. 添加片段3. 编辑表格二、进阶用法1. 文本替换2

一文详解MySQL索引(六张图彻底搞懂)

《一文详解MySQL索引(六张图彻底搞懂)》MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度,:本文主要介绍MySQL索引的相关资料,文中通过代码介绍的... 目录一、什么是索引?为什么需要索引?二、索引该用哪种数据结构?1. 哈希表2. 跳表3. 二叉排序树4.

Java 字符串操作之contains 和 substring 方法最佳实践与常见问题

《Java字符串操作之contains和substring方法最佳实践与常见问题》本文给大家详细介绍Java字符串操作之contains和substring方法最佳实践与常见问题,本文结合实例... 目录一、contains 方法详解1. 方法定义与语法2. 底层实现原理3. 使用示例4. 注意事项二、su

Python实现自动化删除Word文档超链接的实用技巧

《Python实现自动化删除Word文档超链接的实用技巧》在日常工作中,我们经常需要处理各种Word文档,本文将深入探讨如何利用Python,特别是借助一个功能强大的库,高效移除Word文档中的超链接... 目录为什么需要移除Word文档超链接准备工作:环境搭建与库安装核心实现:使用python移除超链接的

Java Stream流与使用操作指南

《JavaStream流与使用操作指南》Stream不是数据结构,而是一种高级的数据处理工具,允许你以声明式的方式处理数据集合,类似于SQL语句操作数据库,本文给大家介绍JavaStream流与使用... 目录一、什么是stream流二、创建stream流1.单列集合创建stream流2.双列集合创建str