Cane's Blog

Cane

【Linux】Elasticsearch删除索引

34
2022-03-02

1. 删除单条索引

  • curl

    curl -XDELETE http://localhost:9200/index_name
  • python

    import requests
    
    requests.delete('http://localhost:9200/index_name')

2. 删除所有索引

  • curl

    curl -XDELETE http://localhost:9200/_all
    
    curl -XDELETE http://localhost:9200/*

    如果提示错误

    {“error”: {“root_cause”: [ {“type”: “illegal_argument_exception”,“reason”: “Wildcard expressions or all indices are not allowed” } ],“type”: “illegal_argument_exception”,“reason”: “Wildcard expressions or all indices are not allowed” },“status”: 400}

    解决方法1:
    将ES的配置文件 elasticsearch.yml 中的

    action.destructive_requires_name = true
    改为
    action.destructive_requires_name = false

    解决方法2:
    PUT /_cluster/settings{"persistent" : {"action.destructive_requires_name":true }}
    然后重启 es

    解决方法3
    遍历 es 的 index_name,然后一个一个去利用 delete http://localhost:9200/index_name 的方法来进行删除

    for i in `curl -XGET 'http://localhost:9200/_cat/indices' | awk '{print $3}'`; do curl -XDELETE "http://localhost:9200/$i"; done
  • python

    1.通过GET http://localhost:9200/_cat/indices 获取所有 index_name
    2.将上一步拿到的 index_name 利用 `requests.delete()` 删除索引

3. 索引名称为特殊符号的删除

  • 利用 alias,给索引设置别名,然后通过删除别名的方式删除

    POST /_aliases
    {
        "actions" : [
            { "add" : { "index" : "中文索引名称", "alias" : "testcn" } }
        ]
    }
    
    DELETE /testcn
  • 将索引名 url 编码,通过 postman 或者 python 等其他工具进行删除(不能通过 curl 删除)

    requests.delete('http://localhost3:9200/%25{[@metadata][beat]}-2021.09.13')  # 索引首字母为%,通过url编码为%25