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实践过, 都没问题
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。