Elasticsearch 2.3.5 索引之间通过查询复制数据的导出工具

Exporting tool to copy data by query between Elasticsearch 2.3.5 indexes

我需要使用查询从 ElasticSearch (ES) 中的一个索引中提取一些数据,并将它们复制到同一集群中的临时索引中。然后删除我从中提取数据的索引,并将临时索引重命名为删除索引的名称。

我知道最新版本的 ES 提供了一个内置的 delete-by-query 但我依赖于 ES v2.3.5,它通过安装 delete-by-query 插件提供相同的功能,但问题是我们有超过 20 个节点,我们必须在其中安装插件,然后重新启动我们想要避免的完整集群。

在 SO 中进行一些研究并通过谷歌搜索后,我发现了一个有趣的脚本工具,ElasticDump

而且看起来也很有趣ElasticSearch-Exporting

但我想要一些意见来自已经使用过其中一些的人或一些其他有趣的选择

我必须对大约 100 个索引执行相同的操作:为 index1 提取数据 -> 将这些数据复制到临时索引 -> 删除 index1 - 将临时索引重命名为 index1,因此欢迎使用可以自动化该过程的工具.无论如何,我知道我可以创建一个 bash 脚本,例如使用 ElasticDump 在这 100 个索引中的每一个中重复该过程。

提前致谢

使用 _reindex API 创建新索引。

在旧索引上创建别名并在您的应用程序中使用该别名。当您想要创建新索引时,只需将旧索引重新索引到具有不同名称的新索引中即可。 _reindex 完成后,您可以通过一个原子操作从旧索引中删除别名并将其添加到新索引中。像这样:

curl -XPOST 'http://localhost:9200/_aliases' -d '
{
    "actions" : [
        { "remove" : { "index1" : "test1", "alias" : "alias1" } },
        { "add" : { "index2" : "test1", "alias" : "alias1" } }
    ]
}'

这应该可以确保您在索引切换过程中不会停机。切换别名后,您可以随时删除旧索引。 参见:https://www.elastic.co/guide/en/elasticsearch/guide/current/index-aliases.html