SpringBoot集成Easy-Es

2023-05-16

文章目录

  • SpringBoot集成Easy-Es
    • 一、集成demo
    • 二、索引CRUD
        • 创建索引
        • 查询索引
        • 更新索引
        • 删除索引
    • 三、数据CURD
    • 四、参数文档

SpringBoot集成Easy-Es

Easy-Es(简称EE)是一款基于ElasticSearch(简称Es)官方提供的RestHighLevelClient打造的ORM开发框架,在 RestHighLevelClient 的基础上,只做增强不做改变,为简化开发、提高效率而生

一、集成demo

1、添加依赖

        <!-- 排除springboot中内置的es依赖,以防和easy-es中的依赖冲突-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.elasticsearch.client</groupId>
                    <artifactId>elasticsearch-rest-high-level-client</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.elasticsearch</groupId>
                    <artifactId>elasticsearch</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!--引入es的坐标-->
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>7.14.1</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-client</artifactId>
            <version>7.14.1</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>7.14.1</version>
        </dependency>

        <dependency>
            <groupId>cn.easy-es</groupId>
            <artifactId>easy-es-boot-starter</artifactId>
            <version>1.1.1</version>
        </dependency>

2、配置信息

# 默认为true,若为false时,则认为不启用本框架
easy-es.enable: true
#填你的es连接地址
easy-es.address : 127.0.0.1:9200
# username: 有设置才填写,非必须
easy-es.username : elastic
# password: 有设置才填写,非必须
easy-es.password : 123456

3、启动类中添加 @EsMapperScan 注解,扫描 Mapper 文件夹

@SpringBootApplication
@EsMapperScan("com.example.elasticsearch.mapper")
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

4、实体类和mapper

@Data
public class Document {

    /**
     * es中的唯一id,当您字段命名为id且类型为String时,且不需要采用UUID及自定义ID类型时,可省略此注解
     */
    @IndexId(type = IdType.NONE)
    private String id;
    /**
     * 文档标题,不指定类型默认被创建为keyword类型,可进行精确查询
     */
    private String title;
    /**
     * 文档内容,指定了类型及存储/查询分词器
     */
    @IndexField(fieldType = FieldType.TEXT, analyzer = Analyzer.IK_SMART, searchAnalyzer = Analyzer.IK_MAX_WORD)
    private String content;
}

public interface DocumentMapper extends BaseEsMapper<Document> {
}

5、测试

@RestController
public class EasyEsController {

    @Autowired
    private DocumentMapper documentMapper;

    @GetMapping("/insert")
    public Integer insert() {
        // 初始化-> 新增数据
        Document document = new Document();
        document.setTitle("老汉");
        document.setContent("推*技术过硬");
        return documentMapper.insert(document);
    }

    @GetMapping("/search")
    public List<Document> search() {
        // 查询出所有标题为老汉的文档列表
        LambdaEsQueryWrapper<Document> wrapper = new LambdaEsQueryWrapper<>();
        wrapper.eq(Document::getTitle, "老汉");
        return documentMapper.selectList(wrapper);
    }

}

http://localhost:8080/insert(插入数据)

http://localhost:8080/search(查询数据)

二、索引CRUD

首先说一下索引的托管模式,EE这里有三种托管模式

  1. 自动托管之平滑模式(默认):在此模式下,索引的创建更新数据迁移等全生命周期用户均不需要任何操作即可完成
  2. 自动托管之非平滑模式:在此模式下,索引额创建及更新由EE全自动异步完成,但不处理数据迁移工作
  3. 手动模式:在此模式下,索引的所有维护工作EE框架均不介入,由用户自行处理,EE提供了开箱即用的索引CRUD相关API

前置条件

索引CRUD相关的API都属于手动挡范畴,因此我们执行下述所有API前必须先配置开启手动挡,以免和自动挡冲突

easy-es:
  global-config:
    process_index_mode: manul # 手动挡模式

创建索引

    @Test
    void createIndex01(){
        // 绝大多数场景推荐使用
        documentMapper.createIndex();
    }

    @Test
    void createIndex02(){
        // 适用于定时任务按日期创建索引场景
        String indexName = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
        documentMapper.createIndex(indexName);
    }

    @Test
    void createIndex03() {
        // 复杂场景使用
        LambdaEsIndexWrapper<Document> wrapper = new LambdaEsIndexWrapper<>();
        // 此处简单起见 索引名称须保持和实体类名称一致,字母小写 后面章节会教大家更如何灵活配置和使用索引
        wrapper.indexName(Document.class.getSimpleName().toLowerCase());

        // 此处将文章标题映射为keyword类型(不支持分词),文档内容映射为text类型(支持分词查询)
        wrapper.mapping(Document::getTitle, FieldType.KEYWORD, 2.0f)
                .mapping(Document::getContent, FieldType.TEXT, Analyzer.IK_SMART, Analyzer.IK_MAX_WORD);

        // 设置分片及副本信息,可缺省
        wrapper.settings(3, 2);
        // 创建索引
        boolean isOk = documentMapper.createIndex(wrapper);

    }

查询索引

    @Test
    public void testExistsIndex() {
        // 测试是否存在指定名称的索引
        String indexName = Document.class.getSimpleName().toLowerCase();
        boolean existsIndex = documentMapper.existsIndex(indexName);
        Assertions.assertTrue(existsIndex);
    }

    @Test
    public void testGetIndex() {
        GetIndexResponse indexResponse = documentMapper.getIndex();
        // 这里打印下索引结构信息 其它分片等信息皆可从indexResponse中取
        indexResponse.getMappings().forEach((k, v) -> System.out.println(v.getSourceAsMap()));
    }

更新索引

    /**
     * 更新索引
     */
    @Test
    public void testUpdateIndex() {
        // 测试更新索引
        LambdaEsIndexWrapper<Document> wrapper = new LambdaEsIndexWrapper<>();
        // 指定要更新哪个索引
        String indexName = Document.class.getSimpleName().toLowerCase();
        wrapper.indexName(indexName);
        wrapper.mapping(Document::getTitle, FieldType.KEYWORD);
        wrapper.mapping(Document::getContent, FieldType.TEXT, Analyzer.IK_SMART, Analyzer.IK_MAX_WORD);
        wrapper.mapping(Document::getInfo, FieldType.TEXT, Analyzer.IK_SMART, Analyzer.IK_MAX_WORD);
        boolean isOk = documentMapper.updateIndex(wrapper);
        Assertions.assertTrue(isOk);
    }

删除索引

    @Test
    public void testDeleteIndex() {
        // 指定要删除哪个索引
        String indexName = Document.class.getSimpleName().toLowerCase();
        boolean isOk = documentMapper.deleteIndex(indexName);
        Assertions.assertTrue(isOk);
    }

三、数据CURD

// 插入一条记录,默认插入至当前mapper对应的索引
Integer insert(T entity);
// 插入一条记录 可指定具体插入的索引,多个用逗号隔开
Integer insert(T entity, String... indexNames);

// 批量插入多条记录
Integer insertBatch(Collection<T> entityList)
// 批量插入多条记录 可指定具体插入的索引,多个用逗号隔开 
Integer insertBatch(Collection<T> entityList, String... indexNames);


 // 根据 ID 删除
Integer deleteById(Serializable id);
// 根据 ID 删除 可指定具体的索引,多个用逗号隔开 
Integer deleteById(Serializable id, String... indexNames);

// 根据 entity 条件,删除记录
Integer delete(LambdaEsQueryWrapper<T> wrapper);

// 删除(根据ID 批量删除)
Integer deleteBatchIds(Collection<? extends Serializable> idList);
// 删除(根据ID 批量删除)可指定具体的索引,多个用逗号隔开 
Integer deleteBatchIds(Collection<? extends Serializable> idList, String... indexNames);


//根据 ID 更新
Integer updateById(T entity);
//根据 ID 更新 可指定具体的索引,多个用逗号隔开 
Integer updateById(T entity, String... indexNames);

// 根据ID 批量更新
Integer updateBatchByIds(Collection<T> entityList);
//根据 ID 批量更新 可指定具体的索引,多个用逗号隔开 
Integer updateBatchByIds(Collection<T> entityList, String... indexNames);

// 根据动态条件 更新记录
Integer update(T entity, LambdaEsUpdateWrapper<T> updateWrapper);


	// 获取总数
    Long selectCount(LambdaEsQueryWrapper<T> wrapper);
    // 获取总数 distinct为是否去重 若为ture则必须在wrapper中指定去重字段
    Long selectCount(Wrapper<T> wrapper, boolean distinct);
    
 	// 根据 ID 查询 
    T selectById(Serializable id);
    // 根据 ID 查询 可指定具体的索引,多个用逗号隔开 
    T selectById(Serializable id, String... indexNames);
	// 查询(根据ID 批量查询)
    List<T> selectBatchIds(Collection<? extends Serializable> idList);
    // 查询(根据ID 批量查询)可指定具体的索引,多个用逗号隔开 
    List<T> selectBatchIds(Collection<? extends Serializable> idList, String... indexNames);
	// 根据动态查询条件,查询一条记录 若存在多条记录 会报错
    T selectOne(LambdaEsQueryWrapper<T> wrapper);
    // 根据动态查询条件,查询全部记录
    List<T> selectList(LambdaEsQueryWrapper<T> wrapper);

四、参数文档

Easy-Es文档

springboot操作ES之ElasticSearch_EasyEs

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBoot集成Easy-Es 的相关文章

随机推荐

  • 字节序的详细讲解

    字节序 1 字节序的特点2 字节序转换函数2 1 htonl函数 发 将主机字节序的IP地址 转换成网络字节序的IP地址2 2 ntohl函数 收 将网络字节序的IP地址3 3 htons函数 发 将主机字节序的端口 转换成 网络字节序的端
  • HBase java API

    1 pom lt dependency gt lt groupId gt org apache hbase lt groupId gt lt artifactId gt hbase client lt artifactId gt lt ve
  • 我用24次离职,换来6条血一样的教训

    作者丨周冲 来源丨周冲的影像声色 xff08 zhouchong2017 xff09 我是2014年毕业的 毕业之后 xff0c 以为年轻 xff0c 有的是任性资本 xff0c 也有的是发展可能 xff0c 结果频繁跳槽 xff0c 稍有
  • 2020年MathorCup高校数学建模挑战赛—大数据竞赛A题移动通信基站流量预测求解全过程文档及程序

    2020年MathorCup高校数学建模挑战赛 大数据竞赛 A题 移动通信基站流量预测 原题再现 xff1a 随着移动通信技术的发展 xff0c 4G 5G 给人们带来了极大便利 移动互联网的飞速发展 xff0c 使得移动流量呈现爆炸式增长
  • rviz导航——2D Pose estimate

    关于rviz中小车初始点的设置问题 一般有两种方法 xff1a 1打开rviz 在其上方工具栏中有2D Pose estimate xff0c 用来设置大概的初始点 2一般在amcl launch文件中也会定义初始点 xff0c 大多设为0
  • 树莓派通过MAVROS与Pixhawk/PX4通信

    1 安装ROS 2 安装MAVROS 3 配置Pixhawk 通常TELEM 2用来和机载计算机连接 xff0c 连接方式为串口转USB 通信协议为MAVLink xff0c 因此需要先使能TELM2上的MAVLink输出 v1 9 0及以
  • PX4使用Optitrack进行室内定位

    1 使用mavros连接上位机和PX4 树莓派通过MAVROS与Pixhawk PX4通信 2 PX4的设置 xff0c 将EKF估计位姿的数据来源改为VISION 使用地面站软件如QGroundControl xff0c 连接Pixhaw
  • 提高MAVROS的IMU发布频率

    提高MAVROS的IMU发布频率 Pixhawk的IMU数据可通过MAVROS获得 xff0c 相关的话题为 xff1a mavros imu data 但是MAVROS默认的IMU输出频率较低 xff0c 可能只有不到10Hz xff0c
  • 日期工具类

    日期工具类 1 span class token keyword package span span class token namespace com span class token punctuation span hl span c
  • easypoi的使用-导入校验

    easypoi导入校验 一 导入之基础校验 现在产品需要对导入的Excel进行校验 xff0c 不合法的Excel不允许入库 xff0c 需要返回具体的错误信息给前端 xff0c 提示给用户 xff0c 错误信息中需要包含行号以及对应的错误
  • springboot-日志配置

    springboot 日志配置 1 默认日志 logback 默认情况下 xff0c springboot会使用logback来记录日志 xff0c 并且使用INFO级别输出到控制台 xff0c 在运行程序的时候 xff0c 你应该看到过很
  • SpringCloud:Gateway之鉴权

    一 JWT 实现微服务鉴权 JWT一般用于实现单点登录 单点登录 xff1a 如腾讯下的游戏有很多 xff0c 包括lol xff0c 飞车等 xff0c 在qq游戏对战平台上登录一次 xff0c 然后这些不同的平台都可以直接登陆进去了 x
  • VSCode提交代码更新至github

    VSCode提交代码更新至github的步骤 在Explorer修改代码或文档转到Source control菜单 修改了代码或文档此菜单会带有修改文件数下标 先添加 stage changes xff0c 再点击 commit xff0c
  • vscode集成git

    vscode集成git 一 安装git 下载git安装包 xff0c 安装完git后配置环境变量 xff0c 在系统变量中的Path中新建 D software softwareInstall git Git cmd xff0c win 4
  • java中各种类型用Stream流求最大值最小值

    文章目录 java中各种类型用Stream流求最大值最小值一 BigDecimal 求最大值和最小值1 stream reduce 实现2 stream max 或stream min 实现 二 Integer 求最大值和最小值1 stre
  • idea:使用easyYapi插件导出yapi接口

    文章目录 idea xff1a 使用easyYapi插件导出yapi接口一 安装插件easyYapi二 配置easyYapiToken方式项目id方式 idea xff1a 使用easyYapi插件导出yapi接口 一 安装插件easyYa
  • springboot:各种下载文件的方式

    文章目录 springboot xff1a 各种下载文件的方式一 使用response输出流下载二 使用ResponseEntity三 注意 springboot xff1a 各种下载文件的方式 一 使用response输出流下载 注意第一
  • prometheus数据远程写入elasticsearch

    文章目录 prometheus数据远程写入elasticsearch一 部署elasticsearch二 部署prometheus三 通过prometheusbeat写入数据到es四 elasticsearch head验证 prometh
  • ElasticSearch 基本使用

    文章目录 ElasticSearch 基本使用一 简介二 参考文档三 ES核心概念核心概念数据类型 四 REST APIS索引API文档API查询文档API 五 SQL REST API ElasticSearch 基本使用 系统环境 El
  • SpringBoot集成Easy-Es

    文章目录 SpringBoot集成Easy Es一 集成demo二 索引CRUD创建索引查询索引更新索引删除索引 三 数据CURD四 参数文档 SpringBoot集成Easy Es Easy Es xff08 简称EE xff09 是一款