从ElasticSearch删除数据


361

我是ElasticSearch的新手。我试图弄清楚如何从ElasticSearch中删除数据。我已删除索引。但是,这似乎并没有真正删除数据本身。我看到的其他内容指向“ 按查询删除”功能。但是,我什至不知道要查询什么。我知道我的索引。本质上,我想弄清楚如何做

DELETE FROM [Index]

来自Chrome中的PostMan。但是,我没有运气。看来,无论我做什么,数据都会徘徊。到目前为止,我已经通过在PostMan中使用DELETE HTTP Verb并使用如下网址成功删除了索引:

   http://localhost:9200/[indexName]

但是,这似乎并没有实际删除数据(aka文档)本身。


我与邮递员核对了此信息,并以“ {{“ acknowledged”:true}“的方式收到回执。如果您看到此已确认的回复,请不要担心。该索引已从弹性中删除。
bijayk

Answers:


428

您可以使用cURL开源爱好者为Elasticsearch创建的众多工具中的一种,也可以使用直观地进行删除。

使用cURL

curl -XDELETE localhost:9200/index/type/documentID

例如

curl -XDELETE localhost:9200/shop/product/1

然后,您将收到有关此操作是否成功的答复。您可以删除整个索引或带有索引的类型,也可以通过省略文档ID来删除类型,如下所示-

curl -XDELETE localhost:9200/shop/product

如果您要删除索引-

curl -XDELETE localhost:9200/shop

如果要删除多个遵循某种命名约定的索引(请注意*,通配符),-

curl -XDELETE localhost:9200/.mar* 

视觉上

有各种工具,如上面提到的,我不会在这里一一列举了,但我会联系你一个使您能够得到马上开始,位于这里。此工具称为KOPF,要连接到主机,请单击左上角的徽标,然后输入群集的URL。

连接后,您将能够管理整个集群,删除,优化和调整集群。


有什么办法可以删除我知道的3个文档。
HIRA THAKUR 2015年

@JayeshJain据我所知,不。您可以将3个修改过的curl -XDELETE命令放入bash脚本中,然后一个接一个地执行或运行3个。
Opster Elasticsearch-弥敦道

@JayeshJain so curl -XDELETE本地主机:9200 / index / type / docid1 // curl -XDELETE本地主机:9200 / index / type / docid2 // curl -XDELETE本地主机:9200 / index / type / docid3
Opster Elasticsearch-Nathan

我用同样的方式做。但是我只是在想是否有删除多个文档的更聪明的方法。如果我知道这一领域,我可以使用术语。但是在这种情况下,我只需要按其ID删除文档即可。无论如何
HIRA THAKUR 2015年

2
如何删除带有无效字符的索引,例如,logstash-eu-%{customer} -2016.11.22。我想删除所有索引logstash-eu-%{customer}-*或logstash-eu-%*
Chris F

459

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

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

电源外壳:

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

20
这对于开发以及需要重设回临时(空)数据库非常有用。谢谢!!
Artistan 2015年

3
在您的bash_profile中,为此命令创建一个别名,它将很方便进行开发。
user805981 '16

2
“不允许使用通配符表达式或所有索引”
ZurabWeb

1
请注意,这将删除所有数据,包括您的x-pack访问凭据。
加茹斯(Gajus)

2
这也删除了Kibana的仪表板和可视化文件
纳米

54

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

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

还有一个重要的注意事项:

对于某些人来说,使用单个命令删除所有数据的能力是一个非常可怕的前景。如果你想消除一个偶然的质量缺失的可能性,你可以设置以下到trueelasticsearch.yml

action.destructive_requires_name: true


30

您必须向发送DELETE请求

http://[your_host]:9200/[your_index_name_here]

您还可以删除单个文档:

http://[your_host]:9200/[your_index_name_here]/[your_type_here]/[your_doc_id]

我建议您使用弹性锤

删除后,您可以使用以下URL查找索引是否仍然存在: http://[your_host]:9200/_stats/

祝好运!


删除超过10天的索引的方法是什么?我无法使用管理器,因为我的服务器不受支持。
biolinh

17

删除索引将删除映射和类型。您可以通过以下查询删除所有行

curl -XDELETE 'localhost:9200/twitter/tweet/_query?pretty' -d'
{
   "query": { 
      "match_all": 
   }
}'

但是对于上述查询,您需要安装从Elastic API的2.0.0-beta1 delete-by-query删除的查询删除插件

Install delete-by-query plugin

sudo bin/plugin install delete-by-query

欲了解更多

http://blog.appliedinformaticsinc.com/how-to-delete-elasticsearch-data-records-by-dsl-query/


在安装插件并重新启动ES之前和之后,我都会收到“找不到uri和method的处理程序”。

这在Elasticsearch 6+中不起作用。请改用_delete_by_query。
Shailesh Pratapwar

17
#list all index:       curl -XGET http://localhost:9200/_cat/indices?v 

在此处输入图片说明

#delete index:         curl -XDELETE 'localhost:9200/index_name'
#delete all indices:   curl -XDELETE 'localhost:9200/_all'
#delete document   :   curl -XDELETE 'localhost:9200/index_name/type_name/document_id'

安装kibana。Kibana具有更智能的开发工具,可帮助轻松构建查询。

在此处输入图片说明


1
删除超过10天的索引的方法是什么?我无法使用管理器,因为我的服务器不受支持。
biolinh


8

您可以按如下所示在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')


7

对于按查询批量删除,您可以使用特殊的按查询删除API

$ curl -XDELETE 'http://localhost:9200/twitter/tweet/_query' -d '{
    "query" : {
        "term" : { "user" : "kimchy" }
    }
}

历史上曾删除过API,然后又重新引入了

谁很有趣,历史悠久。

  1. 在该答案的第一个版本中,我指的是Elasticsearch 1.6版的文档。在该功能中,该功能被标记为已弃用,但效果很好。
  2. Elasticsearch 2.0版中,它已移至单独的插件。甚至解释了为什么它成为插件的原因。
  3. 再次出现在5.0版的核心API中

3
请小心使用按查询删除。不推荐使用它的主要原因是。OutOfMemoryError!
user3658423

当然。但是,如果这件事发生在您身上,或者您记忆犹新,您可能会间谍。
哈比图斯


5

我想删除logstash索引,并搜索了很多有关curl等不同工具的信息。但是最后找到了解决方案。登录到Kibana。转到开发工具选项卡,然后DELETE /logstash-*在查询字段中键入并单击绿色箭头按钮。如果得到“确认”:则为真,表示已清除数据。


谢谢!!!我尝试了许多其他选择-这是唯一为我工作的选择。
eladyanai

5

列出索引 curl -L localhost:9200/_cat/indices

9200 默认端口[如果使用其他端口,请更改端口]

您可能会发现所有以logstash-yyyy-mm-ddformat(logstash- *)开头的索引

您可以查看所有索引并使用

要删除索引和数据,请触发以下命令。

curl -XDELETE localhost:9200/index_name (这将同时删除数据和索引)。


4

这里有很多好的答案,但是我想补充一下:

  • 如果您在AWS ElasticSearch服务上运行,则无法删除/删除索引代替删除索引,必须重新索引它们

刚刚删除了AWS ElasticSearch上的索引,我的域正在运行ES 5.1。
gazarsgo

2
在AWS ES上,您无法打开/关闭索引-需要重新索引。但是,您可以删除索引。我仅通过Kibana控制台完成了此操作,但它确实可以工作。
汤姆·杜法

4

您可以删除整个索引,doc类型或特定的id数据。这是三种方式:

  1. curl -XDELETE本地主机:9200 / index_name

  2. curl -XDELETE本地主机:9200 / index_name / doc-type

  3. curl -XDELETE本地主机:9200 / index_name / doc-type / documentId

如果您想删除所有索引,请使用通配符。


嗨,我希望在执行查询之前,您开始进行弹性搜索,并确保默认情况下绑定到所有本地地址。而不是localhost,您也可以使用您的IP地址。像10.80.15.45:9200一样,一旦检查了ES设置,我就可以考虑检查network.bind_host并确保它未设置或设置为0.0.0.0或:: 0或网络的正确IP地址。
盖拉夫

3

您还可以使用“ elasticsearch head”(Chrome插件)中的DELETE操作删除索引。将其添加到您的Chrome浏览器,然后将其连接到主机。在那里,您会找到所有索引,如果单击要删除的索引下方的“操作”按钮,则会在下拉列表中找到DELETE选项。单击它,然后在弹出窗口中输入DELETE。您的索引将被删除。“ Elasticsearch head”扩展名是查看和管理索引和数据的简便方法。


2

您可以使用Chrome扩展名Elasticsearch-head删除索引


2

您可以通过Kibana控制台删除索引:

控制台图标

要获取所有索引:

GET /_cat/indices?v

要删除特定索引:

DELETE /INDEX_NAME_TO_DELETE

1

您可以删除一个或多个索引,这实际上会从disk删除它们的文件。例如:

curl -XDELETE localhost:9200/$INDEXNAME

其中$INDEXNAME可以是索引名称(例如users_v2),N个索引用逗号分隔(例如users_v2,users_v3)。索引模式(例如users_*)或_all,也可以使用,除非它在配置中通过阻止action.destructive_requires_name: true

可以删除单个文档,但这不会立即清除它们。删除仅是软删除,并且在段合并期间确实删除了文档。在此演示文稿中,您将找到有关细分和合并的许多详细信息。它与Solr有关,但是合并来自Lucene,因此您在Elasticsearch中具有相同的选项。

返回API,您可以按ID删除单个文档(如果您使用工艺路线编制索引,请提供工艺路线值):

curl -XDELETE localhost:9200/users_v2/_doc/user1

或通过查询:

curl -XPOST -H 'Content-Type: application/json' localhost:9200/users_v2/_delete_by_query -d '{
  "query": {
    "match": {
      "description_field": "bad user"
    }
  }
}'

0

假设我需要删除索引,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?pretty"

将产生{“ acknowledged”:true}

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.