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

文章目录

  • 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: trueaddress: 10.15.20.11:9200schema: httpusername:password:keep-alive-millis: 18000# 扩展的连接池配置项global-config:process-index-mode: smoothlyasync-process-index-blocking: trueprint-dsl: truedb-config:map-underscore-to-camel-case: trueid-type: customizefield-strategy: not_emptyrefresh-policy: immediateenable-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.rhkb.cn/news/131086.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习:循环神经网络RNN及LSTM

深度学习&#xff1a;循环神经网络RNN及LSTM 循环神经网络RNN原理代码 长短期记忆网络LSTM原理遗忘门记忆门输出门 代码 循环神经网络RNN 原理 对于传统的神经网络&#xff0c;它的信号流从输入层到输出层依次流过&#xff0c;同一层级的神经元之间&#xff0c;信号是不会相互…

华为CD32键盘使用教程

华为CD32键盘使用教程 用爱发电写的教程&#xff01; 最后更新时间&#xff1a;2023.9.12 型号&#xff1a;华为有线键盘CD32 基本使用 此键盘在不安装驱动的情况下可以直接使用&#xff0c;但是不安装驱动指纹识别是无法使用的&#xff01;并且NFC功能只支持华为的部分电脑…

小程序中使用分包

前言 小程序在未使用的分包的情况下仅支持大小为2M,如果图片等资源过多的情况下可以使用分包功能&#xff0c;使用分包的情况下单个分包大小不能超过2M,总大小不能超过20M&#xff0c;分包有两种情况&#xff1a;普通分包和独立分包&#xff0c;下面介绍的是普通分包。官方文档…

《使用 Helm 管理 Kubernetes 应用程序的最佳实践》

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f405;&#x1f43e;猫头虎建议程序员必备技术栈一览表&#x1f4d6;&#xff1a; &#x1f6e0;️ 全栈技术 Full Stack: &#x1f4da…

骨传导耳机的危害有哪些?会损害听力吗?

如果正常的使用&#xff0c;骨传导耳机是没有危害的&#xff0c;由于骨传导耳机独特的传声方式&#xff0c;所以并不会对人体造成损伤&#xff0c;还可以在一定程度上保护听力。 如果想更具体知道骨传导耳机有什么危害&#xff0c;就要先了解什么是骨传导耳机&#xff0c;骨传…

vue-tabel 中使用 el-autocomplete 出现的问题

必须加 :popper-append-to-body"false" :popper-class"vxetableignoreclear" 我自己用的话缺一不可 说一下我自己项目中遇到的问题吧&#xff0c;我写的是表格中套表格&#xff0c;会出现就是当下拉选的时候用selete是可以用的&#xff0c;但是用blur也…

Revit SDK 介绍:TraverseSystem 用广度遍历的方式遍历MEP系统

前言 这个例子介绍了用广度遍历的方式遍历MEP系统。 内容 打开 Revit 自带例子&#xff0c;选择红框中的某条风管&#xff0c;不要选择机械&#xff0c;图中选中只是为了和遍历结果对应&#xff1a; 红色区域到风管机的遍历结果&#xff1a; 核心逻辑 遍历逻辑主函数&am…

【Vue】vue2使用vue-pdf预览pdf文件,预览多页,在线预览方式二,vue页面内预览,无需额外pdfjs包,保姆级教程

系列文章目录 【Vue】vue2预览显示quill富文本内容&#xff0c;vue-quill-editor回显页面&#xff0c;v-html回显富文本内容 【Vue】vue2项目使用swiper轮播图2023年8月21日实战保姆级教程 【Vue】vue2使用pdfjs预览pdf文件&#xff0c;在线预览方式一&#xff0c;pdfjs文件包…

【海思SS626 | 开发环境】VMware17安装Ubuntu 18.04.6

目录 一、下载 Ubuntu 18.04.6 LTS二、VMware17创建虚拟机三、安装Ubuntu18.04LTS四、安装其他软件五、总结 一、下载 Ubuntu 18.04.6 LTS 问题&#xff1a;为什么要下载 Ubuntu18.04.6 LTS 而不是使用最新的&#xff0c;或者其他Linux发行版&#xff1f; 答&#xff1a;在ss6…

ChatGPT AIGC 实现Excel行列多条件交叉查找

查找函数在Excel中一直是非常重要的知识点,我们让ChatGPT AIGC来总结一下关于查找函数的优点与了处。 Excel中的查找函数是一种非常强大且多用途的工具,具有以下优点和作用: 1. 数据定位:查找函数可以帮助我们在大量数据中快速定位某个特定的数据或信息。 2. 数据整理:如…

JAVA -华为真题-分奖金

需求: 公司老板做了一笔大生意&#xff0c;想要给每位员工分配一些奖金&#xff0c;想通过游戏的方式来决定每个人分多少钱。按照员工的工号顺序&#xff0c;每个人随机抽取一个数字。按照工号的顺序往后排列&#xff0c;遇到第一个数字比自己数字大的&#xff0c;那么&#xf…

TRT4-trt-integrate -self-driving道路分析

1#先看ONNX 查看大概结构 首先我们来看一下这个onnx&#xff1a; 可以看到这是一个全卷积网络&#xff0c;因为输入输出的宽高都一样 后来的这里是加入了softmax&#xff0c;所以获得的是概率值&#xff0c;所以最终的输出output是1*512*596*4的概率值。仅仅是不确定四个通道代…

5.后端·新建子模块与开发(自动模式)

文章目录 学习资料自动生成模式创建后端三层 学习资料 https://www.bilibili.com/video/BV13g411Y7GS?p11&spm_id_frompageDriver&vd_sourceed09a620bf87401694f763818a31c91e 自动生成模式创建后端三层 首先&#xff0c;运行起来若依的前后端整个项目&#xff0c;…

css画一条渐变的虚线

效果展示 原理&#xff1a;给元素设置一个渐变的背景色&#xff0c;画一条白色的虚线盖住背景&#xff0c;就达到了渐变虚线的效果 代码&#xff1a; <div class"pending-line"></div>.pending-line{width: 101px;border-top: 2px dashed #fff; // do…

豆瓣图书评分数据的可视化分析

导语 豆瓣是一个提供图书、电影、音乐等文化产品的社区平台&#xff0c;用户可以在上面发表自己的评价和评论&#xff0c;形成一个丰富的文化数据库。本文将介绍如何使用爬虫技术获取豆瓣图书的评分数据&#xff0c;并进行可视化分析&#xff0c;探索不同类型、不同年代、不同…

计算机网络第三节物理层

目录 一&#xff0c;第二章 物理层&#xff08;数据通信有关&#xff09; 1.物理层引入的目的 2.物理层如何实现屏蔽 二&#xff0c;物理层引入的数据通信基础 1.通信模型 2.通信模型中的技术术语 三&#xff0c;数据通信的基础知识 1&#xff0c;数据通信模型 2&…

BIO NIO AIO演变

Netty是一个提供异步事件驱动的网络应用框架&#xff0c;用以快速开发高性能、高可靠的网络服务器和客户端程序。Netty简化了网络程序的开发&#xff0c;是很多框架和公司都在使用的技术。 Netty并非横空出世&#xff0c;它是在BIO&#xff0c;NIO&#xff0c;AIO演变中的产物…

一文读懂LCD、OLED、LED屏的区别以及透明液晶屏原理

参考文章科普&#xff5c;一文读懂LCD、LED和OLED 的区别 - 知乎 参考文章透明液晶显示屏的原理&#xff1f; - 知乎 一、LCD LCD是英文Liquid Crystal Display 的简称&#xff0c;指的是液晶显示屏。 主要想介绍下LCD透明屏方案&#xff1a; 所谓LCD透明屏&#xff0c;并…

记录一次对登录接口的性能测试

测试环境 客户端: win10 这里可以用linux,但没用,因为想直观查看结果。 被测环境:linux X86 4核CPU16G内存 被测接口:登录接口,没有做数据驱动。 场景设计 设置线程数19,持续时间5分钟,并用后端监听器监听结果,使用grafana+prometheus监控服务器资源。 测试执行 …

思维导图怎么变成ppt?4个思维导图一键生成ppt的方法

做好的思维导图如何变成一份ppt&#xff1f;本文罗列了4个可行方法&#xff0c;一起来看看吧。 一 直接复制粘贴 这是最简单的方法&#xff0c;虽然这样可能会花费一些时间&#xff0c;但可以确保内容排版和布局与你想要的一致。当然&#xff0c;我们大可使用更高效的方法。…