获取字段映射 API

编辑

检索一个或多个字段的映射定义。对于数据流,API 会检索流的后备索引的字段映射。

如果您不需要完整的映射,或者索引映射包含大量字段,则此 API 非常有用。

resp = client.indices.get_field_mapping(
    index="my-index-000001",
    fields="user",
)
print(resp)
response = client.indices.get_field_mapping(
  index: 'my-index-000001',
  fields: 'user'
)
puts response
const response = await client.indices.getFieldMapping({
  index: "my-index-000001",
  fields: "user",
});
console.log(response);
GET /my-index-000001/_mapping/field/user

请求

编辑

GET /_mapping/field/<field>

GET /<target>/_mapping/field/<field>

先决条件

编辑
  • 如果启用了 Elasticsearch 安全功能,则您必须对目标数据流、索引或别名具有 view_index_metadatamanage 索引权限

路径参数

编辑
<target>
(可选,字符串)用于限制请求的数据流、索引和别名的逗号分隔列表。支持通配符 (*)。要定位所有数据流和索引,请省略此参数或使用 *_all
<field>
(可选,字符串)用于限制返回信息的字段的逗号分隔列表或通配符表达式。

查询参数

编辑
allow_no_indices

(可选,布尔值)如果为 false,则如果任何通配符表达式、索引别名_all 值仅定位缺失或关闭的索引,则请求会返回错误。即使请求定位其他打开的索引,此行为也适用。例如,如果索引以 foo 开头,但没有索引以 bar 开头,则定位 foo*,bar* 的请求会返回错误。

默认为 true

expand_wildcards

(可选,字符串)通配符模式可以匹配的索引类型。如果请求可以定位数据流,则此参数确定通配符表达式是否匹配隐藏的数据流。支持逗号分隔的值,例如 open,hidden。有效值为

all
匹配任何数据流或索引,包括隐藏的数据流或索引。
open
匹配打开的、非隐藏的索引。也匹配任何非隐藏的数据流。
closed
匹配关闭的、非隐藏的索引。也匹配任何非隐藏的数据流。数据流无法关闭。
hidden
匹配隐藏的数据流和隐藏的索引。必须与 openclosed 或两者结合使用。
none
不接受通配符模式。
ignore_unavailable
(可选,布尔值)如果为 false,则如果请求定位缺失或关闭的索引,则会返回错误。默认为 false
include_defaults
(可选,布尔值)如果为 true,则响应会包含默认的映射值。默认为 false

示例

编辑

包含索引设置的示例

编辑

您可以在创建新索引时提供字段映射。以下创建索引 API 请求会创建具有多个字段映射的 publications 索引。

resp = client.indices.create(
    index="publications",
    mappings={
        "properties": {
            "id": {
                "type": "text"
            },
            "title": {
                "type": "text"
            },
            "abstract": {
                "type": "text"
            },
            "author": {
                "properties": {
                    "id": {
                        "type": "text"
                    },
                    "name": {
                        "type": "text"
                    }
                }
            }
        }
    },
)
print(resp)
response = client.indices.create(
  index: 'publications',
  body: {
    mappings: {
      properties: {
        id: {
          type: 'text'
        },
        title: {
          type: 'text'
        },
        abstract: {
          type: 'text'
        },
        author: {
          properties: {
            id: {
              type: 'text'
            },
            name: {
              type: 'text'
            }
          }
        }
      }
    }
  }
)
puts response
const response = await client.indices.create({
  index: "publications",
  mappings: {
    properties: {
      id: {
        type: "text",
      },
      title: {
        type: "text",
      },
      abstract: {
        type: "text",
      },
      author: {
        properties: {
          id: {
            type: "text",
          },
          name: {
            type: "text",
          },
        },
      },
    },
  },
});
console.log(response);
PUT /publications
{
  "mappings": {
    "properties": {
      "id": { "type": "text" },
      "title": { "type": "text" },
      "abstract": { "type": "text" },
      "author": {
        "properties": {
          "id": { "type": "text" },
          "name": { "type": "text" }
        }
      }
    }
  }
}

以下内容仅返回字段 title 的映射

resp = client.indices.get_field_mapping(
    index="publications",
    fields="title",
)
print(resp)
response = client.indices.get_field_mapping(
  index: 'publications',
  fields: 'title'
)
puts response
const response = await client.indices.getFieldMapping({
  index: "publications",
  fields: "title",
});
console.log(response);
GET publications/_mapping/field/title

API 返回以下响应

{
   "publications": {
      "mappings": {
          "title": {
             "full_name": "title",
             "mapping": {
                "title": {
                   "type": "text"
                }
             }
          }
       }
   }
}

指定字段

编辑

获取映射 API 允许您指定字段的逗号分隔列表。

例如,要选择 author 字段的 id,您必须使用其全名 author.id

resp = client.indices.get_field_mapping(
    index="publications",
    fields="author.id,abstract,name",
)
print(resp)
response = client.indices.get_field_mapping(
  index: 'publications',
  fields: 'author.id,abstract,name'
)
puts response
const response = await client.indices.getFieldMapping({
  index: "publications",
  fields: "author.id,abstract,name",
});
console.log(response);
GET publications/_mapping/field/author.id,abstract,name

返回

{
   "publications": {
      "mappings": {
        "author.id": {
           "full_name": "author.id",
           "mapping": {
              "id": {
                 "type": "text"
              }
           }
        },
        "abstract": {
           "full_name": "abstract",
           "mapping": {
              "abstract": {
                 "type": "text"
              }
           }
        }
     }
   }
}

获取字段映射 API 还支持通配符表示法。

resp = client.indices.get_field_mapping(
    index="publications",
    fields="a*",
)
print(resp)
response = client.indices.get_field_mapping(
  index: 'publications',
  fields: 'a*'
)
puts response
const response = await client.indices.getFieldMapping({
  index: "publications",
  fields: "a*",
});
console.log(response);
GET publications/_mapping/field/a*

返回

{
   "publications": {
      "mappings": {
         "author.name": {
            "full_name": "author.name",
            "mapping": {
               "name": {
                 "type": "text"
               }
            }
         },
         "abstract": {
            "full_name": "abstract",
            "mapping": {
               "abstract": {
                  "type": "text"
               }
            }
         },
         "author.id": {
            "full_name": "author.id",
            "mapping": {
               "id": {
                  "type": "text"
               }
            }
         }
      }
   }
}

多个目标和字段

编辑

获取字段映射 API 可用于通过单个请求从多个数据流或索引中获取多个字段的映射。

<target><field> 请求路径参数都支持逗号分隔的列表和通配符表达式。

您可以省略 <target> 参数,或使用值 *_all 来定位集群中的所有数据流和索引。

同样,您可以省略 <field> 参数,或使用值 * 来检索目标数据流或索引中所有字段的映射。但是,<field> 参数不支持 _all 值。

例如,以下请求检索名为 my-index-000001my-index-000002 的任何数据流或索引中 message 字段的映射。

resp = client.indices.get_field_mapping(
    index="my-index-000001,my-index-000002",
    fields="message",
)
print(resp)
response = client.indices.get_field_mapping(
  index: 'my-index-000001,my-index-000002',
  fields: 'message'
)
puts response
const response = await client.indices.getFieldMapping({
  index: "my-index-000001,my-index-000002",
  fields: "message",
});
console.log(response);
GET /my-index-000001,my-index-000002/_mapping/field/message

以下请求检索集群中任何数据流或索引中的 messageuser.id 字段的映射。

resp = client.indices.get_field_mapping(
    index="_all",
    fields="message",
)
print(resp)
response = client.indices.get_field_mapping(
  index: '_all',
  fields: 'message'
)
puts response
const response = await client.indices.getFieldMapping({
  index: "_all",
  fields: "message",
});
console.log(response);
GET /_all/_mapping/field/message

以下请求检索集群中任何数据流或索引中具有 id 属性的字段的映射。

resp = client.indices.get_field_mapping(
    index="_all",
    fields="*.id",
)
print(resp)
response = client.indices.get_field_mapping(
  index: '_all',
  fields: '*.id'
)
puts response
const response = await client.indices.getFieldMapping({
  index: "_all",
  fields: "*.id",
});
console.log(response);
GET /_all/_mapping/field/*.id