暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

ElasticSearch必知必会-Reindex重建索引

原创 京东云开发者 2023-03-14
2019

作者: 京东物流 康睿

1.重建索引需求背景

1.1 集群版本升级

ES版本兼容性

  1. 同一大版本范围内升级,索引读写兼容
  2. 不同大版本升级,索引读写不兼容,需要重建索引

1.2 集群迁移

集群索引迁移

  1. 集群迁移,索引服务不停机,数据提前迁移

1.3 索引分片数量调整

分片数量变更

  1. 原有分片数量太少,重建变多
  2. 原有分片数量太多,重建变少
  3. ES索引分片,一旦创建,原索引是不能修改分片数量的

1.4 索引文档结构变更

文档结构变更

  1. 字段类型变更,已有索引字段类型是不可以修改的
  2. 字段属性变更,历史数据的字段属性是不会刷新的
  3. 文档对象结构变更

2.常用重建索引方式

2.1 Reindex初识

索引重建说明

  1. 重建是创建新索引,原有索引保留
  2. 原有索引_source必须开启,否则找不到原始数据
  3. 索引重建建议,严格业务场景,目标索引mapping结构建议先创建好,不使用es动态推测字段类型的方式。
POST_reindex
{
  "source": {
    "index": "原始索引"
  },
  "dest": {
    "index": "新目标索引"
  }
}



复制

2.2 Url参数解读

URL参数

  1. refresh,目标索引是否立即刷新
  2. waif_for_active_shards, 重建索引分片响应设置
  3. Scroll, 快照查询时间
  4. slicing, 重建并行任务切片
  5. Max_docs , 单次最大数据量,条数
  6. requests_per_second . 单次执行的重建文档数据量

2.3 Request body参数解读

请求参数

  1. confilicts, 索引数据冲突如何解决,直接覆盖还是中断
  2. source: 原索引配置信息
  3. dest,新索引配置信息
  4. script,脚本处理,修改原索引信息后再写入新索引

2.4 Response 参数解读

响应参数

  1. 成功数
  2. 更新数
  3. 新增数
  4. 失败数

2.5 重建索引任务管控

任务管控必要性

  1. 重建索引是一个异步任务,由ES后台进程完成调度执行,集群可能有并行其他异步任务,有时需要中断停止或查看进度

任务管控API

  1. _tasks,服务端API

3.高级索引重建方式

3.1 单秒数据量阈值控制

单秒数据量控制

  1. requests_per_second
  2. 默认1000,设置-1则不限制
  3. 生产重建时,建议控制范围500-1000左右
  4. 控制重建速度,防止集群瞬间IO过大

3.2人工切片

数据切片应用

  1. 人为指定切片数量,并行任务
  2. 用于降低索引redinx速度
POST_reindex
{
  "source": {
    "index": "my-index-000001",
    "slice": {
      "id": 0,  // 执行下标,从0开始,即0切第一批数据做迁移,1切第二批数据做迁移
      "max": 2  // 切分分片数
    }
  },
  "dest": {
    "index": "my-new-index-000001"
  }
}



复制

3.3 自动切片

自动切片

  1. 仅需指定自动切片大小即可,后续的调度由es完成
POST_reindex?slices=5&refresh
{
  "source": {
    "index": "my-index-000001"
  },
  "dest": {
    "index": "my-new-index-000001"
  }
}



复制

3.4 限制reindex重建数据的范围

3.4.1 query

限制查询条件

  1. 基于DEL语言规则编写,可以任意复杂,限制数据范围
POST_reindex
{
  "source": {
    "index": "my-index-000001",
    "query": {
      "term": {
        "user.id": "kimchy"
      }
    }
  },
  "dest": {
    "index": "my-new-index-000001"
  }
}



复制

3.4.2 max docs

限制数据条数

  1. 限制重建数据总条数,默认全部
POST_reindex
{
  "max_docs": 1,
  "source": {
    "index": "my-index-000001"
  },
  "dest": {
    "index": "my-new-index-000001"
  }
}



复制

3.5 多索引重建

多索引重建

  1. ES也支持将多个索引数据合并到一个索引里面去
  2. 若多个索引数据ID相同,则会相互覆盖
POST_reindex
{
  "source": {
    "index": ["my-index-000001", "my-index-000002"]
  },
  "dest": {
    "index": "my-new-index-000002"
  }
}



复制

3.6 限制重建索引数据字段

限制重建索引数据字段

  1. source filter
  2. 原有数据字段过多,需要限制筛选部分进行重建
POST_reindex
{
  "source": {
    "index": "my-index-000001",
    "_source": ["user.id", "_doc"]
  },
  "dest": {
    "index": "my-new-index-000001"
  }
}



复制

3.7 字段重命名

字段名重命名

  1. 原有的数据字段名称不合理,重新按照新字段命名
  2. 基于脚本机制修改
  3. ES字段名称原始是不允许修改的,但通过脚本可以操作

3.8 修改原始文档数据

修改原始文档数据

  1. 基于脚本

4.跨集群索引重建

跨集群操作

  1. 基于集群通信,类同远程机制
  2. 需设置跨集群白名单,配置在dist集群

5.索引重建注意事项

5.1 数据量阈值控制

控制好索引重建速率,防止过快

5.2 索引访问交叉影响

建议先新建好dist索引

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

暂无图片
获得了51次点赞
暂无图片
内容获得12次评论
暂无图片
获得了87次收藏
目录
  • 1.重建索引需求背景
    • 1.1 集群版本升级
    • 1.2 集群迁移
    • 1.3 索引分片数量调整
    • 1.4 索引文档结构变更
  • 2.常用重建索引方式
    • 2.1 Reindex初识
    • 2.2 Url参数解读
    • 2.3 Request body参数解读
    • 2.4 Response 参数解读
    • 2.5 重建索引任务管控
  • 3.高级索引重建方式
    • 3.1 单秒数据量阈值控制
    • 3.2人工切片
    • 3.3 自动切片
    • 3.4 限制reindex重建数据的范围
      • 3.4.1 query
      • 3.4.2 max docs
    • 3.5 多索引重建
    • 3.6 限制重建索引数据字段
    • 3.7 字段重命名
    • 3.8 修改原始文档数据
  • 4.跨集群索引重建
  • 5.索引重建注意事项
    • 5.1 数据量阈值控制
    • 5.2 索引访问交叉影响