# Put Mapping /提交映射

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

译文链接 : [Put Mapping /提交映射](/pages/viewpage.action?pageId=4882803)[](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-put-mapping.html)

贡献者 : [Le-Mon](/display/~tanwen)

提交映射允许提交自定义的类型映射至一个新的索引，或者增加一个新的类型至一个存在的索引，或者增加某个存在类型的字段。

```
curl -XPUT 'localhost:9200/twitter ?pretty' -d'
{
  "mappings": {
    "tweet": {
      "properties": {
        "message": {
          "type": "text"
        }
      }
    }
  }
}'
curl -XPUT 'localhost:9200/twitter/_mapping/user ?pretty' -d'
{
  "properties": {
    "name": {
      "type": "text"
    }
  }
}'
curl -XPUT 'localhost:9200/twitter/_mapping/tweet ?pretty' -d'
{
  "properties": {
    "user_name": {
      "type": "text"
    }
  }
}'

```

| [![](img/24cb6cd12df1a0cbdb39ab06379bd3de.jpg)](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-put-mapping.html#CO125-1) | 创建一个名叫 `twitter` 的索引，在 tweet 包含一个字段 `message` . |
| [![](img/c7d178c0e490b3b3fa632f5c43fa27ff.jpg)](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-put-mapping.html#CO125-2) | 使用 PUT mapping API 增加一个新的类型： `user`. |
| [![](img/4eebc14898339f6b58322f85335942c7.jpg)](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-put-mapping.html#CO125-3) | 使用 PUT mapping API 向 `tweet`增加`user_name` 字段. |

有关 [mapping](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html "Mapping") 更多的信息请在该章节查看.

## Multi-index /多索引

PUT mapping API 可以用一个请求支持多个索引.格式如下

```
PUT /{index}/_mapping/{type} 
{ body }
```

*   `{index}` 接受多个 [index](https://www.elastic.co/guide/en/elasticsearch/reference/current/multi-index.html "Multiple Indices") 和通配符.
*   `{type}` 是更新的 type 名称.
*   `{body} `包含需要更新的字段等.

## Updating field mappings/更新字段映射

一般来说，现有字段的映射不能更新。 这个规则有一些例外。 例如：

可以将新属性[`properties`](https://www.elastic.co/guide/en/elasticsearch/reference/current/properties.html "properties") 添加到[Object](https://www.elastic.co/guide/en/elasticsearch/reference/current/object.html "Object datatype")数据类型字段中。
新的多字段[multi-fields](https://www.elastic.co/guide/en/elasticsearch/reference/current/multi-fields.html "fields")可以添加到现有字段。
可以禁用[`doc_values`](https://www.elastic.co/guide/en/elasticsearch/reference/current/doc-values.html "doc_values") ，但不能启用。
可以更新[`ignore_above`](https://www.elastic.co/guide/en/elasticsearch/reference/current/ignore-above.html "ignore_above") 参数。

For example:

```
curl -XPUT 'localhost:9200/my_index ?pretty' -d'
{
  "mappings": {
    "user": {
      "properties": {
        "name": {
          "properties": {
            "first": {
              "type": "text"
            }
          }
        },
        "user_id": {
          "type": "keyword"
        }
      }
    }
  }
}'
curl -XPUT 'localhost:9200/my_index/_mapping/user?pretty' -d'
{
  "properties": {
    "name": {
      "properties": {
        "last": { 
          "type": "text"
        }
      }
    },
    "user_id": {
      "type": "keyword",
      "ignore_above": 100 
    }
  }
}'

```

| [![](img/24cb6cd12df1a0cbdb39ab06379bd3de.jpg)](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-put-mapping.html#CO126-1) | 创建有一个 `first` 字段的,  [Object datatype](https://www.elastic.co/guide/en/elasticsearch/reference/current/object.html "Object datatype") 字段, 和一个 `user_id` 字段. |
| [![](img/c7d178c0e490b3b3fa632f5c43fa27ff.jpg)](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-put-mapping.html#CO126-2) | 加入 `last`字段 在 `name` object 字段下. |
| [![](img/4eebc14898339f6b58322f85335942c7.jpg)](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-put-mapping.html#CO126-3) | 更新 `ignore_above` 设置 默认: 0. |

每个 [mapping](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-params.html "Mapping parameters") 参数指定是否可以在现有字段上更新其设置。

## Conflicts between fields in different types/多字段/类型的冲突

同一索引中具有相同名称的两个不同类型(type)的的字段必须具有相同的映射，因为它们在内部由相同的字段支持。 尝试更新存在于多个类型中的字段的映射参数将抛出异常，除非您指定update_all_types参数，否则将在同一索引中的同一个名称的所有字段上更新该参数。

![Tip](img/b1fda39d66362520c57fb0bebf6575f8.jpg)唯一可以免除此规则的参数 - 它们可以设置为每个字段上的不同值 - 可以在“[字段在映射typesedit ](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html#field-conflicts "Fields are shared across mapping typesedit")中共享”一节中找到。

例如 失败操作:

```
curl -XPUT 'localhost:9200/my_index?pretty' -d'
{
  "mappings": {
    "type_one": {
      "properties": {
        "text": { 
          "type": "text",
          "analyzer": "standard"
        }
      }
    },
    "type_two": {
      "properties": {
        "text": { 
          "type": "text",
          "analyzer": "standard"
        }
      }
    }
  }
}'
curl -XPUT 'localhost:9200/my_index/_mapping/type_one ?pretty' -d'
{
  "properties": {
    "text": {
      "type": "text",
      "analyzer": "standard",
      "search_analyzer": "whitespace"
    }
  }
}'

```

| [![](img/24cb6cd12df1a0cbdb39ab06379bd3de.jpg)](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-put-mapping.html#CO127-1) [![](img/c7d178c0e490b3b3fa632f5c43fa27ff.jpg)](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-put-mapping.html#CO127-2) | 创建一个两种类型的索引，它们都包含一个具有相同映射的文本字段。 |
| [![](img/4eebc14898339f6b58322f85335942c7.jpg)](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-put-mapping.html#CO127-3) | 尝试更新 `search_analyzer` 对 `type_one` 字段时抛出异常 `"Merge failed with failures..."`. |

但是这样会成功

```
curl -XPUT 'localhost:9200/my_index/_mapping/type_one?update_all_types &pretty' -d'
{
  "properties": {
    "text": {
      "type": "text",
      "analyzer": "standard",
      "search_analyzer": "whitespace"
    }
  }
}'

```

| [![](img/24cb6cd12df1a0cbdb39ab06379bd3de.jpg)](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-put-mapping.html#CO128-1) | 添加update_all_types参数会更新type_one和type_two中的文本字段。 |