ElasticSearch无痛脚本用于重建索引

时间:2017-07-01 16:19:21

标签: elasticsearch

我们正在尝试使用以下无痛脚本来重新索引elasticsearch中的数据。

POST _reindex
{
  "source": {
    "index": "metricbeat-*"
  },
  "dest": {
    "index": "metricbeat"
  },
  "script": {
    "lang": "painless",
    "inline": "ctx._index = 'metricbeat-' + (ctx._index.substring('metricbeat-'.length(), ctx._index.length())) + '-1'"
  }
}

从以下网址获得: https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-reindex.html#_reindex_daily_indices

此脚本完美无缺,并创建了所有索引的另一个副本。 exa:如果我有原始索引为 metricbeat,2016年5月30日 运行此脚本后,它创建metricbeat-2016.05.30-1,它是原始索引的精确副本,即(metricbeat-2016.05.30)

现在我想做两件事:

1]删除原始索引,即metricbeat-2016.05.30
2]将重新索引的索引或原始索引的副本(即metricbeat-2016.05.30-1)重命名为metricbe5-2016.05.30,即原始索引。

我们怎么做? 我们可以修改上面的无痛脚本吗?

提前致谢!

2 个答案:

答案 0 :(得分:1)

我这样做的方式是像从Elasticsearch参考中的示例中那样重新索引,但是我没有在索引前附加“ temp-”:

POST _reindex
{
  "source": {
    "index": "metricbeat-*"
  },
  "dest": {
    "index": "metricbeat"
  },
  "script": {
    "lang": "painless",
    "source": "ctx._index = 'temp-' + ctx._index"
  }
}

这使使用“ metricbeat- *”模式删除原始索引更加容易:

DELETE metricbeat-*

然后我再次重新索引以获取原始名称:

POST _reindex
{
  "source": {
    "index": "temp-metricbeat-*"
  },
  "dest": {
    "index": "metricbeat"
  },
  "script": {
    "lang": "painless",
    "source": "ctx._index = ctx._index.substring(5)"
  }
}

请注意,Elasticsearch参考中的示例不必要地复杂:

ctx._index = 'metricbeat-' + (ctx._index.substring('metricbeat-'.length(), ctx._index.length())) + '-1'

使用以下代码可获得相同的结果:

ctx._index = ctx._index + '-1'

答案 1 :(得分:0)

您无法重命名索引。但是,删除原始索引后,可以使用aliases