ES替换某个索引下的字段的值

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"
        }
      }
    }
  }
}

有其他的操作大家可以以此类推,目前我只用到了这两种

你可能感兴趣的:(elasticsearch,elasticsearch,java,前端)