关于elasticsearch:用easyes简化ElasticSearch操作

43次阅读

共计 2585 个字符,预计需要花费 7 分钟才能阅读完成。

一、前言
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,大幅升高开发门槛,缩小代码量,反对 自定义排序、权重、原生查问,留下了 广大的调整空间

正文完
 0