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"
}
}
}
}
}
有其他的操作大家可以以此类推,目前我只用到了这两种