如何在elasticsearch大数据量环境下在索引上新增字段并修改字段值

文章目录

  • 环境:
  • 思路:
  • 步骤:
    • 1、创建目标索引;
      • 1.1、先获取源索引的settings和mapping;
      • 1.2、根据1.1获取的信息创建索引;
    • 2、从临时表查询异常数据,执行reindex;
    • 3、每次查询1000条,批量reindex;
    • 4、每次执行完,清空临时表数据;
    • 5、临时表就保存一条数据(待处理ids,状态)
  • 纯干货:

环境:

大数据量下如何将数据处理后(增加字段,字段值处理等)迁移到新索引上

思路:

每次查询出来1000条获取id list;
reindex 根据ids 查询出需要迁移的数据,使用script处理后,保存到目标索引上;
中间可能会出错 异常情况,建一个临时表存取执行本次1000条的执行状态(已查询、已处理);
每次执行之前先查询临时表执行状态判断上一次执行完成,使用switch-case判断,直到最后一步才break

步骤:

1、创建目标索引;

1.1、先获取源索引的settings和mapping;

1.2、根据1.1获取的信息创建索引;

2、从临时表查询异常数据,执行reindex;

3、每次查询1000条,批量reindex;

4、每次执行完,清空临时表数据;

5、临时表就保存一条数据(待处理ids,状态)

纯干货:

例1:
{
  "source": {
    "index": "source_index",
    "query": {
       "match_all": {}
    }
  },
  "dest": {
    "index": "dest_index"
  },
  "script": {
    "source": "if(ctx._source.xx !=''){ctx._source.xx= ctx._source.newValue;}",
    "lang": "painless"
  }
}
例2:
{
  "source": {
    "index": "source_index",
    "query": {
       "match_all": {}
    }
  },
  "dest": {
    "index": "dest_index"
  },
  "script": {
    "source": "ctx._source.xx=params[ctx._source.xx]}",
    "params": {
      "oldValue1": "newValue1",
      "oldValue2": "newValue2",
	  "oldValue3": "newValue3"
    },
    "lang": "painless"
  }
}

你可能感兴趣的:(如何在elasticsearch大数据量环境下在索引上新增字段并修改字段值)