我需要使用ElasticSearch(ES)中一个索引的查询提取一些数据,然后将它们复制到同一个集群中的临时索引中。然后删除我从中提取数据的索引,并将临时值重命名为已删除索引的名称。
我知道ES的最新版本提供了内置delete-by-query
,但我与ES v2.3.5绑定,它通过安装delete-by-query
插件提供相同的功能,但问题是我们有超过20个节点,我们必须安装插件,然后进行完整的集群重启,我们要避免。
经过SO搜索和谷歌搜索后,我发现了一个有趣的脚本工具,ElasticDump
而且看起来很有趣ElasticSearch-Exporting
但是我希望某些已经使用其中一些意见或其他一些有趣的选项。
我必须为大约100个索引执行相同的操作:提取index1的数据 - >将这些数据复制到临时索引 - > delete index1 - 将临时索引重命名为index1,因此欢迎可以自动化该过程的工具。无论如何,我知道我可以使用例如ElasticDump
创建一个bash脚本来重复这100个索引中的每个索引。
提前致谢
答案 0 :(得分:1)
使用_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