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

这篇具有很好参考价值的文章主要介绍了SpringBoot整合Easy-ES操作演示文档。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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);

    }

SpringBoot整合Easy-ES操作演示文档,SpringBoot,spring boot,elasticsearch,后端

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);
    }

SpringBoot整合Easy-ES操作演示文档,SpringBoot,spring boot,elasticsearch,后端

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);
    }

SpringBoot整合Easy-ES操作演示文档,SpringBoot,spring boot,elasticsearch,后端

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

SpringBoot整合Easy-ES操作演示文档,SpringBoot,spring boot,elasticsearch,后端

  • 排除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>

SpringBoot整合Easy-ES操作演示文档,SpringBoot,spring boot,elasticsearch,后端文章来源地址https://www.toymoban.com/news/detail-722897.html

到了这里,关于SpringBoot整合Easy-ES操作演示文档的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 18、全文检索--Elasticsearch-- SpringBoot 整合 Spring Data Elasticsearch(异步方式(Reactive)和 传统同步方式 分别操作ES的代码演示)

    启动命令行窗口,执行:elasticsearch 命令即可启动 Elasticsearch 服务器 三种查询方式解释: 方法名查询: 就是全自动查询,只要按照规则来定义查询方法 ,Spring Data Elasticsearch 就会帮我们生成对应的查询语句,并且生成方法体。 @Query 查询 : 就是半自动查询, 按照 S

    2024年03月12日
    浏览(66)
  • easy-es 使用

    1、pom中引入依赖 2、yml文件增加配置 3、实体索引 4、mapper 5、service 6、controller 7、新增或修改数据 8、浅分页  9、searchAfter 分页,必须有一个唯一的排序属性,例如:id 下一页: 当使用  searchAfter分页时,想使用销量、价格 等排序来展示数据,需要结合一个唯一且连续的属

    2024年02月11日
    浏览(42)
  • Easy-Es笔记

    Easy-Es(简称EE)是一款由国内开发者打造并完全开源的ElasticSearch-ORM框架。在原生 RestHighLevelClient 的基础上,只做增强不做改变,为简化开发、提高效率而生。Easy-Es采用和MP一致的语法设计,降低ElasticSearch搜索引擎使用门槛,和额外学习成本,并大幅减少开发者工作量,帮助

    2024年02月15日
    浏览(40)
  • ES增强框架easy-es

    因为最近做的功能是关于舆情的,所以数据量比较大的,本来打算用MySQL做时间分表来做,但是经过一段时间的测试,发现数据量太大,用时间分表不能满足性能的要求,所以决定将数据存储改为ES,但是短时间内改底层框架又不是一个小工程,时间上不允许,所以找到了一个很合适的框架

    2024年04月25日
    浏览(38)
  • easy-es使用详解与源码解析

    1.git clone后,easy-es-core中的pom中需要引入: 2.easy-es-sample 中提供了基本案例,可以用来解析源码。 3.easy-es-common中的pom里可以看到,它是基于elasticsearch-rest-high-level-client的。 如果不熟悉elasticsearch-rest-high-level-client,建议先熟悉一下。 查询所有:match_all (一般也就是测试用用)

    2024年02月09日
    浏览(61)
  • ES商品搜索实战 Easy-Es搭配原生SearchSourceBuilder

    组装查询条件LambdaEsQueryWrapper,包含查询条件,排序,分页,高亮,去重 这里是搜索的条件组装,封装BoolQueryBuilder 这里就是方法的入口,productMapper.selectList(wrapper)和Mybatis-Plus的写法基本上一摸一样,如果不懂可以去看一下EE官方使用方法 Easy-Es

    2024年02月17日
    浏览(46)
  • Easy-Es框架实践测试整理 基于ElasticSearch的ORM框架

    Easy-Es(简称EE)是一款基于ElasticSearch(简称Es)官方提供的RestHighLevelClient打造的ORM开发框架,在 RestHighLevelClient 的基础上,只做增强不做改变,为简化开发、提高效率而生。EE是Mybatis-Plus的Es平替版,在有些方面甚至比MP更简单,同时也融入了更多Es独有的功能,助力您快速实现各种场

    2024年01月16日
    浏览(53)
  • 关于这款开源的ES的ORM框架-Easy-Es适合初学者入手不?

    最近笔者为了捡回以前自学的ES知识,准备重新对ES的一些基础使用做个大致学习总结。然后在摸鱼逛开源社区时无意中发现了一款不错的ElasticSearch插件-Easy-ES,可称之为“ES界的MyBatis-Plus”。联想到之前每次用RestHighLevelClient写一些DSL操作时都很麻烦(复杂点的搜索代码量确实

    2024年02月07日
    浏览(57)
  • 【别再做XX外卖啦!和我从零到1编写Mini版Easy-ES】完成一个Mapper模型

    作者:沈自在 代码仓库:https://gitee.com/tian-haoran/mini-easy-es 本节教程分支:https://gitee.com/tian-haoran/mini-easy-es/tree/course_02_create_mapper/ ⚠️注意:本项目会持续更新,直到功能完善 1.1.1 什么是 FactoryBean接口? 很多同学都知道 BeanFactory 接口,这个是大名鼎鼎的Spring中的核心接口,

    2024年02月04日
    浏览(54)
  • 运用easy-es保存数据时,报错:cn.easyes.common.exception.EasyEsException: no such method:

    cn.easyes.common.exception.EasyEsException: no such method:     at cn.easyes.common.utils.ExceptionUtils.eee(ExceptionUtils.java:39)     at cn.easyes.core.cache.BaseCache.lambda$setterMethod$6(BaseCache.java:127)     at cn.easyes.core.cache.BaseCache$$Lambda$2307/809171830.get(Unknown Source)     at java.util.Optional.orElseThrow(Optional.java:29

    2024年02月03日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包