显式映射编辑

您比 Elasticsearch 更了解您的数据,因此虽然动态映射对于入门很有用,但在某些时候您需要指定自己的显式映射。

您可以在 创建索引向现有索引添加字段 时创建字段映射。

使用显式映射创建索引编辑

您可以使用 创建索引 API 来使用显式映射创建新索引。

response = client.indices.create(
  index: 'my-index-000001',
  body: {
    mappings: {
      properties: {
        age: {
          type: 'integer'
        },
        email: {
          type: 'keyword'
        },
        name: {
          type: 'text'
        }
      }
    }
  }
)
puts response
res, err := es.Indices.Create(
	"my-index-000001",
	es.Indices.Create.WithBody(strings.NewReader(`{
	  "mappings": {
	    "properties": {
	      "age": {
	        "type": "integer"
	      },
	      "email": {
	        "type": "keyword"
	      },
	      "name": {
	        "type": "text"
	      }
	    }
	  }
	}`)),
)
fmt.Println(res, err)
PUT /my-index-000001
{
  "mappings": {
    "properties": {
      "age":    { "type": "integer" },  
      "email":  { "type": "keyword"  }, 
      "name":   { "type": "text"  }     
    }
  }
}

创建 age,一个 integer 字段

创建 email,一个 keyword 字段

创建 name,一个 text 字段

向现有映射添加字段编辑

您可以使用 更新映射 API 向现有索引添加一个或多个新字段。

以下示例添加 employee-id,一个 keyword 字段,其 index 映射参数值为 false。这意味着 employee-id 字段的值将被存储,但不会被索引或用于搜索。

response = client.indices.put_mapping(
  index: 'my-index-000001',
  body: {
    properties: {
      "employee-id": {
        type: 'keyword',
        index: false
      }
    }
  }
)
puts response
res, err := es.Indices.PutMapping(
	[]string{"my-index-000001"},
	strings.NewReader(`{
	  "properties": {
	    "employee-id": {
	      "type": "keyword",
	      "index": false
	    }
	  }
	}`),
)
fmt.Println(res, err)
PUT /my-index-000001/_mapping
{
  "properties": {
    "employee-id": {
      "type": "keyword",
      "index": false
    }
  }
}

更新字段的映射编辑

除了支持的 映射参数 外,您无法更改现有字段的映射或字段类型。更改现有字段可能会使已索引的数据失效。

如果您需要更改数据流的后台索引中的字段映射,请参阅 更改数据流的映射和设置

如果您需要更改其他索引中的字段映射,请使用正确的映射创建一个新索引,然后将您的数据 重新索引 到该索引中。

重命名字段将使已索引在旧字段名称下的数据失效。相反,添加一个 alias 字段来创建备用字段名称。

查看索引的映射编辑

您可以使用 获取映射 API 来查看现有索引的映射。

resp = client.indices.get_mapping(
    index="my-index-000001",
)
print(resp)
response = client.indices.get_mapping(
  index: 'my-index-000001'
)
puts response
res, err := es.Indices.GetMapping(es.Indices.GetMapping.WithIndex("my-index-000001"))
fmt.Println(res, err)
GET /my-index-000001/_mapping

API 返回以下响应

{
  "my-index-000001" : {
    "mappings" : {
      "properties" : {
        "age" : {
          "type" : "integer"
        },
        "email" : {
          "type" : "keyword"
        },
        "employee-id" : {
          "type" : "keyword",
          "index" : false
        },
        "name" : {
          "type" : "text"
        }
      }
    }
  }
}

查看特定字段的映射编辑

如果您只想查看一个或多个特定字段的映射,可以使用 获取字段映射 API。

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

以下请求检索 employee-id 字段的映射。

response = client.indices.get_field_mapping(
  index: 'my-index-000001',
  fields: 'employee-id'
)
puts response
res, err := es.Indices.GetMapping(es.Indices.GetMapping.WithIndex("my-index-000001"))
fmt.Println(res, err)
GET /my-index-000001/_mapping/field/employee-id

API 返回以下响应

{
  "my-index-000001" : {
    "mappings" : {
      "employee-id" : {
        "full_name" : "employee-id",
        "mapping" : {
          "employee-id" : {
            "type" : "keyword",
            "index" : false
          }
        }
      }
    }
  }
}