ES替换某个索引下的字段的值
前言
在ES的操作中,如果我们已经同步完所有的索引,但是发现同步的时候数据出现了失误,那么在数据量很大的情况下还是要避免重新同步,这个时候就用到了更新替换操作:
操作1
针对于name字段进行替换,将name字段中包含/的替换成/
POST /topic_index/_update_by_query
{"script": {"source": "ctx._source.name = ctx._source.name.replace('/','/')"},"query": {"exists": {"field": "name"}}
}
操作2
针对nested结构的字段则有点不同了,下面的操作是将xh下的pathName中的%替换成/
POST /topic_index/_update_by_query
{"script": {"source": """for (int i = 0; i < ctx._source.xh.size(); i++) {if (ctx._source.xh[i].pathName != null) {ctx._source.xh[i].pathName = ctx._source.xh[i].pathName.replace('%','/');}}
"""},"query": {"nested": {"path": "xh","query": {"exists": {"field": "xh.pathName"}}}}
}
有其他的操作大家可以以此类推,目前我只用到了这两种