ES 之更新日期字段

ES 基本的数据类型

ES的数据类型包括多种,如string,text,keyword、数字类型等等等,其中有很常见的特殊数据日期类型(date)

date类型

日期类型 就和我们的平常程序里面的日期类型是一样的,有多种的表达格式,如"yyyy-MM-dd HH:mm:ss"。在ES定义mapping的时候,就可以对日期类型进行定义,如:

{
  "properties": {
    "time": {
      "type": "date",
      "format": "yyyy-MM-dd HH:mm:ss"
    }
}

其中format字段即定义了日期格式,这里建议时间的格式定义精确到秒这一级别,这样的话在后面的话就不会出现以date字段排序每次的结果不一样的情况

客户端更新date类型字段

其实,这个更新日期相关类的字段 说到底就是一个序列化的问题,如果客户端直接把一个Date类型反序列化直接传给ES的话,肯定会给你报错,因为这个字段的类型不对,不信你可以试一试。
那么这个问题,怎么解决呢,那有些人很快就想到了,把这个类型按照ES定义的格式给格式话成字符串就行了啊,对就是这么简单,如下:

DateUtil.date2String(date, "yyyy-MM-dd HH:mm:ss"))

更新的确就这么简单,但是还有一点需要注意,就是你从ES读取数据,反序列化成你的实体类,关于日期类型也要注意一下,这个和数据库中的时间戳还不太一样,数据库中的字段你用mybatis定义之后,会自动给你转成date类型的,但是这个实体不行,你需要给手动格式化一下,其实也很简单,如下:

    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
    private Date date;

加上@JsonFormat注解即可
关于日期类型序列化和反序列化的就都说完了,很简单也挺实用的

你可能感兴趣的:(ES 之更新日期字段)