Elasticsearch 时间类型总结

2020-05-27 00:00:00 日期 时间 写入 类型 格式
参考资料
Elasticsearch 官方文档
Elasticsearch 官方文档

Elasticsearch 可以写入、查询不同的时间类型,但当遇到 Unix 时间戳和其他时间格式的时候会有点混乱,因此本文主要是总结一下各种时间类型和其他的表示方式。

1 日期类型

JSON 没有日期类型,因此在 Elasticsearch 中可以表达成:

  1. 日期格式化的字符串,比如: "2015-01-01" 或者 "2015/01/01 12:10:30";
  2. 毫秒级别的 long 类型或秒级别的 integer 类型,比如: 1515150699465, 1515150699;

实际上不管日期以何种格式写入,在 ES 内部都会先换成 UTC 时间并存储为 long 类型。

日期格式可以自定义,如果没有指定的话会使用以下的默认格式:
"strict_date_optional_time||epoch_millis"

因此总结来说,不管哪种可以表示时间的格式写入,都可以用来表示时间!请利用 Kibana 或者 ES 的 RESTful API 来写入文档,并且进行后的查询。你就会发现用不同时间格式写入的数据,都可以用 ES 来进行查询、排序。

图1 索引中增加文档
PUT my_index
{
  "mappings": {
    "_doc": {
      "properties": {
        "date": {
          "type": "date" 
        }
      }
    }
  }
}

PUT my_index/_doc/1
{ "date": "2015-01-01" } 

PUT my_index/_doc/2
{ "date": "2015-01-01T12:10:30Z" } 

PUT my_index/_doc/3
{ "date": 1420070400001 } 

GET my_index/_search
{
  "sort": { "date": "asc"} 
}

相关文章