# 映射与数据类型

URL: https://caijiao.org/elasticsearch/01.intro/09.mapping-types
Source: docs/elasticsearch/01.intro/09.mapping-types.md
Description: 本章介绍 Elasticsearch 映射（mapping）机制与常见字段数据类型，帮助读者正确设计索引结构与提升查询性能。

在 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 手动映射

| 模式   | 优点        | 缺点              |
| ---- | --------- | --------------- |
| 自动推断 | 快速，适合测试场景 | 易产生类型错误，字段冲突难排查 |
| 手动定义 | 可控，结构清晰   | 初期设计工作量较大       |

---

理解映射与数据类型的设置是设计良好索引结构的关键，能有效避免查询偏差、节省存储并提升性能。
