动态映射(Dynamic Mapping)
本章定位:ES 默认启用 Dynamic Mapping——不再需要像 SQL 那样先定义所有列。但"方便"的背后是类型推断的潜在陷阱。
定义与作用
Dynamic Mapping 允许 Elasticsearch 在文档写入时自动推断新字段的类型。无需预先在 Mapping 中声明。ES 通过检查 JSON 值的格式来推断类型(字符串→text+keyword、整数→long、小数→float、日期字符串→date)。
解决痛点:用户不需要先定义完整的 Mapping schema,快速上手。但不适合生产环境。
核心原理:类型推断规则
| JSON 类型 | ES 推断类型 |
|---|---|
"hello" | text + keyword 子字段 |
123 | long |
12.3 | float |
true/false | boolean |
"2024-01-01" | date |
完整示例:小崔踩坑动态映射
反例:日期字符串误识别
PUT /orders/_doc/1
{ "order_no": "2024-06-13-001" }
# → order_no 被识别为 date 类型!因为 "2024-06-13" 部分是合法日期
纠正:dynamic: strict 或预先声明为 keyword。
小结
生产环境建议 dynamic: strict 或 dynamic: runtime,防止字段爆炸和类型误判。