【Elasticsearch】es基础入门-03.RestClient操作文档

RestClient操作文档

示例:

一.初始化JavaRestClient

(一)引入es的RestHighLevelClient依赖

<!--elasticsearch-->
<dependency>
	<groupId>org.elasticsearch.client</groupId>
	<artifactId>elasticsearch-rest-high-level-client</artifactId>
</dependency>

(二)因为SpringBoot默认的ES版本是7.6.2,所以我们需要覆盖默认的ES版本:

<properties>
	<elasticsearch.version>7.17.21</elasticsearch.version>
</properties>

(三)新建一个测试类,初始化JavaRestClient

public class HotelDocumentTest {
    
    private RestHighLevelClient client;

    @BeforeEach
    void setUp() {
        client = new RestHighLevelClient(RestClient.builder(
                HttpHost.create("http://192.168.174.129:9200")
        ));
    }
   
    @AfterEach
    void tearDown() throws IOException {
        client.close();
    }
}

二.添加酒店数据到文档

(一)数据库文件

-- ----------------------------
-- 创建表
-- ----------------------------
DROP TABLE IF EXISTS `tb_hotel`;
CREATE TABLE `tb_hotel`  (
  `id` bigint(20) NOT NULL COMMENT '酒店id',
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '酒店名称',
  `address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '酒店地址',
  `price` int(10) NOT NULL COMMENT '酒店价格',
  `score` int(2) NOT NULL COMMENT '酒店评分',
  `brand` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '酒店品牌',
  `city` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '所在城市',
  `star_name` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '酒店星级,1星到5星,1钻到5钻',
  `business` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '商圈',
  `latitude` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '纬度',
  `longitude` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '经度',
  `pic` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '酒店图片',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Compact;

-- ----------------------------
-- 插入一点数据
-- ----------------------------
INSERT INTO `tb_hotel` VALUES (36934, '7天连锁酒店(上海宝山路地铁站店)', '静安交通路40号', 336, 37, '7天酒店', '上海', '二钻', '四川北路商业区', '31.251433', '121.47522', 'https://m.tuniucdn.com/fb2/t1/G1/M00/3E/40/Cii9EVkyLrKIXo1vAAHgrxo_pUcAALcKQLD688AAeDH564_w200_h200_c1_t0.jpg');
INSERT INTO `tb_hotel` VALUES (38609, '速8酒店(上海赤峰路店)', '广灵二路126号', 249, 35, '速8', '上海', '二钻', '四川北路商业区', '31.282444', '121.479385', 'https://m.tuniucdn.com/fb2/t1/G2/M00/DF/96/Cii-TFkx0ImIQZeiAAITil0LM7cAALCYwKXHQ4AAhOi377_w200_h200_c1_t0.jpg');
INSERT INTO `tb_hotel` VALUES (38665, '速8酒店上海中山北路兰田路店', '兰田路38号', 226, 35, '速8', '上海', '二钻', '长风公园地区', '31.244288', '121.422419', 'https://m.tuniucdn.com/fb2/t1/G2/M00/EF/86/Cii-Tlk2mV2IMZ-_AAEucgG3dx4AALaawEjiycAAS6K083_w200_h200_c1_t0.jpg');
INSERT INTO `tb_hotel` VALUES (38812, '7天连锁酒店(上海漕溪路地铁站店)', '徐汇龙华西路315弄58号', 298, 37, '7天酒店', '上海', '二钻', '八万人体育场地区', '31.174377', '121.442875', 'https://m.tuniucdn.com/fb2/t1/G2/M00/E0/0E/Cii-TlkyIr2IEWNoAAHQYv7i5CkAALD-QP2iJwAAdB6245_w200_h200_c1_t0.jpg');
INSERT INTO `tb_hotel` VALUES (39106, '7天连锁酒店(上海莘庄地铁站店)', '闵行莘庄镇七莘路299号', 348, 41, '7天酒店', '上海', '二钻', '莘庄工业区', '31.113812', '121.375869', 'https://m.tuniucdn.com/fb2/t1/G2/M00/D8/11/Cii-T1ku2zGIGR7uAAF1NYY9clwAAKxZAHO8HgAAXVN368_w200_h200_c1_t0.jpg');
INSERT INTO `tb_hotel` VALUES (39141, '7天连锁酒店(上海五角场复旦同济大学店)', '杨浦国权路315号', 349, 38, '7天酒店', '上海', '二钻', '江湾、五角场商业区', '31.290057', '121.508804', 'https://m.tuniucdn.com/fb2/t1/G2/M00/C7/E3/Cii-T1knFXCIJzNYAAFB8-uFNAEAAKYkQPcw1IAAUIL012_w200_h200_c1_t0.jpg');
INSERT INTO `tb_hotel` VALUES (45845, '上海西藏大厦万怡酒店', '虹桥路100号', 589, 45, '万怡', '上海', '四钻', '徐家汇地区', '31.192714', '121.434717', 'https://m.tuniucdn.com/fb3/s1/2n9c/48GNb9GZpJDCejVAcQHYWwYyU8T_w200_h200_c1_t0.jpg');
INSERT INTO `tb_hotel` VALUES (45870, '上海临港豪生大酒店', '新元南路555号', 896, 45, '豪生', '上海', '四星级', '滴水湖临港地区', '30.871729', '121.81959', 'https://m.tuniucdn.com/fb3/s1/2n9c/2F5HoQvBgypoDUE46752ppnQaTqs_w200_h200_c1_t0.jpg');
INSERT INTO `tb_hotel` VALUES (46829, '上海浦西万怡酒店', '恒丰路338号', 726, 46, '万怡', '上海', '四钻', '上海火车站地区', '31.242977', '121.455864', 'https://m.tuniucdn.com/fb3/s1/2n9c/x87VCoyaR8cTuYFZmKHe8VC6Wk1_w200_h200_c1_t0.jpg');
INSERT INTO `tb_hotel` VALUES (47066, '上海浦东东站华美达酒店', '施新路958号', 408, 46, '华美达', '上海', '四钻', '浦东机场核心区', '31.147989', '121.759199', 'https://m.tuniucdn.com/fb3/s1/2n9c/2pNujAVaQbXACzkHp8bQMm6zqwhp_w200_h200_c1_t0.jpg');
INSERT INTO `tb_hotel` VALUES (47478, '速8酒店(上海松江中心店)', '松江荣乐东路677号', 428, 35, '速8', '上海', '二钻', '佘山、松江大学城', '31.016712', '121.261606', 'https://m.tuniucdn.com/filebroker/cdn/res/07/36/073662e1718fccefb7130a9da44ddf5c_w200_h200_c1_t0.jpg');

(二)实体类

索引库实体类Hotel

@Data
@TableName("tb_hotel")
public class Hotel {
    @TableId(type = IdType.INPUT)
    private Long id;
    private String name;
    private String address;
    private Integer price;
    private Integer score;
    private String brand;
    private String city;
    private String starName;
    private String business;
    private String longitude;
    private String latitude;
    private String pic;
}

文档实体类HotelDoc

@Data
@NoArgsConstructor
public class HotelDoc {
    private Long id;
    private String name;
    private String address;
    private Integer price;
    private Integer score;
    private String brand;
    private String city;
    private String starName;
    private String business;
    private String location;
    private String pic;

    public HotelDoc(Hotel hotel) {
        this.id = hotel.getId();
        this.name = hotel.getName();
        this.address = hotel.getAddress();
        this.price = hotel.getPrice();
        this.score = hotel.getScore();
        this.brand = hotel.getBrand();
        this.city = hotel.getCity();
        this.starName = hotel.getStarName();
        this.business = hotel.getBusiness();
        this.location = hotel.getLatitude() + ", " + hotel.getLongitude();
        this.pic = hotel.getPic();
    }
}

(三)mapper层

public interface HotelMapper extends BaseMapper<Hotel> {
}

(四)service层

1

public interface IHotelService extends IService<Hotel> {
}

2

@Service
public class HotelService extends ServiceImpl<HotelMapper, Hotel> implements IHotelService {
}

(五)测试类编写

@SpringBootTest
public class HotelDocumentTest {
    
    private RestHighLevelClient client;

    @Autowired
    private IHotelService hotelService;
    
    @BeforeEach
    void setUp() {
        client = new RestHighLevelClient(RestClient.builder(
            //注意:这里的IP地址是es的地址
                HttpHost.create("http://192.168.174.129:9200")
        ));
    }
   
    @Test
	void testAddDocument() throws IOException {
        //根据id查询酒店信息
        Hotel hotel = hotelService.getById(39106L);
        //转换为文档类型
        HotelDoc hotelDoc = new HotelDoc(hotel);
        
        //1.准备Request对象  索引库名称和文档id
        IndexRequest request = new IndexRequest("hotel").id(hotel.getId().toString());
        //2.准备Json文档
        request.source(JSON.toJSONString(hotelDoc),XContentType.JSON);
        //3.发送请求
        client.index(request,RequestOptions.DEFAULT);
	}
    
    @AfterEach
    void tearDown() throws IOException {
        client.close();
    }
}

三.创建文档的结果

运行测试类后:

在这里插入图片描述

在es可视化平台elastic上,查看创建的文档

GET /hotel/_doc/39106

在这里插入图片描述

四.根据id查询酒店数据

@Test
void testGetDocumentById() throws IOException {
    // 1.准备Request      // GET /hotel/_doc/{id}
    GetRequest request = new GetRequest("hotel", "39106");
    // 2.发送请求
    GetResponse response = client.get(request, RequestOptions.DEFAULT);
    // 3.解析响应结果
    String json = response.getSourceAsString();
	
    //json反序列化
    HotelDoc hotelDoc = JSON.parseObject(json, HotelDoc.class);
    System.out.println("hotelDoc = " + hotelDoc);
}

运行后

在这里插入图片描述

五.根据id修改酒店数据

方式一:全量更新。先删除旧文档,再创建新的文档

方式二:局部更新。只更新部分字段

@Test
void testUpdateById() throws IOException {
    // 1.准备Request
    UpdateRequest request = new UpdateRequest("hotel", "39106");
    // 2.准备参数
    request.doc(
            "price", "870",
        	"starName","五星"
    );
    // 3.发送请求
    client.update(request, RequestOptions.DEFAULT);
}

先运行修改,再运行查询,结果如下:

在这里插入图片描述

六.根据id删除文档

@Test
void testDeleteDocument() throws IOException {
    //1.准备Request
    DeleteRequest request = new DeleteRequest("hotel","39106");
    //2.发送请求
    client.delete(request,RequestOptions.DEFAULT)
}

先运行删除,再运行查询,结果如下:

在这里插入图片描述

七.RestClient批量导入酒店数据到ES

@Test
void testBulkRequest() throws IOException {
    // 查询所有的酒店数据
    List<Hotel> list = hotelService.list();

    // 1.准备Request
    BulkRequest request = new BulkRequest();
    
    // 2.准备参数
    for (Hotel hotel : list) {
        // 2.1.转为文档类型HotelDoc
        HotelDoc hotelDoc = new HotelDoc(hotel);
        // 2.2.转json
        String json = JSON.toJSONString(hotelDoc);
        // 2.3.添加请求
        request.add(new IndexRequest("hotel")
                    .id(hotel.getId().toString())
                    .source(json, XContentType.JSON));
     }

     // 3.发送请求
     client.bulk(request, RequestOptions.DEFAULT);
}

运行后

在这里插入图片描述

在es可视化平台elastic上,查看所有文档

GET /hotel/_search

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/685131.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于springboot+vue的家乡特色推荐系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

SpringBoot高手之路03-事务传播行为

那么就是 a事务调用了b事务 日志技术 当解散部门的时候,那么就直接进行 操作日志 就是什么时间点吧部门解散 成功失败都需要记录日志 首先一个日志表 那么日志技术,在电商平台,不论是否支付订单,那么都需要保存订单信息 这个时候我们就使用传播事务 传播事务首先是出现在两…

云南区块链商户平台发票助手成品

目录 1 概述2 功能对比3 项目演示图4 核心逻辑4.1智能赋码4.2 解密方法4.3 登录与检测4.4 发票金额大写转换4.5 检查登录是否失效4.6 验证码识别5 演示效果6 项目部署6.1 Web站点部署6.1.1 环境6.1.2 前端6.1.3 后端6.2 Docker部署6.2.1 构建镜像6.2.2 创建容器6.3.3 访问项目域…

混剪素材哪里找?分享几个热门混剪素材下载网站

在短视频和新媒体的世界里&#xff0c;高质量的混剪素材是吸引观众的关键。今天&#xff0c;我将为大家详细介绍几个优秀的素材网站&#xff0c;它们不仅资源丰富&#xff0c;而且完全满足新媒体创作者的需求。这篇文章将帮助你理解如何有效利用这些平台提升你的视频创作。 蛙…

Python中的“点阵字体”

“点阵字体”是个啥&#xff1f;&#xff0c;在python中怎么使&#xff1f;在现在全面高清的 5 G 5G 5G时代&#xff0c;它还有用“武”之地&#xff1f; (笔记模板由python脚本于2024年06月01日 18:44:31创建&#xff0c;本篇笔记适合会基本编程的coder翻阅) 【学习的细节是欢…

BabylonJS 6.0文档 Deep Dive 动画(四):通过动画排序制作卡通片

一种最为直接的方法是为每个动画剪辑&#xff08;Animatin Clip&#xff09;指定开始时间&#xff0c;最终形成一个卡通动画&#xff08;Cartoon&#xff09;。 1. 设计 1.1 概述 动画的脚本如下&#xff1a; 摄像机显示了一栋带门的建筑物。摄像机靠近门并停止。门打开&am…

⾃动化批量管理-Ansible

目录 一、ansible 简介 自动化工具选择 &#xff08;了解&#xff09;​编辑 1、ansible 是什么&#xff1f; 2、ansible 特点 3、ansible 架构图 二、ansible 任务执行 1、ansible 任务执行模式 2、ansible 执行流程 3、ansible 命令执行过程 三、ansible 配置详解 …

Win32和c++11多线程

Win32和c11多线程 一、概念1.线程的特点线程内核对象线程控制块线程是独立调度和分派的基本单位共享进程的资源 2.线程的上下文切换引起上下文切换的原因 3.线程的状态 二、Windows多线程API1.CreateThread创建线程2.获取线程ID3.关闭线程句柄4.挂起线程5.恢复线程6.休眠线程的…

必应bing国内广告账户如何注册推广呢?

作为全球第二大搜索引擎&#xff0c;必应Bing以其庞大的用户基础和精准的定向能力&#xff0c;为企业提供了拓展市场的绝佳平台。对于许多企业来说&#xff0c;必应Bing广告账户的注册与推广流程可能显得复杂而繁琐。此时&#xff0c;您不妨考虑携手云衔科技&#xff0c;共同开…

echaerts图例自动滚动并隐藏翻页按钮

效果图 代码 legend: {itemHeight: 14,itemWidth: 14,height: "300", //决定显示多少个// 通过 CSS 完全隐藏翻页按钮pageButtonItemGap: 0,pageButtonPosition: end,pageIconColor: transparent, // 隐藏翻页按钮pageIconInactiveColor: transparent, // 隐藏翻页按…

神经网络 torch.nn---优化器的使用

torch.optim - PyTorch中文文档 (pytorch-cn.readthedocs.io) torch.optim — PyTorch 2.3 documentation 反向传播可以求出神经网路中每个需要调节参数的梯度(grad)&#xff0c;优化器可以根据梯度进行调整&#xff0c;达到降低整体误差的作用。下面我们对优化器进行介绍。 …

2024年6月6日第十五周六级系列1作文

对于2024年上半年六级作文预测的大纲 一、作文总体格式与要求 六级作文将继续沿用以往的大致格式&#xff0c;主要包括两个主要任务&#xff1a; Task 1: 针对给定话题的简短摘要或观点文章&#xff08;150-200字&#xff09;。Task 2: 就更复杂的话题进行深入分析的作文&…

23 - 每位教师所教授的科目种类的数量(高频 SQL 50 题基础版)

23 - 每位教师所教授的科目种类的数量 考点&#xff1a; 排序和分组 selectteacher_id,count(distinct subject_id) cnt fromTeacher group byteacher_id;

完整指南:远程管理 Linux 服务器的 Xshell6 和 Xftp6 使用方法(Xshell无法启动:要继续使用此程序........,的解决方法)

&#x1f600;前言 在当今软件开发领域&#xff0c;远程管理 Linux 服务器已成为日常工作的重要组成部分。随着团队成员分布在不同的地理位置&#xff0c;远程登录工具的使用变得至关重要&#xff0c;它们为开发人员提供了访问和管理服务器的便捷方式。本文将介绍两款功能强大的…

敏捷开发:拥抱变化,持续交付价值的艺术

目录 敏捷开发&#xff1a;拥抱变化&#xff0c;持续交付价值的艺术 引言 第一部分&#xff1a;敏捷开发是什么&#xff1f; a.定义&#xff1a;敏捷开发的基本概念和核心原则 b.历史&#xff1a;敏捷宣言的诞生和敏捷开发的历史背景 c.价值观&#xff1a;敏捷宣言的12条…

一篇文章带你入门XXE

1.什么是XXE&#xff1f; XML External Entity&#xff08;XXE&#xff09;攻击是一种利用 XML 处理器的漏洞&#xff0c;通过引入恶意的外部实体来攻击应用程序的安全性。这种攻击通常发生在对用户提供的 XML 数据进行解析时&#xff0c;攻击者利用了 XML 规范允许引用外部实体…

USB (1)

再看USB 其实回过头看USB 是可以和无线 有线(internet) 可以和PCIe 甚至AXI类比的 它们共通处在于都是communication 有限通信 有7层网络协议 在USB也是分层的 不同的协议,依赖的介质不一样 这就要求相应的Physical层处理 USB的physical层是基于Serdes的,所以有串并/并串的…

JavaScript html css前端 日期对象 date对象 日期格式化 时间戳

日期对象 Date对象 Date 对象和 Math 对象不一样&#xff0c;他是一个构造函数&#xff0c;所以我们需要实例化后才能使用 Date 实例用来处理日期和时间 Date()使用方法 示例&#xff1a;获取当前时间 let now new Date() console.log(now) 示例&#xff1a;获取指定时间…

二叉树非递归遍历(C++)

文章目录 前言一、前序遍历二、中序遍历三、后序遍历总结 前言 我们之前学习过用递归解决二叉树的前序&#xff0c;中序&#xff0c;后序。 下面我们将用非递归&#xff0c;也就是遍历的方法对二叉树进行遍历 一、前序遍历 我们要解决这个问题最重要的就是用另一个角度看待这…

推荐个 Edge/Chrome/Firefox 都支持的 IP 定位查询扩展

作为一个博客站长&#xff0c;对 IP 地址应该都不陌生&#xff0c;可以说是跟站长的工作是息息相关的&#xff0c;反正明月几乎每天都会面临 IP 查询、定位的需要&#xff0c;今天让明月给找到了一个叫”IP 定位查询“的浏览器扩展&#xff0c;在 Edge 和 Firefox 下体验后感觉…