ElasticSearch恢复快照-重命名索引

xiozqbni  于 7个月前  发布在  ElasticSearch
关注(0)|答案(2)|浏览(81)

我想从一个快照中恢复所有索引,该快照具有要恢复为abc_yyy_indexName的模式abc_xxx_indexName。我试图通过ES的官方文档,但它只有一个更改索引名称的示例

POST _snapshot/my_repository/my_snapshot_2099.05.06/_restore
  {
  "indices": "my-index,logs-my_app-default",
  "rename_pattern": "(.+)",
  "rename_replacement": "restored-$1"
  }

字符串
如果您将logs-my_app-default数据流重命名为restored-logs-my_app-default,
但在我的情况下,这是没有用的,有人尝试过用正则表达式或脚本做这件事吗?

p8h8hvxi

p8h8hvxi1#

因此,这部分的工作方式是“rename_pattern”尝试匹配整个索引名称,如果匹配,则使用java regex规则将索引名称替换为替换。因此,要实现子字符串替换,您首先需要编写一个规则,该规则将匹配您的索引名称并捕获更改的部分。因此,假设在您的示例abc_xxx_indexName中,indexName是可变部分,其余部分是静态的,则您的abc_xxx_(.*?)将是abc_xxx_(.*?),因此这里我们匹配abc_xxx_并捕获indexName,因此在替换部分中,我们可以引用捕获的indexName$1。如果我们将这些合并组合在一起,我们将得到:

POST _snapshot/my_repository/my_snapshot_2099.05.06/_restore
{
  "indices": "def_xxx_index0,abc_xxx_index1,abc_xxx_index2",
  "rename_pattern": "abc_zzz_(.+)",
  "rename_replacement": "abc_yyy_$1"
}

字符串
此命令将执行恢复

  • def_xxx_index0作为def_xxx_index0,因为它与模式不匹配
  • abc_xxx_index1作为abc_yyy_index1
  • abc_xxx_index2作为abc_yyy_index2

在未来,请尝试使您的例子更加一致,他们都在你的地方abc_xxx_indexName在文本中是非常不同的logs-my_app-default,这是很难理解你实际上想要实现.你有-_和你有多少部分,等等.

lqfhib0f

lqfhib0f2#

如果我理解正确的话,abc_xxx是一个静态前缀。所以你可以试试这个:

POST _snapshot/my_repository/my_snapshot_id/_restore
{
  "indices": "my-index,logs-my_app-default",
  "rename_pattern": "abc_(.*?)_(.*?)",
  "rename_replacement": "abc_yyy_$2"
}

字符串

相关问题