前言:在使用easy-es之前作为一个小白的我只有es原生查询的基础,在自己通过查看官方文档自学easy-es遇到了一个挫折,其他的还好语法和MybatisPlus差不多,正以为我觉得很快就能入手,在对时间范围的判断就给我当头一棒,发现查出来数据为空,本文主要是作为此bug的记录,模拟一下当时的情况,并且做解决,在未来再写一篇个人使用easy-es的笔记,记录一些常用的用法。
一、easy-es官方文档
简介 | Easy-Es傻瓜级ElasticSearch搜索引擎ORM框架https://www.easy-es.cn/pages/7ead0d/#%E7%AE%80%E4%BB%8B
关于easy-es的实战也可以参考我下面这个博客:
二、当时bug的情况
对于需要看没有错误的版本直接移步到bug解决那边查看就行
1、我的实体
这时候的createTime是Timestamp类型的
2、我的接口
我的需求是获取这个月内开始和结束日期之内的数据,并且封装返回,返回的阅读是需要"yyyy-MM-dd"这个格式的,所以我这里是写了个处理的方法,在实际开发中,我使用MybatisPlus去做查询,查询的条件和上面easy-es的是一致的,但是最终的查询结果es查询的值是null,然后MybatisPlus查询的结果是正常的,很奇怪,当时还有很多个查询条件,而且是刚刚入门easy-es,就以为是别的问题,最后才锁定是时间的问题。
三、bug解决
1、修改实体
在此处添加这个注解指定日期的格式,下面是在kibana中查到es对应实体的类型
@IndexField(fieldType = FieldType.DATE)
注意修改实体后,需要重新建es索引,再进行操作,后续我提供一个建索引的方法实现:
java
@PostMapping("/test/createIndex")
public void testCreateIndex() {
// 测试创建索引,框架会根据实体类及字段上加的自定义注解一键帮您生成索引 需确保索引托管模式处于manual手动挡(默认处于此模式),若为自动挡则会冲突
documentMapper.createIndex();
}
2、修改接口
使用了下面这个进行格式化:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
startDate.format(formatter)
最后运行,发现正常通过时间范围查询到数据了,可以发现EsWrappers.lambdaChainQuery进行查询并没有失效,解决问题。