我有一个有映射的索引
{
"mappings": {
"properties": {
"title": {
"type": "text"
},
"location": {
"type": "keyword"
}
}
}
}
在location
字段中,我们正在存储城市名称。我们需要改变映射结构来存储国家和州,因此映射将是
{
"mappings": {
"properties": {
"title": {
"type": "text"
},
"location": {
"properties": {
"country": {
"type": "keyword"
},
"state": {
"type": "keyword"
},
"city": {
"type": "keyword"
}
}
}
}
}
}
这类移徙的建议流动是什么?
发布于 2020-08-03 06:30:25
Elasticsearch不允许更改现有字段的映射定义,只允许添加新的字段定义,因为您可以检查这里。
所以其中一个可能性是:
另一个代价高昂的可能性是:
要用正确的格式将数据从旧索引重新索引到新索引,可以使用无痛剧本
POST /_reindex
{
"source": {
"index": "old_index_name"
},
"dest": {
"index": "new_index_name"
},
"script": {
"lang": "painless",
"params" : {
"location":{
"country" : null,
"state": null,
"city": null
}
},
"source": """
params.location.city = ctx._source.location
ctx._source.location = params.location
"""
}
}
可以更新旧数据的国家和州字段后。
如果需要相同的索引名,请使用使用正确映射创建的新索引作为备份,然后需要使用旧映射删除索引,并使用正确的映射再次使用相同的名称重新创建索引,并将其他保留索引中的数据带回来。
有关更改映射的更多信息,请阅读变弹性搜索映射。
发布于 2020-08-03 06:11:59
https://stackoverflow.com/questions/63230241
复制