RestClient操作索引库和文档

news2024/12/28 18:44:35

导入依赖:

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

导入依赖成功之后就可以开始我们的测试了!!!

RestClient操作索引库

创建RestClient

在测试方法中进行测试,首先我们需要创建一个RestHighLevelClient,使用@BeforeEach注解进行create,使用@AfterEach关闭链接。然后我们打印client

 	private RestHighLevelClient client;

    /**
     * BeforeEach注解是指,在执行其他测试方法之前,必须先执行一次该方法
     */
    @BeforeEach
    void setUp() {
        client = new RestHighLevelClient(RestClient.builder(
                HttpHost.create("http://公网ip:9200")
        ));
    }

    /**
     * AfterEach注解是指,在执行其他测试方法之后,必须先执行一次该方法
     */
    @AfterEach
    void tearDown() throws IOException {
        client.close();
    }

在这里插入图片描述

新增索引库

  1. 创建Request对象
  2. 准备请求的参数:DSL语句
  3. 发生请求
    @Test
    void createHotelIndex() throws IOException {
        // 1. 创建Request对象
        CreateIndexRequest request = new CreateIndexRequest("user");
        // 2. 准备请求的参数:DSL语句
        request.source("{\n" +
                "  \"mappings\": {\n" +
                "    \"properties\": {\n" +
                "      \"id\": {\n" +
                "        \"type\": \"keyword\"\n" +
                "      },\n" +
                "      \"name\": {\n" +
                "        \"type\": \"text\",\n" +
                "        \"analyzer\": \"ik_max_word\"\n" +
                "      }\n" +
                "    }\n" +
                "  }\n" +
                "}", XContentType.JSON);
        // 3. 发生请求
        client.indices().create(request, RequestOptions.DEFAULT);
    }

运行成功后我们回到Dev Tools查询

GET /usr

在这里插入图片描述

删除和查看索引库

    @Test
    void deleteHotelIndex() throws IOException {
        DeleteIndexRequest request = new DeleteIndexRequest("user");
        client.indices().delete(request, RequestOptions.DEFAULT);
    }

    @Test
    void existsHotelIndex() throws IOException {
        GetIndexRequest request = new GetIndexRequest("user");
        boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
        System.out.println(exists ? "索引库已经存在" : "索引库不存在");
    }

RestClient操作文档

准备工作

这里我们配合mysql来完成文档的操作,要使用mybatis-plus,所以给该测试类加上@SpringBootTest,并注入相应的mapper或者service。
user的sql语句

DROP TABLE IF EXISTS `tb_user`;
CREATE TABLE `tb_user`  (
  `id` bigint(25) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 12 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

INSERT INTO `tb_user` VALUES (1, 'zhangsan');
INSERT INTO `tb_user` VALUES (2, 'lisi');
INSERT INTO `tb_user` VALUES (3, 'wangwu');
INSERT INTO `tb_user` VALUES (4, 'zhaoliu');
INSERT INTO `tb_user` VALUES (5, 'xiaomei');
INSERT INTO `tb_user` VALUES (6, 'xiaobai');
INSERT INTO `tb_user` VALUES (7, 'at');
INSERT INTO `tb_user` VALUES (8, 'sh');
INSERT INTO `tb_user` VALUES (9, 'wsgp');
INSERT INTO `tb_user` VALUES (10, 'iop');
INSERT INTO `tb_user` VALUES (11, 'askdhgk');

user实体类

package cn.itcast.hotel.pojo;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

@Data
@TableName("tb_user")
public class User {
    @TableId(type = IdType.INPUT)
    private Long id;
    private String Name;
}

UserMapper类

package cn.itcast.hotel.mapper;

import cn.itcast.hotel.pojo.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;

public interface UserMapper extends BaseMapper<User> {
}

单个文档插入

    @Test
    void addDoc() throws IOException {
        User user = userMapper.selectById(1);
        System.out.println(user);
        IndexRequest request = new IndexRequest("user").id(user.getId().toString());
        request.source(JSON.toJSONString(user), XContentType.JSON);
        client.index(request, RequestOptions.DEFAULT);
    }

查看是否插入成功:
在这里插入图片描述

查询文档

    @Test
    void getDoc() throws IOException {
        GetRequest request = new GetRequest("user", "1");
        GetResponse response = client.get(request, RequestOptions.DEFAULT);
        String json = response.getSourceAsString();
        User user = JSON.parseObject(json, User.class);
        System.out.println(user);
    }

在这里插入图片描述

更新和删除文档

这里有全量更新和局部更新,全量更新就和插入文档一样,所以这里只介绍局部更新。

    /**
     * 局部更新
     */
    @Test
    void updateDoc() throws IOException {
        UpdateRequest request = new UpdateRequest("user", "1");
        request.doc(
                "name", "zs"
        );
        client.update(request, RequestOptions.DEFAULT);
    }
    
    /**
     * 删除指定文档
     * @throws IOException
     */
    @Test
    void deleteDoc() throws IOException {
        DeleteRequest request = new DeleteRequest("user", "1");
        client.delete(request, RequestOptions.DEFAULT);
    }

在这里插入图片描述
在这里插入图片描述

批量插入文档

    /**
     * 批量插入
     * @throws IOException
     */
    @Test
    void addDocBulk() throws IOException {
        List<User> users = userMapper.selectList(null);

        BulkRequest request = new BulkRequest();
        for (User user : users) {
            request.add(new IndexRequest("test")
                    .id(user.getId().toString())
                    .source(JSON.toJSONString(user), XContentType.JSON)
            );
        }
        client.bulk(request, RequestOptions.DEFAULT);
    }

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java特性之设计模式【访问者模式】

一、访问者模式 概述 在访问者模式&#xff08;Visitor Pattern&#xff09;中&#xff0c;我们使用了一个访问者类&#xff0c;它改变了元素类的执行算法。通过这种方式&#xff0c;元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。根据模式&…

栅格地图、障碍物地图与膨胀地图(膨胀地图(二)写一张膨胀地图)

前面看完了膨胀地图相关的内容&#xff0c;这里根据前面看过的内容手搓一张膨胀地图试一下。 1、数据预处理 第一步,先进行数据预处理&#xff0c;为了后续计算方便&#xff0c;首先在这里预先计算两张二维数组表&#xff0c;后续遍历时会用到这张表&#xff1a; void map_t…

UniAudio 1.5:大型语言模型(LLMs)驱动的音频编解码器

大型语言模型&#xff08;LLMs&#xff09;在文本理解和生成方面展示了卓越的能力&#xff0c;但它们不能直接应用于跨模态任务&#xff0c;除非进行微调。本文提出了一种跨模态上下文学习方法&#xff0c;使未进行进一步训练的LLMs能够在少量示例的情况下&#xff0c;无需任何…

stack=s+stack#TypeError: can only concatenate str (not “list“) to str

PYTHON的神奇操作 stack[1,2] s"ddd" # stacksstack#TypeError: can only concatenate str (not "list") to str stacks print(stack)#[1, 2, d, d, d] stack[1,2] s"ddd" stacksstack # 这里会报错&#xff0c;因为不能直接将字符串和列表相加…

强大的多数据库客户端工具:DataGrip【送源码】

今天给大家带来的工具是&#xff1a;DataGrip 介绍 DataGrip是jetbrains开发的一款关系数据库和 NoSQL 数据库的多数据库客户端工具&#xff0c;可以30天免费试用&#xff0c;后续使用需要购买。 DataGrip还是一款强大的跨平台工具&#xff0c;支持多种操作系统&#xff0c;比…

创建线程

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 由于线程是操作系统直接支持的执行单元&#xff0c;因此&#xff0c;高级语言&#xff08;如Python、Java等&#xff09;通常都内置多线程的支持。Py…

京东h5st4.73

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; lianxi a15018601872 …

只有你相信,客户才会相信

我们外贸人在一起聊天的时候&#xff0c;可能最常说的话就是我们的产品不好做&#xff0c;出单太难了&#xff0c;是不是产品不行啊&#xff1f;但是又不知道什么产品好做&#xff0c;好不容易听到一款产品好做吧&#xff1f;自己又不懂&#xff0c;摸索不出来&#xff0c;因此…

洛谷 P1726:上白泽慧音 ← Tarjan算法

【题目来源】https://www.luogu.com.cn/problem/P1726【题目描述】 在幻想乡&#xff0c;上白泽慧音是以知识渊博闻名的老师。春雪异变导致人间之里的很多道路都被大雪堵塞&#xff0c;使有的学生不能顺利地到达慧音所在的村庄。因此慧音决定换一个能够聚集最多人数的村庄作为新…

李宏毅2023机器学习作业HW06解析和代码分享

ML2023Spring - HW6 相关信息&#xff1a; 课程主页 课程视频 Sample code HW06 视频 HW06 PDF 个人完整代码分享: GitHub | Gitee | GitCode P.S. HW06 是在 Judgeboi 上提交的&#xff0c;出于学习目的这里会自定义两个度量的函数&#xff0c;不用深究&#xff0c;遵循 Sugge…

JS正则表达式构造函数和正则表达式字面量的区别

背景 笔者在使用正则表达式的过程中&#xff0c;经常看到两种使用方式&#xff0c;比较好奇这两种方式有什么不同。 一种是 正则表达式构造函数&#xff1a;new RegExp(“[xxx]”) 另一种是 正则表达式字面量&#xff1a; /[xxx]/ 于是&#xff0c;就去网上搜了一下…结果看到国…

【H5全行业数据大屏展示】—— 数据大屏分享

数据大屏展示是一种将大量数据以可视化形式展示在屏幕上的方式&#xff0c;可以帮助人们更直观地理解和分析数据。在各行各业中&#xff0c;数据大屏展示已经成为一种流行的工具&#xff0c;被广泛应用于数据分析、决策支持和业务监控等方面。在本文中&#xff0c;将分享一些数…

“论数据访问层设计技术及其应用”写作框架,系统架构设计师

论文真题 在信息系统的开发与建设中&#xff0c;分层设计是一种常见的架构设计方法&#xff0c;区分层次的目的是为了实现“高内聚低耦合”的思想。分层设计能有效简化系统复杂性&#xff0c;使设计结构清晰&#xff0c;便于提高复用能力和产品维护能力。一种常见的层次划分模…

文件系统实验(操作系统)

文件系统实验 【预备知识】 1.文件系统的文件类型 为了便于用户利用终端进行输入和输出&#xff0c;UNIX系统做了专门安排。UNIX系统自动为用户打开3个文件&#xff1a;标准输入、标准输出和标准错误输出文件&#xff0c;文件描述符分别为0、1、2&#xff0c;缺省时&#xff0c…

分班查询,一键发布,老师们都在用的分班查询系统

老师们开学季马上又要到了&#xff0c;回想起了每年埋头苦干&#xff0c;对着一堆堆的学生名单&#xff0c;一个个手动分配班级&#xff0c;再一个个通知家长和学生的日子&#xff0c;那种手忙脚乱&#xff0c;生怕出错的紧张感&#xff0c;是不是还历历在目&#xff1f;每次分…

Instagram Reels API接口——高效获取用户主页Reels视频

一、引言 Instagram作为全球知名的社交媒体平台&#xff0c;近年来推出的Reels功能受到了广大用户的热烈欢迎。Reels以短视频的形式&#xff0c;让用户能够轻松创作和分享有趣、有创意的内容。为了帮助开发者、品牌和分析师更好地利用这一功能&#xff0c;我们推出了一款专注于…

从视频创意到传播策略 | 医药产品TVC新媒体传播方案

作为营销策划人&#xff0c;你一定在寻找能够激发创意灵感、拓展策划视野的实战案例。这份最新传播方案由Unithought精心打造&#xff0c;不仅是一份详尽的策划指南&#xff0c;更是一次深入患者心灵的品牌传播实践。 何策网&#xff0c;每日收录全网方案PPT &#xff01; 方…

手把手教你如何修复填补画图时间序列时出现的空白区域,Python向,Plotly库

填补画图时出现的空白区域&#xff0c;Python向&#xff0c;Plotly库 画图的烦恼美丽的plotly库首选安排时间序列的引索Index接下来我们安排plotly来画图继续修正图的格式 画图的烦恼 大家画时间序列的时候肯定遇到过画图没有软件里来的那么舒服&#xff0c;怎么画都会出现空白…

计算机顶级会议和顶级期刊

顶级会议 国际计算机设计会议&#xff08;ICCD&#xff09;&#xff1a;由国际电气与电子工程师协会&#xff08;IEEE&#xff09;主办&#xff0c;是计算机体系结构领域的国际顶级会议之一&#xff0c;已经成功举办四十余届。 NeurIPS&#xff1a;全称神经信息处理系统大会&a…

机械臂 CoppeliaSim Simulink联合仿真

实现机械臂在CoppeliaSim&#xff08;以前称为V-REP&#xff09;和Simulink上的联合仿真涉及多个步骤&#xff0c;包括环境设置、模型导入、通信配置、控制算法设计和测试调试。 前期准备 安装软件配置工作环境创建和配置CoppeliaSim场景 导入机械臂模型配置机械臂参数在Simuli…