Elasticsearch reindex api - 无法复制所有文档

标签 elasticsearch elasticsearch-dsl

在运行 _reindex 操作之前,我已设置目标索引 new_dest_index,包括设置映射、分片计数、副本等。

我运行了下面的 POST 命令,将所有文档从 source_index 复制到 new_dest_index,但看起来它在后台运行,只复制部分文档,而不是来自 source_index 的所有数据。

有人可以帮忙吗?是否有更好的方法从一个索引复制到另一个索引?

POST _reindex
{
  "source": {
    "index": "source_index"
  },
  "dest": {
    "index": "new_dest_index"
  }
}

最佳答案

我认为这是从一个索引复制到另一个索引的最佳方式。

如果我没记错的话,reindex 过程每次都会从一个索引复制大量 10,000 个索引到另一个索引。您没有看到目标索引中的所有文档,因为任务尚未完成(在最好的情况下)。

您始终可以使用 _cat/tasks 列出重建索引任务像:

GET _cat/tasks?v

如果您在输出中看到 reindex 任务,则表明它尚未完成,您必须再等待一会儿。这些过程需要几分钟甚至几小时,具体取决于要复制的文档数量。

但是,如果您没有看到它列出,并且一个索引中的文档与另一个索引中复制的文档数量不匹配,则重新索引过程失败,必须再次运行.

当您想要不受限制地复制所有文档时,最后一种情况会很糟糕。

避免这种情况的一种方法是 reindex with Queries 。例如,您可以对一月到三月的所有文档运行一个 reindex 任务,对四月到六月的文档运行另一个任务,依此类推。

您可以运行多个重新索引任务,而不会重叠。请注意这一点,因为过多的任务可能会影响集群的性能或健康状况。

希望这对您有帮助! :)

关于Elasticsearch reindex api - 无法复制所有文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60664029/

相关文章:

elasticsearch - 使用docker-compose.yml设置系统属性

elasticsearch - 从ElasticSearch查询的日期字段中提取日期(yyyyMMdd)

elasticsearch-dsl - elasticsearch_dsl : Generate multiple buckets in aggregation

elasticsearch - 聚合返回所有值不做分组

elasticsearch - Elasticsearch术语查询作为子句中的mysql?

elasticsearch - 为 SynonymFilterFactory 术语赋予权重

elasticsearch - Elasticsearch-如何结合 bool 和范围过滤器

java - Elasticsearch : Retrieve long text field from a document

python - 使用elasticsearch-dsl-py进行范围聚合

python - 如何在 elasticsearch-dsl python 中启用 track_scores