19

我正在使用这个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*or*testte*tor *test*,以及“添加” ( +) 和“删除” ( -) 的功能,例如:+test*,-test3.

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

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

    date_formatYYYY.MM.dd


我的问题:

  • 是否可以向DELETEElasticsearch HTTP 服务器发送请求方法以删除仅格式化的索引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"
            }
        }
    }
}'
4

1 回答 1

36

简短的回答

删除索引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*.
  • 要包含和排除索引,请使用+and-作为索引前缀,例如my_index_*,-my_index_2017*,+my_index_2017-01*,-my_index_2017-01-31.
  • 不需要+在第一个索引上使用

描述的例子

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

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
于 2017-07-07T07:23:54.790 回答