获取字段映射 API编辑

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

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

response = client.indices.get_field_mapping(
  index: 'my-index-000001',
  fields: 'user'
)
puts 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 索引。

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
PUT /publications
{
  "mappings": {
    "properties": {
      "id": { "type": "text" },
      "title": { "type": "text" },
      "abstract": { "type": "text" },
      "author": {
        "properties": {
          "id": { "type": "text" },
          "name": { "type": "text" }
        }
      }
    }
  }
}

以下将仅返回字段 title 的映射

response = client.indices.get_field_mapping(
  index: 'publications',
  fields: 'title'
)
puts response
GET publications/_mapping/field/title

API 返回以下响应

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

指定字段编辑

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

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

response = client.indices.get_field_mapping(
  index: 'publications',
  fields: 'author.id,abstract,name'
)
puts 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 还支持通配符表示法。

response = client.indices.get_field_mapping(
  index: 'publications',
  fields: 'a*'
)
puts 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 字段的映射。

response = client.indices.get_field_mapping(
  index: 'my-index-000001,my-index-000002',
  fields: 'message'
)
puts response
GET /my-index-000001,my-index-000002/_mapping/field/message

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

response = client.indices.get_field_mapping(
  index: '_all',
  fields: 'message'
)
puts response
GET /_all/_mapping/field/message

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

response = client.indices.get_field_mapping(
  index: '_all',
  fields: '*.id'
)
puts response
GET /_all/_mapping/field/*.id