ElasticSearch必知必会-Reindex重建索引

京东云开发者
• 阅读 422

作者: 京东物流 康睿

1.重建索引需求背景

1.1 集群版本升级

ES版本兼容性

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

ElasticSearch必知必会-Reindex重建索引

1.2 集群迁移

集群索引迁移

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

1.3 索引分片数量调整

分片数量变更

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

ElasticSearch必知必会-Reindex重建索引

1.4 索引文档结构变更

文档结构变更

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

ElasticSearch必知必会-Reindex重建索引

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,脚本处理,修改原索引信息后再写入新索引 ElasticSearch必知必会-Reindex重建索引

2.4 Response 参数解读

响应参数

  1. 成功数
  2. 更新数
  3. 新增数
  4. 失败数 ElasticSearch必知必会-Reindex重建索引

2.5 重建索引任务管控

任务管控必要性

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

任务管控API

  1. _tasks,服务端API ElasticSearch必知必会-Reindex重建索引

3.高级索引重建方式

3.1 单秒数据量阈值控制

单秒数据量控制

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

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


ElasticSearch必知必会-Reindex重建索引

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字段名称原始是不允许修改的,但通过脚本可以操作 ElasticSearch必知必会-Reindex重建索引

3.8 修改原始文档数据

修改原始文档数据

  1. 基于脚本 ElasticSearch必知必会-Reindex重建索引

4.跨集群索引重建

跨集群操作

  1. 基于集群通信,类同远程机制
  2. 需设置跨集群白名单,配置在dist集群 ElasticSearch必知必会-Reindex重建索引

5.索引重建注意事项

5.1 数据量阈值控制

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

5.2 索引访问交叉影响

建议先新建好dist索引

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
添砖java的啾 添砖java的啾
3年前
distinct效率更高还是group by效率更高?
目录00结论01distinct的使用02groupby的使用03distinct和groupby原理04推荐groupby的原因00结论先说大致的结论(完整结论在文末):在语义相同,有索引的情况下groupby和distinct都能使用索引,效率相同。在语义相同,无索引的情况下:distinct效率高于groupby。原因是di
Wesley13 Wesley13
3年前
PPDB:今晚老齐直播
【今晚老齐直播】今晚(本周三晚)20:0021:00小白开始“用”飞桨(https://www.oschina.net/action/visit/ad?id1185)由PPDE(飞桨(https://www.oschina.net/action/visit/ad?id1185)开发者专家计划)成员老齐,为深度学习小白指点迷津。
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Wesley13 Wesley13
3年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Stella981 Stella981
3年前
Jenkins 插件开发之旅:两天内从 idea 到发布(上篇)
本文首发于:Jenkins中文社区(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fjenkinszh.cn)!huashan(https://oscimg.oschina.net/oscnet/f499d5b4f76f20cf0bce2a00af236d10265.jpg)
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Stella981 Stella981
3年前
ELK学习笔记之ElasticSearch的索引详解
0x00ElasticSearch的索引和MySQL的索引方式对比Elasticsearch是通过Lucene的倒排索引技术实现比关系型数据库更快的过滤。特别是它对多条件的过滤支持非常好,比如年龄在18和30之间,性别为女性这样的组合查询。倒排索引很多地方都有介绍,但是其比关系型