database - 导出工具以在 Elasticsearch 2.3.5 索引之间通过查询复制数据

标签 database elasticsearch bigdata data-migration elasticsearch-dsl

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

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

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

而且看起来很有趣ElasticSearch-Exporting

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

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

关于database - 导出工具以在 Elasticsearch 2.3.5 索引之间通过查询复制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49188640/

相关文章:

performance - 在 BigQuery 中有效地获取每个日期每个 ID 过去 6 个月内所有以前日期的数组

python - Dask 数据帧如何处理大于内存的数据集?

hadoop - 如何从 HIVE 中的日期中减去月份

python - Elasticsearch 通过搜索返回拼音标记

python - 在 Pandas 数据框中将某些行向左移动

sql - 停止 SQL 代码执行

android - 如何通过 JSON 显示从 DB 到 Android 的所有值

elasticsearch - Elasticsearch mapper_parsing_exception 错误

elasticsearch - 从elasticsearch获得结果

带有 SQL 语法的 PHP 简单文本数据库