一、删除单个索引
在elasticsearch中删除一个单独的索引非常简单。只需在delete API中指定索引名称即可。如下所示:
DELETE /index_name
您也可以使用一些其他参数,来指定要删除的索引类型:
DELETE /index_name/type_name
如果您不确定索引是否存在,您可以使用以下命令判断索引是否存在:
HEAD /index_name
如果索引存在,您将获得正确的响应码。如果不存在,您将获得404响应码。
二、删除多个索引
要同时删除多个索引,您可以使用_delete_by_query API。此API可用于根据查询条件删除多个文档和索引。
例如,要删除所有名称以“test”开头的索引,您可以执行以下请求:
POST /_delete_by_query { "query": { "wildcard": { "_index": "test*" } } }
三、定时删除索引
您可以在elasticsearch中创建定期删除索引的作业,以放置索引可能在过多时间上增大的问题。您可以使用curator,它是面向elasticsearch的Python库,可帮助管理索引。
创建一个新的Curator作业,以删除所有最近7天的索引。以下是curator.yml配置文件中的一些示例配置:
--- #在配置块中定义作业 actions: 1: action: delete_indices description: >- Delete indices older than 7 days. options: ignore_empty_list: True disable_action: False filters: - filtertype: pattern kind: prefix value: logstash- - filtertype: age source: name direction: older timestring: '%Y.%m.%d' unit: days unit_count: 7
四、删除所有索引
虽然不建议删除所有索引,但在某些情况下,这可能是必要的。以下命令可以删除所有索引:
DELETE /_all
五、删除索引前进行确认
您可以通过在删除索引之前进行确认来限制意外的删除。要启用此功能,请在elasticsearch.yml文件中设置以下配置:
action.destructive_requires_name: true
如果您尝试删除索引时未指定名称,则会得到以下错误:
{ "error": { "root_cause": [ { "type": "illegal_argument_exception", "reason": "[_all] DELETE with query params is not allowed unless concrete indices are specified" } ], "type": "illegal_argument_exception", "reason": "[_all] DELETE with query params is not allowed unless concrete indices are specified" }, "status": 400 }
六、删除索引时保留快照
如果要删除一个索引,但是想保留它的快照,则可以使用以下命令。这个命令会将一个快照保存在_elastic_search快照仓库中:
DELETE /index_name?snapshot=true&repository=snapshot_repository
七、删除索引时保留别名
如果要删除一个索引但想保留它的别名,则可以使用以下命令:
POST /_aliases { "actions" : [ { "remove" : { "index" : "index_to_delete", "alias" : "alias_name" } } ] }
总结
这篇文章详细介绍了elasticsearch中删除索引的各种方法,包括删除单个索引、删除多个索引、定时删除索引、删除所有索引等。我们还介绍了如何在删除索引之前进行确认,如何保留快照和别名。