网站后台自动退出,十堰优化网站哪家好,深圳网络营销推广公司,做企业网站的公司有哪些文章目录 SpringBoot整合Easy-ES操作演示文档1 概述及特性1.1 官网1.2 主要特性 2 整合配置2.1 导入POM2.2 Yaml配置2.3 EsMapperScan 注解扫描2.4 配置Entity2.5 配置Mapper 3 基础操作3.1 批量保存3.2 数据更新3.3 数据删除3.4 组合查询3.5 高亮查询3.6 统计查询 4 整合异常4… 文章目录 SpringBoot整合Easy-ES操作演示文档1 概述及特性1.1 官网1.2 主要特性 2 整合配置2.1 导入POM2.2 Yaml配置2.3 EsMapperScan 注解扫描2.4 配置Entity2.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
dependencygroupIdorg.dromara.easy-es/groupIdartifactIdeasy-es-boot-starter/artifactIdversion${Latest Version}/version
/dependency2.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: true2.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,并指明existfalse*/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 BaseEsMapperDocument {}
3 基础操作
3.1 批量保存 public Integer insertES(int num) {ListDocument 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) {// 条件构造LambdaEsQueryWrapperDocument wrapper new LambdaEsQueryWrapper();wrapper.eq(Document::getId, id);return documentMapper.delete(wrapper);}3.4 组合查询 public ListDocument listByES(Document doc) {// 条件构造LambdaEsQueryWrapperDocument 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 ListDocument highSearchES(Document doc) {// 条件构造LambdaEsQueryWrapperDocument wrapper new LambdaEsQueryWrapper();wrapper.match(StringUtils.isNotBlank(doc.getContent()), Document::getContent, doc.getContent());return documentMapper.selectList(wrapper);}3.6 统计查询 public Long countTotal() {LambdaEsQueryWrapperDocument wrapper new LambdaEsQueryWrapper();return documentMapper.selectCount(wrapper);}
4 整合异常
4.1 XContentType找不到问题
java.lang.NoClassDefFoundError: org/elasticsearch/common/xcontent/XContentType 排除Easy-Es中的依赖 !-- Easy-ES --dependencygroupIdorg.dromara.easy-es/groupIdartifactIdeasy-es-boot-starter/artifactId!--排除依赖--exclusionsexclusiongroupIdorg.elasticsearch.client/groupIdartifactIdelasticsearch-rest-high-level-client/artifactId/exclusionexclusiongroupIdorg.elasticsearch/groupIdartifactIdelasticsearch/artifactId/exclusion/exclusions/dependency重新引入指定版本的组件
propertieses.version7.10.1/es.versiones-rest-high-level-client.version7.10.1/es-rest-high-level-client.version
/properties!--新增依赖--
dependencygroupIdorg.elasticsearch.client/groupIdartifactIdelasticsearch-rest-high-level-client/artifactIdversion${es-rest-high-level-client.version}/version
/dependency
dependencygroupIdorg.elasticsearch/groupIdartifactIdelasticsearch/artifactIdversion${es.version}/version
/dependency