从ElasticSearch中删除数据

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

DELETE FROM [Index]

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

   http://localhost:9200/[indexName]

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

831018 次浏览

你必须发送DELETE请求到

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

你也可以删除单个文档:

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

我建议你使用elastichammer

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

好运!

您可以使用cURL或使用开源爱好者为Elasticsearch创建的许多工具中的任何一个进行可视化删除。

使用旋度

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。

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

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

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

Powershell:

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

对于通过查询批量删除,你可以使用特殊的通过查询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中!

文档(或权威指南)表示,您还可以使用下一个查询删除所有索引:

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

这里有一个重要的提示:

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

action.destructive_requires_name: true

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

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

然而,对于上述查询,您需要安装Elasticsearch的2.0.0-beta1删除查询删除插件

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/

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

  • 如果你运行在AWS ElasticSearch服务你不能删除索引不是删除索引,而是必须重新索引它们

在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')
#list all index:       curl -XGET http://localhost:9200/_cat/indices?v

enter image description here

#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有一个更智能的开发工具,可以帮助您轻松地构建查询。

enter image description here

我想删除logstash索引,并搜索了很多关于curl等不同工具的信息。但最后找到了解决方案。 登录到Kibana。转到Dev Tools选项卡,在查询字段中输入DELETE /logstash-*,然后点击绿色箭头按钮。如果你得到“acknowledge”:true作为响应,这意味着数据已被清除

最简单的方法!

Endpoint :
http://localhost:9201/twitter/_delete_by_query


Payload :
{
"query": {
"match": {
"message": "some message"
}
}
}

哪里twitter是弹性搜索的索引

裁判;https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete-by-query.html

你可以删除整个索引,文档类型或特定id数据。 这是三种方法:

  1. curl -XDELETE localhost:9200/index_name

  2. curl -XDELETE localhost:9200/index_name/doc-type

  3. curl -XDELETE localhost:9200/index_name/doc-type/ documententid

如果你想删除所有索引,那么使用通配符。

你也可以在'elasticsearch head' (Chrome插件)中使用delete操作删除索引。将它添加到你的chrome浏览器并连接到你的主机。在那里,你会发现所有的索引,如果你点击下面的动作按钮,你想删除的索引,你会发现一个删除选项下拉。点击它,并在弹出框中输入DELETE。您的索引将被删除。'Elasticsearch head'扩展是一个查看和管理索引和数据的简单方法。

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

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

你可能会发现所有以logstash-yyyy-mm-dd格式开头的索引(logstash-*)

你可以看到所有的索引和使用

使用以下命令删除索引和数据触发器。

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

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

如果在应用程序中使用SSL证书,则将http更改为https

你也可以使用chrome扩展elasticsearch-head删除索引

可以通过Kibana Console删除索引:

控制台图标

获取所有索引:

GET /_cat/indices?v

删除指定索引。

DELETE /INDEX_NAME_TO_DELETE

你可以删除一个或多个索引,这实际上是从磁盘上删除它们的文件。例如:

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"
}
}
}'

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

将导致{ “acknowledge”:正确 } > < /强。< / p >

你可以试试这个curl:

curl --location --request DELETE 'http://<username>:<password>@<url>:9200/<index name>/<doc type>/<document id>

或者如果你不想在URL上设置用户名和密码,那么也可以尝试这个curl:

curl --location --request DELETE 'http://<url>:9200/<index name>/<doc type>/<document id>' --header 'Authorization: Basic <Base64 encoded username:password>'

执行后,响应体将包含result字段。如果这个字段的值是deleted,那么它意味着文档删除成功。

在这个curl中,我假设你已经配置了你的elastic来使用http。如果您正在使用https,只需将协议更改为https

删除所有索引的python脚本:

import requests
import json


ES_HOST = "http://localhost:9200"
ES_URL = f"{ES_HOST}/_cat/indices?format=json"


indexes = requests.get(ES_URL).content
indexes = json.loads(index.decode())


for i in index:
index_name = i['index']
content = requests.delete(f"{ES_HOST}/{index_name}").content
print(content)

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

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

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

我使用开发工具删除数据

POST <index_name>/_delete_by_query
{
"query": {
"match_all": {}
}
}

例子

POST vehicle-data/_delete_by_query
{
"query": {
"match_all": {}
}
}

我使用Kibana作为查看和搜索弹性搜索数据的工具,我推荐它基于良好的用户体验。

以下查询将有助于从弹性搜索中删除数据

Case 1:如果你知道数据行的id:

DELETE /index_name/_doc/{id}

Case 2:根据列值进行删除: 假设我有一个名为abc的列,

现在,我必须获得基于column_name的_id字段,以便最终删除该行。

GET /uts_checkout_configurations/_search { "query" : { "constant_score" : { "filter" : { "bool": { "must": {"exists": {"field": "ABC"}} } } } } }

最后,您将获得包含_id作为字段之一的数据。

根据-删除

DELETE /index_name/_doc/{_id}