我想从ElasticSearch中删除数据。我已经删除了索引。然而,这似乎并没有真正删除数据本身。我看到的其他东西指向通过查询删除功能。然而,我甚至不知道该问什么。我知道指数。本质上,我想知道如何做a

DELETE FROM [Index]

从邮递员在Chrome。然而,我没有任何运气。似乎无论我做什么,数据都不会消失。到目前为止,我已经成功地删除索引使用DELETE HTTP动词在邮差和使用一个url:

   http://localhost:9200/[indexName]

然而,这似乎并没有真正删除数据(又名文档)本身。


当前回答

如果你需要删除所有索引,这可能会派上用场:

curl -X DELETE 'http://localhost:9200/_all'

Powershell:

Invoke-WebRequest -method DELETE http://localhost:9200/_all

其他回答

在python中可以这样删除索引

from elasticsearch import Elasticsearch

es = Elasticsearch([{'host':'localhost', 'port':'9200'}])

es.index(index='grades',doc_type='ist_samester',id=1,body={
    "Name":"Programming Fundamentals",
    "Grade":"A"
})

es.indices.delete(index='grades')

假设我需要删除索引filebeat-7.6.2-2020.04.30-000001,我使用curl delete选项执行它(curl -X delete "localhost:9200/filebeat-7.6.2-2020.04.30-000001?pretty"),并导致如下所示的身份验证问题;

{
  "error" : {
    "type" : "security_exception",
    "reason" : "missing authentication credentials for REST request [/filebeat-7.6.2-2020.04.30-000001?pretty]"
  },
  "status" : 401
}

在这里,您应该使用为Elasticsearch提供的用户名和密码对curl请求进行身份验证。然后试着

curl -X DELETE -u myelasticuser:myelasticpassword "localhost:9200/filebeat-7.6.2-2020.04.30-000001?漂亮”

将导致{ “acknowledge”:正确 }。

添加delete_by_query建议,如果您想快速删除给定索引中的所有记录,设置scroll_size和conflicts参数可能也很重要。

滚动的大小 在尝试同时删除多个文档时,使用较小的滚动尺寸以避免请求超时是很有用的。 冲突 在批量删除过程中忽略冲突是很有用的,因为如果一次删除太多记录,版本冲突是很常见的。


 POST http://localhost:9200/my-index-000001/_delete_by_query?scroll_size=100&conflicts=proceed
 {
   "query": {
       "match_all": {}
    }
 }

1. 删除火

从指定索引中移除文档。

DELETE /<index>/_doc/<_id>

例子:

DELETE http://localhost:9200/my-index-000001/_doc/1

参考:ES指南>>删除API

2. 通过查询API删除

删除与指定查询匹配的文档。

例子:

POST http://localhost:9200/my-index-000001/_delete_by_query
{
  "query": {
      "match": {
           "user.id": "elkbee"
      }
   }
}

参考:ES指南>>根据查询API删除

文档(或权威指南)说,你也可以使用下一个查询删除所有索引:

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

这里有一个重要的提示:

对于一些人来说,用一个命令就能删除所有数据是一个非常可怕的前景。如果您想消除意外批量删除的可能性,您可以在elasticsearch.yml中将以下设置为true: action.destructive_requires_name:真