elasticsearch 索引间数据同步

1、普通索引复制

POST _reindex
{
  "source": {
    "index":"old_index"
  },
  "dest": {
    "index": "new_index"
  }
}

2、批量复制优化

POST _reindex
{
  "source": {
    "index": "source",
    "size": 5000
  },
  "dest": {
    "index": "dest"
  }
}

3、提高scroll的并行度优化

POST _reindex?slices=5&refresh
{
  "source": {
    "index": "twitter"
  },
  "dest": {
    "index": "new_twitter"
  }
}

4、条件查询以及部分字段同步

{
  "source": {
    "index": "maindata",
    "_source": [
      "dataId",
      "website",
      "source",
      "author",
      "dataExist",
      "id",
      "teamId",
      "tonalState",
      "createTime",
      "judgeMark"
    ],
    "query": {
      "match_phrase": {
        "teamId": 3
      }
    }
  },
  "dest": {
    "index": "maindatagroup",
    "version_type": "internal"
  }
}

slices大小设置注意事项:
1)slices大小的设置可以手动指定,或者设置slices设置为auto,auto的含义是:针对单索引,slices大小=分片数;针对多索引,slices=分片的最小值。
2)当slices的数量等于索引中的分片数量时,查询性能最高效。slices大小大于分片数,非但不会提升效率,反而会增加开销。
3)如果这个slices数字很大(例如500),建议选择一个较低的数字,因为过大的slices 会影响性能。
效果
实践证明,比默认设置reindex速度能提升10倍+。

5、覆盖更新

说明:
"version_type": "internal",internal表示内部的,省略version_type或version_type设置为 internal 将导致 Elasticsearch 盲目地将文档转储到目标中,覆盖任何具有相同类型和 ID 的文件。
这也是最常见的重建方式。

POST _reindex
{
  "source": {
    "index": "twitter"
  },
  "dest": {
    "index": "new_twitter",
    "version_type": "internal"
  }
}

6、根据条件索引复制

POST _reindex
{
  "source": {
    "index": "old_index",
    "query": {
        "range": {
            "createTime": {
                "lte": "2022-07-14T10:06:13+08:00"
            }
        }
    },
    "excludes": [ "column1","column2" ] //排除字段
  },
  "dest": {
    "index": "new_index",
    "version_type": "internal"
  }
}

7、从远程中重建索引

POST _reindex
{
  "source": {
    "remote": {
      "host": "http://otherhost:9200",
      "username": "user",
      "password": "pass",
      "socket_timeout": "1m",
      "connect_timeout": "10s"
    },
    "index": "source",
    "query": {
      "match": {
        "test": "data"
      }
    }
  },
  "dest": {
    "index": "dest"
  }
}

8、超时问题

es中的请求超时时间默认是1分钟,当重建索引的数据量太大时,经常会出现超时。这种情况可以增大超时时间,也可以添加wait_for_completion=false参数将请求转为异步任务。

POST _reindex?slices=9&refresh&wait_for_completion=false
{
  "source": {
    "index": "twitter"
  },
  "dest": {
    "index": "new_twitter"
  }
}

1)获取reindex任务列表

GET _tasks?detailed=true&actions=*reindex

2)根据任务id查看任务

GET _tasks/r1A2WoRbTwKZ516z6NEs5A:36619

3)取消任务

POST _tasks/r1A2WoRbTwKZ516z6NEs5A:36619/_cancel

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值