我正在使用这个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*
或*test
或te*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