Hi,
I suppose script update is a good way and as far as I know there is no such out-of-the-box function for this case.
One improvement is to change the array in place. Another is to use map in params.
PUT /test_replace_id/
{
"mappings": {
"properties": {
"employee_ids":{
"type": "keyword"
}
}
}
}
POST /test_replace_id/_doc/1
{
"employee_ids": ["old1","old2"],
"frieds_id": "old1"
}
POST /test_replace_id/_update/1
{
"script": {
"source": """
for (t in params.targets){
if (ctx._source[t] instanceof List){
for (int j=0; j<ctx._source[t].length; j++){
if (params.map.containsKey(ctx._source[t][j])) {
ctx._source[t][j] = params.map.get(ctx._source[t][j])
}
}
}else{
if (params.map.containsKey(ctx._source[t])) {
ctx._source[t] = params.map.get(ctx._source[t])
}
}
}
""",
"params":{
"targets": ["employee_ids","frieds_id"],
"map": {"old1":"new1"}
}
}
}
GET /test_replace_id/_search