# Dynamic Mapping（动态映射）

原文链接 : [https://www.elastic.co/guide/en/elasticsearch/reference/5.3/dynamic-mapping.html](https://www.elastic.co/guide/en/elasticsearch/reference/5.3/dynamic-mapping.html)

译文链接 : [http://www.apache.wiki/pages/viewpage.action?pageId=9405268](http://www.apache.wiki/pages/viewpage.action?pageId=9405268)

贡献者 :[曾少峰](/display/~zengshaofeng)，[ApacheCN](/display/~apachecn)，[Apache中文网](/display/~apachechina)

**Elasticsearch** 最重要的功能之一就是让你尽可能快地开始探索数据。要索引文档，你不用立即创建 **index**（索引），定义相关的 **mapping** **type**（映射类型）和定义相关的 **fields**（字段）— 你可以只索引 **document**（文档）、**index**（索引）、**type**（类型）和 **fields**（字段），这些操作都将自动生效。

```
curl -XPUT 'localhost:9200/data/counters/1?pretty' -H 'Content-Type: application/json' -d' # 1
{ "count": 5 }
'
```

| 1 | 创建名为 **data** 的索引，其中包含名为 **counters** 的 **mapping** **type**（映射类型），以及名为 **count** 的 **long** 数据类型。 |

自动的检测和添加新的类型以及字段的过程，称之为动态映射。你可以根据需要定制动态映射的规则 : 

[_default_ mapping](https://www.elastic.co/guide/en/elasticsearch/reference/5.3/default-mapping.html)（**_default_  **映射）

配置一个基本映射，作用于新的映射类型。

[Dynamic field mappings](https://www.elastic.co/guide/en/elasticsearch/reference/5.3/dynamic-field-mapping.html)（动态字段映射）

控制动态字段发现的规则。

[Dynamic templates](https://www.elastic.co/guide/en/elasticsearch/reference/5.3/dynamic-templates.html)（动态模板）

利用自定义规则来配置动态添加的字段的映射。

Tips :

无论是自动还是显式的创建索引，[Index templates](https://www.elastic.co/guide/en/elasticsearch/reference/5.3/indices-templates.html "Index Templates")（索引模板）都允许你为一个新的索引配置 **mappings**，**settings** 和 **aliases**（别名）。

### Disabling automatic type creation（禁用自动类型创建）

每个索引都可以通过将 **index** **setting**（索引设置）中的 **index.mapper.dynamic** 属性设置为 **false**，来禁用 **Automatic type creation**（自动创建类型）-（根据数据类型自动创建 **mapping**）: 

```
curl -XPUT 'localhost:9200/data/_settings?pretty' -H 'Content-Type: application/json' -d'
{
  "index.mapper.dynamic":false # 1
}
'
```

| 1 | 禁用名为 “**data**” 的索引的自动创建类型（根据数据类型自动创建 **mapping**）。 |

通过对索引模板的设置，可以禁用所有索引的自动创建类型（根据数据类型自动创建mapping)）: 

```
curl -XPUT 'localhost:9200/_template/template_all?pretty' -H 'Content-Type: application/json' -d'
{
  "template": "*",
  "order":0,
  "settings": {
    "index.mapper.dynamic": false # 1
  }
}
'
```

| 1 | 禁用所有索引的自动创建类型(根据数据类型自动创建mapping)。 |

无论该属性如何设置，在 [创建索引](/pages/viewpage.action?pageId=4882789) 或使用 [PUT mapping](/pages/viewpage.action?pageId=4882803) **API** 时，我们仍然可以显式的添加 **types**（类型）。