在一个 Elasticsearch HTTP 请求 (cURL) 中删除多个索引



我正在使用这个curl命令行来清理我的索引:

curl -XDELETE http://example.com/my_index-*

但是,现在,我想删除my_index-.*[.][0-3][0-9]

  • 仅删除my_index-YYYY.MM.dd
  • 保持my_index-YYYY.MM.dd-*

我找到的相关 Elasticsearch 文档:

  • 删除索引 API 对正则表达式没有任何说明。

  • 多个指数 说:

    它还支持通配符,例如:test**testte*t*test*,以及"添加"(+(和"删除"(-(的能力,例如:+test*,-test3

  • 索引名称中的日期数学支持 说:

    几乎所有具有index参数的 API 都支持index参数值中的日期数学运算。
    [...]
    date_format是呈现计算日期的可选格式。默认为YYYY.MM.dd


我的问题:

  • 是否可以向Elasticsearch HTTP服务器发送DELETE请求方法以删除仅格式化my_index-YYYY.MM.dd的索引?
  • 或者相反,删除所有my_index-*但保留my_index-*-*

例如,有时可以在POST数据中提供正则表达式:

curl -XPOST http://example.com/my_index-2017.07.14/_search?pretty' -H 'Content-Type: application/json' -d'
{
"suggest": {
"song-suggest" : {
"regex" : "n[ever|i]r",
"completion" : {
"field" : "suggest"
}
}
}
}'

简答

删除除索引my_index-*-*之外的所有索引my_index-*

curl -X DELETE http://es.example.com/my_index-*,-my_index-*-*

没有正则表达式

Elasticsearch 5.x 不接受正则表达式或文件名模式?[a-z]选择多个索引。

但是,多索引文档允许+-包含和排除索引。

防止意外删除索引的脚本my_index-*-*

#!/bin/bash -xe
pattern="${1:-*}"
curl -X DELETE https://es.example.com/my_index-"$pattern",-my_index-*-*?pretty

解释

  • 参数index可以包含以逗号分隔的索引模式列表,例如my_index_1,my_index_2,my_index_3
  • 索引模式基于通配符,例如my_index*
  • 要包含和排除索引,请使用+-作为索引前缀,例如my_index_*,-my_index_2017*,+my_index_2017-01*,-my_index_2017-01-31
  • 不需要在第一个索引上使用+

描述的示例

DELETE请求删除my_index_2017-01-31之前my_index_*的所有索引

index_list='my_index_*,-my_index_2017*,+my_index_2017-01*,-my_index_2017-01-31'
curl -X DELETE http://es.example.com/"$index_list"
  • 删除所有my_index_*
  • my_index_2017*除外
  • 删除my_index_2017-01*
  • my_index_2017-01-31

最新更新