Elasticsearch-Date字段类型

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

  • 包含格式化日期的字符串,例如“2015-01-01”或“2015/01/01 12:10:30”。
  • 表示自历元以来的毫秒数。
  • 表示自历元(配置)起的秒数。

注意:自历元起的毫秒值必须为非负。使用格式化日期表示1970年之前的日期。

在内部,日期转换为UTC(如果指定了时区),并存储为表示自历元起毫秒数的长数字。

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

注意:日期将始终呈现为字符串,即使它们最初在JSON文档中作为long提供。

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

    "strict_date_optional_time||epoch_millis"

这意味着它将接受带有可选时间戳的日期,这些时间戳符合严格的日期可选时间或自历元起的毫秒所支持的格式。

例如:

PUT my-index-000001
{
  "mappings": {
    "properties": {
      "date": {
        "type": "date"  (1)
      }
    }
  }
}


PUT my-index-000001/_doc/1
{ "date": "2015-01-01" }  (2)


PUT my-index-000001/_doc/2
{ "date": "2015-01-01T12:10:30Z" }  (3)


PUT my-index-000001/_doc/3
{ "date": 1420070400001 }   (4)


GET my-index-000001/_search
{
  "sort": { "date": "asc"}   (5)
}

(1)date字段使用默认格式。

(2)此文档使用普通日期。

(3)此文档包括一个时间段。

(4)此文档自历元起使用毫秒。

(5)请注意,返回的排序值都是从历元开始以毫秒为单位的。

注意:日期将接受带有小数点的数字,如{“date”:1618249875.123456},但在某些情况下(#70085),我们将失去这些日期的精确性,因此应避免使用它们。

多种日期格式

可以通过使用| |作为分隔符分隔格式来指定多种格式。将依次尝试每种格式,直到找到匹配的格式。第一种格式将用于将历元值之后的毫秒转换回字符串

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

Epoch seconds

如果需要以秒为单位发送日期,请确保格式中列出了历元秒:

PUT my-index-000001
{
  "mappings": {
    "properties": {
      "date": {
        "type":   "date",
        "format": "strict_date_optional_time||epoch_second"
      }
    }
  }
}


PUT my-index-000001/_doc/example?refresh
{ "date": 1618321898 }


POST my-index-000001/_search
{
  "fields": [ {"field": "date"}],
  "_source": false
}

回复日期如下:

{
  "hits": {
    "hits": [
      {
        "_id": "example",
        "_index": "my-index-000001",
        "_type": "_doc",
        "_score": 1.0,
        "fields": {
          "date": ["2021-04-13T13:51:38.000Z"]
        }
      }
    ]
  }
}

你可能感兴趣的:(Elasticsearch,java,elasticsearch,数据库,大数据,搜索引擎)