您的位置:

详解elasticsearch删除索引

一、删除单个索引

在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中删除索引的各种方法,包括删除单个索引、删除多个索引、定时删除索引、删除所有索引等。我们还介绍了如何在删除索引之前进行确认,如何保留快照和别名。