ChatGPT解决这个技术问题 Extra ChatGPT

从 ElasticSearch 中删除数据

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

DELETE FROM [Index]

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

   http://localhost:9200/[indexName]

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

我和邮递员核对了一下,得到的回复是 "{"acknowledged": true }" 如果您看到这个已确认的回复,请不要担心。索引从弹性中删除。

J
Jeroen Vannevel

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

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

电源外壳:

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

这对于开发和需要重置回临时(空)数据库非常有用。谢谢!!
在你的 bash_profile 中为这个命令创建一个别名,它将在开发中派上用场。
'不允许通配符表达式或所有索引'
请注意,这将删除所有数据,包括您的 x-pack 访问凭据。
这也会删除 Kibana 仪表板和可视化
N
Nathan Smith

您可以使用 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* 

视觉上

上面提到了各种工具,我不会在这里列出它们,但我会将您链接到一个可以让您立即开始使用的工具,它位于 here。这个工具叫做 KOPF,要连接到你的主机,请点击左上角的标志并输入你的集群的 URL。

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


有什么办法可以删除我知道的 3 个文档。
@JayeshJain 据我目前所知,没有。您可以将 3 个修改后的 curl -XDELETE 命令放入 bash 脚本中,然后依次执行或运行 3 个。
@JayeshJain 所以 curl -XDELETE localhost:9200/index/type/docid1 // curl -XDELETE localhost:9200/index/type/docid2 // curl -XDELETE localhost:9200/index/type/docid3
我也是这样做的。但我只是在想是否有更聪明的方法来删除多个文档。如果我知道这个领域,我可以使用术语。但在这种情况下,我只需要按他们的 id 删除文档。无论如何谢谢
如何删除包含无效字符的索引,例如 logstash-eu-%{customer}-2016.11.22。我想删除所有索引 logstash-eu-%{customer}-* 或 logstash-eu-%*
C
Community

documentation(或 The Definitive Guide)表示,您还可以使用下一个查询来删除 all 索引:

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

还有一个重要的说明:

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


P
Prasad Khode

您必须发送 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/

祝你好运!


删除超过 10 天的索引的方法是什么?我不能使用 curator,因为我的服务器不受支持。
V
Vaisakh VM
#list all index:       curl -XGET http://localhost:9200/_cat/indices?v 

https://i.stack.imgur.com/7CK5P.png

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

https://i.stack.imgur.com/kpXdU.png


删除超过 10 天的索引的方法是什么?我不能使用 curator,因为我的服务器不受支持。
B
Bojan B

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

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

但是对于上述查询,您需要安装按查询删除插件,因为 Elasticsearch 的 2.0.0-beta1 按查询删除已从主 api 中删除

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 和方法的处理程序”。
这在 Elasticsearch 6+ 中不起作用。请改用 _delete_by_query。
R
RobC
curl -X DELETE 'https://localhost:9200/_all'

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


F
FChiri

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

https://i.stack.imgur.com/UqxUc.png

获取所有索引:

GET /_cat/indices?v

要删除特定索引:

DELETE /INDEX_NAME_TO_DELETE

k
kgf3JfUtW

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

E
Edwin O.

最简单的方法!

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


s
sandip

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

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

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

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

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

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


H
Hubbitus

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

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

在历史上,API 被删除然后重新引入

谁有趣它有悠久的历史。

在该答案的第一个版本中,我参考了 elasticsearch 1.6 版的文档。在其中,该功能被标记为已弃用,但效果很好。在 elasticsearch 2.0 版中,它被移到了单独的插件中。甚至解释了它成为插件的原因。它再次出现在 5.0 版的核心 API 中!


小心使用按查询删除。它被弃用的一个主要原因。内存不足错误!
当然。但是如果它发生在你身上或者你有足够的记忆力,你可能会窥探。
G
Gaurav

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

curl -XDELETE localhost:9200/index_name curl -XDELETE localhost:9200/index_name/doc-type curl -XDELETE localhost:9200/index_name/doc-type/documentId

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


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

1.删除API

从指定索引中删除文档。

DELETE /<index>/_doc/<_id>

例子:

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

参考:ES Guide >> Delete API

2.通过查询API删除

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

例子:

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

参考:ES Guide >> Delete by query API


M
Manfred Radlwimmer

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


谢谢你!!!我尝试了许多其他选择——这是唯一对我有用的选择。
F
Facundo La Rocca

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

如果您在 AWS ElasticSearch 服务上运行,则无法删除/删除索引。您必须重新索引它们,而不是删除索引。


刚刚删除了 AWS ElasticSearch 上的一个索引,我的域正在运行 ES 5.1。
在 AWS ES 上,您无法打开/关闭索引 - 这需要重新索引。但是,您可以删除索引。我只通过 Kibana 控制台完成了它,但它确实有效。
p
prateek kumar

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


R
Radu Gheorghe

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

curl -XDELETE localhost:9200/$INDEXNAME

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

可以删除单个文档,但这不会立即清除它们。删除只是软删除,并且在 segment merges 期间确实删除了文档。您会在 this presentation 中找到有关分段和合并的大量详细信息。这是关于 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"
    }
  }
}'

f
funbrain9

您还可以使用 chrome 扩展 elasticsearch-head 删除索引


K
Kishor U

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

{
  "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 }。


o
otaviocarvalho

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

滚动大小 在尝试同时删除多个文档时,使用较小的滚动大小来避免请求超时很有用。

尝试同时删除多个文档时,使用较小的滚动大小来避免请求超时很有用。

冲突 在批量删除期间忽略冲突很有用,因为如果一次删除太多记录,版本冲突很常见。

在批量删除期间忽略冲突很有用,因为如果一次删除太多记录,版本冲突很常见。

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

S
Sachitha Hirushan

我使用开发工具删除数据

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

例子

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

V
Vahid Farahmandian

您可以试试这个 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 中,我假设您已将弹性配置为使用 http。如果您使用 https,只需将协议更改为 https


T
Tlaloc-ES

用于删除所有索引的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)

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅