问题
最近需要调整ES索引,添加1个字段,并且,对旧文档数据更新新加的字段默认值。
解决思路
通过利用Update mapping API添加1个新字段后,然后,利用Update By Query API将向旧文档数据添加新加字段默认值。
添加字段
bash
PUT dev_zyl/_mapping
{
"properties": {
"levelScore": {
"type": "double",
"null_value": 1
}
}
}
这里添加了一个levelScore
字段,这个字段是double
类型,默认值为1
。
更新旧文档
bash
POST dev_zyl/_update_by_query
{
"query": {
"match_all": {}
},
"script": {
"source": "ctx._source['levelScore'] = 1"
}
}
这是查询出所有文档,然后,将levelScore
字段设置为1
。
总结
现在这个时间点,ES不能通过在mapping接口添加新字段的时候,影响到旧数据。不过,单独出一个接口处理旧数据也是很合理的。