译自官方文档,原文请戳这里。html
JSON中没有date类型,所以 es 中的日期能够是:java
es 会自动将时间转换为UTC(你也能够自定义时区 time-zone),并最终存储为一个表明从开始纪元起计算的毫秒数。api
对日期的查询会被自动转换为针对此long类型的查询,而聚合以后的查询结果会依据该field指定的格式从新转为String格式。oracle
注意:日期最终都渲染为字符串,即便它们的初始格式在JSON中是long格式。app
Date也能够自定义,但若是你没有指定format,es将使用默认值:elasticsearch
"strict_date_optional_time||epoch_millis"
date支持可选的时间戳,具体格式为 strict_date_optional_time 或 milliseconds-since-the-epoch。示例以下:ide
PUT my_index { "mappings": { "_doc": { "properties": { "date": { "type": "date" // 1 } } } } } PUT my_index/_doc/1 { "date": "2015-01-01" } // 2 PUT my_index/_doc/2 { "date": "2015-01-01T12:10:30Z" } // 3 PUT my_index/_doc/3 { "date": 1420070400001 } // 4 GET my_index/_search { "sort": { "date": "asc"} // 5 }
1 使用默认格式ui
2 使用简单datespa
3 使用带 time 的 datecode
4 使用毫秒偏移量
5 sort 返回的日期格式所有都是毫秒偏移量
你能够使用 || 分隔符来指定多个日期格式。es将按顺序进行匹配,直到找到一个可以匹配上的格式。es将用此格式将long转为string。
PUT my_index { "mappings": { "_doc": { "properties": { "date": { "type": "date", "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis" } } } } }
date类型的field接受如下参数:
boost | 提高查询权重。浮点型,默认值 1.0 |
doc_values | 是否使用doc_values。若是肯定不须要对此field进行排序/聚合,或者使用脚本,能够关闭。默认true |
format | 日期格式。默认 strict_date_optional_time || epoch_millis |
locale | 用于解决月份在各语言中没有统一缩写的问题。默认值为 ROOT |
ignore_malformed | 当设置为true时将忽略错误数字。若是设置为false,遇到错误时将抛出异常并拒绝掉整个document |
index | 若是该字段能够被搜索,请设置为true。默认为true |
null_value | 当输入值为空时,使用该值来代替,必须为format参数格式。默认为null,意味着该字段丢失 |
store | 字段值是否应该在_source字段以外存储和检索。默认false。 |