SpringBoot整合Easy-ES操作演示文档

news2024/11/25 20:17:21

文章目录

  • SpringBoot整合Easy-ES操作演示文档
    • 1 概述及特性
      • 1.1 官网
      • 1.2 主要特性
    • 2 整合配置
      • 2.1 导入POM
      • 2.2 Yaml配置
      • 2.3 @EsMapperScan 注解扫描
      • 2.4 配置Entity
      • 2.5 配置Mapper
    • 3 基础操作
      • 3.1 批量保存
      • 3.2 数据更新
      • 3.3 数据删除
      • 3.4 组合查询
      • 3.5 高亮查询
      • 3.6 统计查询
    • 4 整合异常
      • 4.1 XContentType找不到问题

SpringBoot整合Easy-ES操作演示文档

1 概述及特性

1.1 官网

  • Easy-ES官网: https://www.easy-es.cn/
  • 官方示例: https://gitee.com/dromara/easy-es/tree/master/easy-es-sample
  • 参考链接: https://blog.51cto.com/yueshushu/6193710

1.2 主要特性

  • **零侵入:**针对ES官方提供的RestHighLevelClient只做增强不做改变,引入EE不会对现有工程产生影响,使用体验如丝般顺滑。
  • **损耗小:**启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作。
  • 自动化: 全球领先的哥哥你不用动,索引我全自动模式,帮助开发者和运维杜绝索引困扰。
  • 智能化: 根据索引类型和当前查询类型上下文综合智能判断当前查询是否需要拼接.keyword后缀,减少小白误用的可能。
  • **强大的 CRUD 操作:*内置通用 Mapper,仅仅通过少量配置即可实现大部分 CRUD 操作,更 有强大的条件构造器,满足各类使用需求。
  • **支持 Lambda 形式调用:**通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错段。
  • **支持主键自动生成:**支持多种主键策略,可自由配置,完美解决主键问题。
  • **支持 ActiveRecord 模式:**支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作。
  • **支持自定义全局通用操作:**支持全局通用方法注入( Write once, use anywhere )。
  • **内置分页插件:**基于RestHighLevelClient 物理分页,开发者无需关心具体操作,且无需额外配置插件,写分页等同于普通 List 查询,比MP的PageHelper插件用起来更简单,且保持与其同样的分页返回字段,无需担心命名影响。
  • **MySQL功能全覆盖:**MySQL中支持的功能通过EE都可以轻松实现。
  • **支持ES高阶语法:**支持聚合,嵌套,父子类型,高亮搜索,分词查询,权重查询,Geo地理位置查询,IP查询等高阶语法,应有尽有。
  • **良好的拓展性:*底层仍使用RestHighLevelClient,可保持其拓展性,开发者在使用EE的同时, * 仍可使用RestHighLevelClient的所有功能。

2 整合配置

2.1 导入POM

  • Latest Version: 2.0.0-beta4
<dependency>
    <groupId>org.dromara.easy-es</groupId>
    <artifactId>easy-es-boot-starter</artifactId>
    <version>${Latest Version}</version>
</dependency>

2.2 Yaml配置

easy-es:
  # 基础配置项
  enable: true
  address: 10.15.20.11:9200
  schema: http
  username:
  password:
  keep-alive-millis: 18000
  # 扩展的连接池配置项
  global-config:
    process-index-mode: smoothly
    async-process-index-blocking: true
    print-dsl: true
    db-config:
      map-underscore-to-camel-case: true
      id-type: customize
      field-strategy: not_empty
      refresh-policy: immediate
      enable-track-total-hits: true

2.3 @EsMapperScan 注解扫描

  • 标注与主启动类上,功能与MP的@MapperScan一致。
package com.xs.easy;

import org.dromara.easyes.starter.register.EsMapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;

@EsMapperScan("com.xs.easy.mapper")
@EnableConfigurationProperties
@SpringBootApplication
public class XsEasyApplication {

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

}

2.4 配置Entity

package com.xs.easy.entity;

import lombok.Data;
import lombok.experimental.Accessors;
import org.dromara.easyes.annotation.HighLight;
import org.dromara.easyes.annotation.IndexField;
import org.dromara.easyes.annotation.IndexId;
import org.dromara.easyes.annotation.IndexName;
import org.dromara.easyes.annotation.rely.Analyzer;
import org.dromara.easyes.annotation.rely.FieldStrategy;
import org.dromara.easyes.annotation.rely.FieldType;
import org.dromara.easyes.annotation.rely.IdType;

/**
 * es 数据模型
 **/
@Data
@Accessors(chain = true)
@IndexName(value = "easy-es-document", shardsNum = 3, replicasNum = 2, keepGlobalPrefix = true, maxResultWindow = 100)
public class Document {
    /**
     * es中的唯一id,如果你想自定义es中的id为你提供的id,比如MySQL中的id,请将注解中的type指定为customize或直接在全局配置文件中指定,如此id便支持任意数据类型)
     */
    @IndexId(type = IdType.CUSTOMIZE)
    private String id;
    /**
     * 文档标题,不指定类型默认被创建为keyword类型,可进行精确查询
     */
    private String title;
    /**
     * 文档内容,指定了类型及存储/查询分词器
     */
    @HighLight(mappingField = "highlightContent")
    @IndexField(fieldType = FieldType.TEXT, analyzer = Analyzer.IK_SMART)
    private String content;
    /**
     * 作者 加@TableField注解,并指明strategy = FieldStrategy.NOT_EMPTY 表示更新的时候的策略为 创建者不为空字符串时才更新
     */
    @IndexField(strategy = FieldStrategy.NOT_EMPTY)
    private String creator;
    /**
     * 创建时间
     */

    @IndexField(fieldType = FieldType.DATE, dateFormat = "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis")
    private String gmtCreate;
    /**
     * es中实际不存在的字段,但模型中加了,为了不和es映射,可以在此类型字段上加上 注解@TableField,并指明exist=false
     */
    @IndexField(exist = false)
    private String notExistsField;
    /**
     * 地理位置经纬度坐标 例如: "40.13933715136454,116.63441990026217"
     */
    @IndexField(fieldType = FieldType.GEO_POINT)
    private String location;
    /**
     * 图形(例如圆心,矩形)
     */
    @IndexField(fieldType = FieldType.GEO_SHAPE)
    private String geoLocation;
    /**
     * 自定义字段名称
     */
    @IndexField(value = "wu-la", fieldType = FieldType.TEXT, analyzer = Analyzer.IK_SMART, searchAnalyzer = Analyzer.IK_SMART, fieldData = true)
    private String customField;

    /**
     * 高亮返回值被映射的字段
     */
    private String highlightContent;

    /**
     * 文档点赞数
     */
    private Integer starNum;
}

2.5 配置Mapper

package com.xs.easy.mapper;

import com.xs.easy.entity.Document;
import org.dromara.easyes.core.core.BaseEsMapper;

/**
 * mapper 相当于Mybatis-plus的mapper
 **/
public interface DocumentMapper extends BaseEsMapper<Document> {

}

3 基础操作

3.1 批量保存

    public Integer insertES(int num) {
        List<Document> lis = new ArrayList<>();
        for (int i = 0; i < num; i++) {
            Document document = new Document();
            document.setId(ChineseUtil.randomNumber(1, 1000000000) + "");
            document.setTitle(ChineseRandomGeneration.GBKMethod(16));
            document.setContent(ChineseRandomGeneration.GBKMethod(160));
            document.setCreator(ChineseUtil.randomChineseName());
            document.setGmtCreate(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
            document.setStarNum(ChineseUtil.randomNumber(1, 10000));
            lis.add(document);
        }
        return this.documentMapper.insertBatch(lis);

    }

在这里插入图片描述

3.2 数据更新

    public Integer updateES(Document doc) {

        return this.documentMapper.updateById(doc);
    }

3.3 数据删除

    public Integer removeES(String id) {
        // 条件构造
        LambdaEsQueryWrapper<Document> wrapper = new LambdaEsQueryWrapper<>();
        wrapper.eq(Document::getId, id);
        return documentMapper.delete(wrapper);
    }

3.4 组合查询

    public List<Document> listByES(Document doc) {

        // 条件构造
        LambdaEsQueryWrapper<Document> wrapper = new LambdaEsQueryWrapper<>();
        wrapper.like(StringUtils.isNotBlank(doc.getTitle()), Document::getTitle, doc.getTitle());
        wrapper.like(StringUtils.isNotBlank(doc.getContent()), Document::getTitle, doc.getContent());
        return documentMapper.selectList(wrapper);
    }

在这里插入图片描述

3.5 高亮查询

    public List<Document> highSearchES(Document doc) {
        // 条件构造
        LambdaEsQueryWrapper<Document> wrapper = new LambdaEsQueryWrapper<>();
        wrapper.match(StringUtils.isNotBlank(doc.getContent()), Document::getContent, doc.getContent());
        return documentMapper.selectList(wrapper);
    }

在这里插入图片描述

3.6 统计查询

    public Long countTotal() {
        LambdaEsQueryWrapper<Document> wrapper = new LambdaEsQueryWrapper<>();
        return documentMapper.selectCount(wrapper);
    }

4 整合异常

4.1 XContentType找不到问题

  • java.lang.NoClassDefFoundError: org/elasticsearch/common/xcontent/XContentType

在这里插入图片描述

  • 排除Easy-Es中的依赖
        <!-- Easy-ES -->
        <dependency>
            <groupId>org.dromara.easy-es</groupId>
            <artifactId>easy-es-boot-starter</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>
  • 重新引入指定版本的组件
<properties>
    <es.version>7.10.1</es.version>
    <es-rest-high-level-client.version>7.10.1</es-rest-high-level-client.version>
</properties>

<!--新增依赖-->
<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>${es-rest-high-level-client.version}</version>
</dependency>
<dependency>
    <groupId>org.elasticsearch</groupId>
    <artifactId>elasticsearch</artifactId>
    <version>${es.version}</version>
</dependency>

在这里插入图片描述

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

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

相关文章

Java“牵手”天猫商品列表页数据采集+商品价格数据排序,商品销量排序数据,天猫商品API采集方法

天猫商品列表API是天猫平台提供给开发者的应用程序编程接口&#xff0c;通过API可以获取天猫平台上商品列表数据。 天猫商品列表API的使用需要获取Access Token&#xff0c;它代表了访问天猫API的身份认证。 天猫商品列表API的使用步骤如下&#xff1a; 开发者在天猫开发者中…

Dokcer创建MySQL容器,并在宿主机或mysql可视化工具中连接mysql容器的数据库

文章目录 一、Docker 创建 MySQL容器1. 拉取 MySQL 镜像2. 创建并运行 MySQL 容器3. 创建并运行 MySQL 容器&#xff08;目录映射&#xff09; 二、连接 MySQL 数据库1. 在 MySQL 容器内&#xff0c;连接MySQL2. 在宿主机连接 MySQL&#xff08;遇到问题及解决方案&#xff09;…

2023年9月实时获取地图边界数据方法,省市区县街道多级联动【附实时geoJson数据下载】

首先&#xff0c;来看下效果图 在线体验地址&#xff1a;https://geojson.hxkj.vip&#xff0c;并提供实时geoJson数据文件下载 可下载的数据包含省级geojson行政边界数据、市级geojson行政边界数据、区/县级geojson行政边界数据、省市区县街道行政编码四级联动数据&#xff0…

性能测试 —— Jmeter事务控制器

事务&#xff1a; 性能测试中&#xff0c;事务指的是从端到端&#xff0c;一个完整的操作过程&#xff0c;比如一次登录、一次 筛选条件查询&#xff0c;一次支付等&#xff1b;技术上讲&#xff1a;事务就是由1个或多个请求组成的 事务控制器 事务控制器类似简单控制器&…

力扣:94. 二叉树的中序遍历(Python3)

题目&#xff1a; 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 示例&#xff1a; 示例 1&#xff1a; 输…

问道管理:突然飙涨!10分钟暴拉10倍

杠杆资金动手了&#xff0c;还是大手笔&#xff01; Wind数据显现&#xff0c;9月11日融资客净买入255.41亿元&#xff0c;创2020年7月14日以来新高。这一方面因为&#xff0c;9月11日起&#xff0c;融资保证金份额首次下调正式落地&#xff0c;投资者融资买入证券时的融资保证…

通达信指标编写,16进制颜色对照表,妈妈再也不用担心颜色不够用了!!

★★★★★博文创作不易&#xff0c;我的博文不需要打赏&#xff0c;也不需要知识付费&#xff0c;可以白嫖学习小技巧&#xff0c;喜欢的老铁可以多多点赞收藏分享置顶&#xff0c;小红牛在此表示感谢。★★★★★ #龙虎榜小红牛系统&#xff0c;官方微信公众号&#xff1a;g…

机器学习算法详解3:逻辑回归

机器学习算法详解3&#xff1a;逻辑回归 前言 ​ 本系列主要对机器学习上算法的原理进行解读&#xff0c;给大家分享一下我的观点和总结。 本篇前言 ​ 本篇对逻辑回归的算法原理进行解读。 目录结构 文章目录 机器学习算法详解3&#xff1a;逻辑回归1. 引子2. sigmoid函数3. 原…

C++之shared_ptr、unique_ptr、make_shared、make_unique的区别(一百九十七)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

vue3之pinia简单使用

一、 Pinia介绍 pinia 是 Vue 的存储库&#xff0c;它允许您跨组件/页面共享状态。就是和vuex一样的实现数据共享。 依据Pinia官方文档&#xff0c;Pinia是2019年由vue.js官方成员重新设计的新一代状态管理器&#xff0c;更替Vuex4成为Vuex5。 Pinia 目前也已经是 vue 官方正式…

PackML 学习笔记(2) OPCUA /PackML

2020年11月11日&#xff0c;OPC 基金会发布了PackML 的配套规范&#xff08;OPC 30050: PackML - Packaging Control&#xff09;。意味着可以使用OPCUA 信息模型来构建PackML 模型了。 如果写一篇技术简介往往是简单的&#xff0c;要去实现这门技术却很难。首先&#xff0c;OP…

浅谈Dead reckoning实现原理以及常用算法

0. 简介 航位推算是一个很常见的定位方法。在知道当前时刻的位置&#xff0c;然后通过imu等传感器去估计下一个时刻的位置。在自动驾驶车辆定位的时候&#xff0c;GPS提供10Hz的定位信息。这每个GPS信息来临的0.1s的间隔里面&#xff0c;车辆位置也会移动很多。那么这个时候就…

Android.bp语法和使用方法讲解

Android.bp语法和使用方法讲解 Android.bp 文件是什么&#xff1f; Android.bp 文件首先是 Android 系统的一种编译配置文件&#xff0c;是用来代替原来的 Android.mk文件的。在 Android7.0 以前&#xff0c;Android 都是使用 make 来组织各模块的编译&#xff0c;对应的编译…

抖店评价有礼怎么设置|成都瀚网科技

随着电商行业的不断发展和竞争的加剧&#xff0c;如何吸引消费者、提高店铺的口碑成为了每个卖家关注的焦点。其中&#xff0c;抖音电商平台的礼貌评价功能受到广大卖家的青睐。那么&#xff0c;如何设置抖店评论才能有礼貌呢&#xff1f;我们一起来讨论一下吧。 如何设置抖店评…

go-zerogo web集成gorm实战

前言 上一篇&#xff1a;go-zero&go web集成redis实战 从零开始基于go-zero搭建go web项目实战-04集成gorm实战 源码仓库地址 源码 https://gitee.com/li_zheng/treasure-box golang gorm 官网地址&#xff1a;https://gorm.io/zh_CN/docs/index.html GORM介绍 Gorm是…

Postman —— HTTP请求基础组成部分

一般来说&#xff0c;所有的HTTP Request都有最基础的4个部分组成&#xff1a;URL、 Method、 Headers和body。 &#xff08;1&#xff09;Method 要选择Request的Method是很简单的&#xff0c;Postman支持所有的请求方式。 &#xff08;2&#xff09;URL 要组装一条Request…

Pytorch Advanced(二) Variational Auto-Encoder

自编码说白了就是一个特征提取器&#xff0c;也可以看作是一个降维器。下面找了一张很丑的图来说明自编码的过程。 自编码分为压缩和解码两个过程。从图中可以看出来&#xff0c;压缩过程就是将一组数据特征进行提取&#xff0c; 得到更深层次的特征。解码的过程就是利用之前的…

python-爬虫-urllib

网络爬虫&#xff08;Web Crawler&#xff09;&#xff0c;又叫网络蜘蛛、网络机器人&#xff0c;是一种自动化数据采集程序 数据采集 → 数据处理 → 数据存储 常见的工作流程如下&#xff1a; 1.定义采集的目标&#xff08;网站、APP、公众号、小程序&#xff09;&#xff…

RP9学习-2

1.基本元素2 1.1树 可以收起 添加子菜单 选中树的节点即可添加 移动层级 编辑树属性 选中某行文字&#xff0c;点击Edit Tree Properties 可以把箭头变成加减&#xff0c;另外也可以导入自己的图标 注意要使用自己的图标&#xff0c;需要勾选Show Icon 也可以给某个节点单…

开放式耳机也会有巅峰音质体验-南卡NANK OE PRO

前言 这两年&#xff0c;开放式耳机市场发展迅猛&#xff0c;新品层出不穷&#xff0c;各大耳机厂商也都相继推出了自家的产品。而在众多的厂家中&#xff0c;作为国内开发式耳机的TOP1&#xff0c;南卡通过多年来在业内领域的经验和专业的技术能力&#xff0c;为广大音乐爱好…