官方文档强调已经定义的字段在大多数情况下不能更新,除非通过reindex操作来更新映射。
但以下3种情况例外。
❑Object对象可以添加新的属性。
❑在已经存在的字段里面可以添加fields,以构成一个字段多种类型。
❑ignore_above是可以更新的。
对此,实战验证如下。
PUT my_index_0508
{
"mappings": {
"properties": {
"name": {
"type": "object",
"properties": {
"first": {
"type": "text"
}
}
},
"user_id": {
"type": "keyword"
}
}
}
}
更新映射的操作如下所示。
PUT my_index_0508/_mapping
{
"properties": {
"name": {
"type": "object",
"properties": {
"first": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
},
"last": {
"type": "text"
}
}
},
"user_id": {
"type": "keyword",
"ignore_above": 100
}
}
}
在以上实战中,对应第一种情况,Object对象可以添加新的属性,添加了last字段。对应第二种情况,first添加了keyword类型,以组合构造fields。对应第三种情况,user_id添加了ignore_above。