在运行 _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/