主题
映射与数据类型
在 Elasticsearch 中,**映射(mapping)**决定了文档中字段的类型与行为,类似于关系型数据库中的“表结构”。合理的映射设计对于索引效率、查询准确性与存储成本具有重要影响。
1. 什么是映射(Mapping)
映射用于定义每个字段的名称、数据类型、是否参与搜索、分词方式等。默认情况下,Elasticsearch 会自动推断字段类型,但强烈建议为生产环境手动定义映射。
2. 常见数据类型
类型 | 描述 |
---|---|
text | 可分词文本,支持全文搜索 |
keyword | 精确匹配文本,不分词(如标签、状态) |
integer | 整数型 |
float | 浮点型 |
boolean | 布尔值(true / false) |
date | 日期时间,支持多种格式解析 |
object | 嵌套的 JSON 对象 |
nested | 特殊对象类型,用于嵌套数组查询 |
3. 创建映射示例
json
PUT /products
{
"mappings": {
"properties": {
"name": { "type": "text" },
"price": { "type": "float" },
"tags": { "type": "keyword" },
"released": { "type": "date" }
}
}
}
4. 查看与修改映射
- 查看映射:
GET /products/_mapping
- 修改映射(受限,仅支持新增字段):建议使用
reindex
重建索引以变更已定义字段
5. 自动映射 vs 手动映射
模式 | 优点 | 缺点 |
---|---|---|
自动推断 | 快速,适合测试场景 | 易产生类型错误,字段冲突难排查 |
手动定义 | 可控,结构清晰 | 初期设计工作量较大 |
理解映射与数据类型的设置是设计良好索引结构的关键,能有效避免查询偏差、节省存储并提升性能。