原英文版地址: https://www.elastic.co/guide/en/elasticsearch/reference/7.7/date.html, 原文档版权归 www.elastic.co 所有
本地英文版地址: ../en/date.html

date(日期)数据类型

JSON没有日期数据类型,因此Elasticsearch中的日期可以是下列之一:

  • 包含格式化日期的字符串,例如 "2015-01-01""2015/01/01 12:10:30"
  • 一个长整型数字,表示自纪元以来的毫秒数(milliseconds-since-the-epoch)
  • 一个整型数字,表示从纪元开始的秒数(seconds-since-the-epoch)

在内部,日期被转换为UTC(如果指定了时区)并存储为一个长整型数字,表示自纪元以来的毫秒数。

对日期的查询在内部转换为对这种长整型表示形式的范围查询,聚合的结果和存储的字段根据与字段相关联的日期格式转换回字符串。

日期总是以字符串的形式呈现,即使它们最初在JSON文档中是以长整型形式提供的。

可以自定义日期格式,但是如果没有指定format,则使用默认格式:

"strict_date_optional_time||epoch_millis"

这意味着它将接受带有可选时间戳的日期,这些时间戳符合strict_date_optional_time或 自纪元以来的毫秒数(milliseconds-sin-the-epoch)支持的格式。

例如:

PUT my_index
{
  "mappings": {
    "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"} 
}

字段date使用默认的format

这个文档使用普通日期。

这个文档包含时间。

这个文档使用自纪元以来的毫秒数。

注意,返回的sort值都是自纪元以来的毫秒。

多日期格式

可以指定多种格式,用||作为分隔符将它们分隔开。 将依次尝试每种格式,直到找到匹配的格式。 第一种格式将用于将自纪元以来的毫秒(milliseconds-since-the-epoch)值转换回字符串。

PUT my_index
{
  "mappings": {
    "properties": {
      "date": {
        "type":   "date",
        "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
      }
    }
  }
}

date字段的参数

date字段接受以下参数:

boost

to 1.0. 映射字段级查询时 提升(boost)。接受一个浮点数,默认值为 1.0

doc_values

是否应该以列跨度(column-stride)的方式将字段存储在磁盘上,以便以后用于排序、聚合或编写脚本? 接受true (默认)和false

format

可以解析的日期格式。 默认为strict_date_optional_time||epoch_millis

locale

解析日期时要使用的区域设置,因为月份在所有语言中都没有相同的名称和(或)缩写。 默认为ROOT locale

ignore_malformed

如果为true,则将忽略格式错误的数字。 如果为false (默认),格式错误的数值将抛出异常并拒绝整个文档。

index

字段是否可以搜索?接受true(默认)和false

null_value

接受一个已配置的format的日期值作为替换任何显式null的字段。 默认为null,这意味着该字段被视为缺失。

store

字段值是否应该与_source字段分开存储和检索。 接受truefalse(默认)。

meta

与该字段有关的元信息。