用easy-es简化ElasticSearch操作

javalover123
• 阅读 386

一、前言 ElasticSearch的Java客户端中,spring-data-elasticsearch 简化了 增删改、建索引等,没有简化 复杂查询 编码。easy-es API 类似 Mybatis-Plus,大幅降低开发门槛,减少代码量,支持 自定义排序、权重、原生查询,留下了 广阔的调整空间

二、Java客户端

  • Java Transport Client:官方已弃用,二进制协议,版本强绑定,不建议使用
  • Jest:4年多没发布新版本,不维护了,不建议使用
  • Java REST Client:7.15 以下版本适用
  • Elasticsearch Java API Client:7.16 版本发布测试版,建议es 8.0 以上使用
  • spring-data-elasticsearch:简化了 增删改、建索引等,没有简化 复杂查询 编码
  • easy-es:API 类似 Mybatis-Plus,大幅降低开发门槛,减少代码量,支持 自定义排序、权重、原生查询,留下了 广阔的调整空间

三、easy-es

  1. MySQL和 easy-es 语法对比 | Easy-Es

    MySQL Easy-Es es-DSL/es java api
    and and must
    or or should
    = eq term
    != ne boolQueryBuilder.mustNot(queryBuilder)
    > gt QueryBuilders.rangeQuery('es field').gt()
    >= ge .rangeQuery('es field').gte()
    < lt .rangeQuery('es field').lt()
    <= le .rangeQuery('es field').lte()
    like '%field%' like QueryBuilders.wildcardQuery(field,value)
    ...
  2. spring-boot配置

    注意:adress 不能以 http(s):// 开头

    在 application.yml 配置文件中添加:

    easy-es:
      enable: true # 是否开启EE自动配置 默认开启,可缺省
      address: 域名:9200
      username: elastic
      password: 密码
      banner: false # 默认为true 打印banner 若您不期望打印banner,可配置为false
      global-config:
        process-index-mode: smoothly #索引处理模式,smoothly:平滑模式,默认开启此模式, not_smoothly:非平滑模式, manual:手动模式
        print-dsl: false # 开启控制台打印通过本框架生成的DSL语句,默认为开启,测试稳定后的生产环境建议关闭,以提升少量性能
        async-process-index-blocking: false # 异步处理索引是否阻塞主线程 默认阻塞 数据量过大时调整为非阻塞异步进行 项目启动更快
        db-config:
          table-prefix: # 索引前缀,可用于区分环境 默认为空 用法和MP的tablePrefix一样的作用和用法
          field-strategy: not_null # 字段更新策略 默认为not_null
          refresh-policy: none # 默认为不刷新,wait_until对写入性能影响也很大
  3. 添加依赖

    如 maven,以 1.1.1 版本为例(最新版本是 2.0.0-beta1,后续讨论):

    <dependency>
      <groupId>cn.easy-es</groupId>
      <artifactId>easy-es-boot-starter</artifactId>
      <version>1.1.1</version>
    </dependency>
  4. 编写实体类

    索引名称:默认是 类名转全小写(没有驼峰了),建议驼峰类名指定

    keepGlobalPrefix:配合全局配置 easy-es.global-config.db-config.table-prefix 实现多个环境公用es

    String类型字段,1.1.1 版本默认为 keyword,为了便于后续升级,建议指定

    @Data
    @IndexName(value = "document", keepGlobalPrefix = true)
    public class Document {
        /**
         * es中的唯一id
         */
        private String id;
    
        /**
         * 文档标题
        */
        @IndexField(fieldType = FieldType.KEYWORD)
        private String title;
    
        /**
         * 文档内容
         */
        @IndexField(fieldType = FieldType.TEXT, analyzer = Analyzer.IK_SMART)
        private String content;
    }
  5. 编写Mapper类

    public interface DocumentMapper extends BaseEsMapper<Document> {
    }
  6. 添加 @EsMapperScan 注解

    @SpringBootApplication
    @EsMapperScan("com.xpc.easyes.sample.mapper")
    public class Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    
    }
  7. 保存

    Document document = new Document();
    document.setTitle("老汉");
    document.setContent("推*技术过硬");
    int successCount = documentMapper.insert(document);
  8. 更新

    Document document1 = new Document();
    document1.setId("id");
    document1.setTitle("title1");
    documentMapper.updateById(document1);
  9. 分页查询

    documentMapper.pageQuery(EsWrappers.lambdaQuery(Document.class).eq(Document::getTitle, "老汉"), 1, 20)

四、总结

easy-es,大幅降低开发门槛,减少代码量,支持 自定义排序、权重、原生查询,留下了 广阔的调整空间

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
PPDB:今晚老齐直播
【今晚老齐直播】今晚(本周三晚)20:0021:00小白开始“用”飞桨(https://www.oschina.net/action/visit/ad?id1185)由PPDE(飞桨(https://www.oschina.net/action/visit/ad?id1185)开发者专家计划)成员老齐,为深度学习小白指点迷津。
Wesley13 Wesley13
2年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Stella981 Stella981
2年前
ELK学习笔记之ElasticSearch的索引详解
0x00ElasticSearch的索引和MySQL的索引方式对比Elasticsearch是通过Lucene的倒排索引技术实现比关系型数据库更快的过滤。特别是它对多条件的过滤支持非常好,比如年龄在18和30之间,性别为女性这样的组合查询。倒排索引很多地方都有介绍,但是其比关系型
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
javalover123
javalover123
Lv1
10年Java经验,多个开源项目贡献者。https://github.com/javalover123
文章
16
粉丝
2
获赞
5