动态

详情 返回 返回

ES(Elasticsearch)的時間映射 - 动态 详情

1.自動映射

如果index在創建時,未手動定義schema,而是靠put進第一條數據時自動識別的, 那麼識別規則如下:

1.1 text/long/float的識別

  • "title": "Elasticsearch In Action"->text
  • "age": 20 -> long
  • "rating": 50.40 -> float

1.2 date的識別

1.2.1 識別為常規date(ISO8601)

  • "release_time1": "2025-10-21" -> date
  • "release_time2": "2025-10-21T09:30:49" -> date

    "release_time" : {
      "type" : "date"
    }

    注意: 此時生成的mapping, 再後續只能插入"2025-10-21"和"2025-10-21T09:30:49"形式的日期;如果是"2025/10/21"/"2025/10/21 09:30:49"/1420070400002這種的, 插入會報錯!

1.2.2 識別為帶format的date

  • "release_time3": "2025/10/21" -> date
  • "release_time4": "2025/10/21 09:30:49" -> date

    "release_time" : {
    "type" : "date",
    "format" : "yyyy/MM/dd HH:mm:ss||yyyy/MM/dd||epoch_millis"
    }

    注意: 此時生成的mapping, 再後續只能插入"2025/10/21"/"2025/10/21 09:30:49"/1420070400002 形式的日期;如果是"2025-10-21"和"2025-10-21T09:30:49"這種的, 插入會報錯!
    1420070400002這個是epoch_millis毫秒數, 第一次插入不能用它(會識別為long), 但是已經被識別為"yyyy/MM/dd HH:mm:ss||yyyy/MM/dd||epoch_millis"的話, 後續的插入數據, 可以識別為date類型!

2.手動設置

可以自定義format多個

2.1 聲明所有常用格式

PUT test004
{
  "mappings": {
    "properties": {
      "release_time": {
        "type": "date",
        "format": "yyyy-MM-dd||yyyy-MM-dd'T'HH:mm:ss||yyyy-MM-dd HH:mm:ss||yyyy/MM/dd HH:mm:ss||yyyy/MM/dd||epoch_millis"
      },
      "age": {
        "type": "byte"
      }
    }
  }
}

2.2 插入數據:所有格式

PUT /test004/_doc/1
{
  "title": "the title 1",
  "release_time": "2025-10-21",
  "age": "20"
}
PUT /test004/_doc/2
{
  "title": "the title 2",
  "release_time": "2025-10-21T09:45:32",
  "age": "32"
}
PUT /test004/_doc/3
{
  "title": "the title 3",
  "release_time": "2025-10-21 09:44:02",
  "age": 32
}
PUT /test004/_doc/4
{
  "title": "the title 4",
  "release_time": "2025/10/21 09:45:00",
  "age": 22
}

PUT /test004/_doc/5
{
  "title": "the title 5",
  "release_time": "2025/10/21",
  "age": 22
}

PUT /test004/_doc/6
{
  "title": "the title 6",
  "release_time": 1761011360613,
  "age": 22
}

2.3 甚至包括字符串格式的epoch_millis

PUT /test004/_doc/7
{
  "title": "the title 7",
  "release_time": "1761011360613",
  "age": 23
}

2.4 查詢過濾(沒問題)

GET test004/_search
{
  "query": {
    "range": {
      "release_time": {
        "gte": "2025-10-21 09:44:02"
      }
    }
  }
}

就是這樣, 上面的例子在es7.17.29 es8.15.5實踐過, 都沒問題

user avatar zyuxuaner 头像
点赞 1 用户, 点赞了这篇动态!
点赞

Add a new 评论

Some HTML is okay.