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