从ElasticSearch中删除数据

时间:2014-04-07 22:31:42

标签: elasticsearch

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

DELETE FROM [Index]

来自Chrome中的PostMan。但是,我没有运气。似乎无论我做什么,数据都会悬而未决。到目前为止,我已经使用PostMan中的DELETE HTTP Verb并使用类似的URL成功删除了索引:

   http://localhost:9200/[indexName]

但是,这似乎并没有真正删除数据(也称为文档)。

21 个答案:

答案 0 :(得分:382)

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

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

Powershell的:

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

答案 1 :(得分:329)

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

使用cURL

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

e.g。

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。

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

答案 2 :(得分:43)

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

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

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

  

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

     

action.destructive_requires_name: true

答案 3 :(得分:23)

您必须向

发送DELETE个请求
http://[your_host]:9200/[your_index_name_here]

您也可以删除单个文档:

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

我建议您使用elastichammer

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

祝你好运!

答案 4 :(得分:14)

删除索引将删除映射并键入。您可以通过以下查询删除所有行

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/

答案 5 :(得分:9)

#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

答案 6 :(得分:6)

您可以在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 :(得分:5)

最简单的方法!

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

答案 8 :(得分:4)

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

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

答案 9 :(得分:4)

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

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

在历史记录中,API已被删除,然后再次重新引入

有趣的是它有悠久的历史。

  1. 在该答案的第一个版本中,我引用了elasticsearch version 1.6的文档。在其中,该功能被标记为已弃用但效果良好。
  2. elasticsearch version 2.0 it was moved to separate plugin。甚至是它成为插件的原因explained
  3. again appeared in core API in version 5.0

答案 10 :(得分:4)

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

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

答案 11 :(得分:3)

我想删除logstash索引,并搜索了很多关于curl等不同工具的信息。但最终找到了解决方案。 登录Kibana。转到开发工具选项卡,在查询字段中键入DELETE /logstash-*,然后单击绿色箭头按钮。如果你得到'#34;确认&#34;:回答为真,这意味着数据已被清除。

答案 12 :(得分:3)

您可以删除整个索引,doc-type或特定的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 / documentId

  4. 如果您想删除所有索引,请转到通配符。

答案 13 :(得分:3)

使用Curl -L localhost:9200 / _cat / indices - 列出索引

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

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

您现在可以列出所有索引并使用

卷曲-XDELETE localhost:9200 / index_name(这将删除数据和索引)。

答案 14 :(得分:2)

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

答案 15 :(得分:2)

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

Console Icon

获取所有索引:

class ProductForm(PlaceholderMixin, ModelForm):
    class Meta:
        model = Product
        fields = ('name', 'description', 'location', 'store')

要删除特定索引,请执行以下操作:

class PlaceholderMixin:
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs):
        field_names = [field_name for field_name, _ in self.fields.items()]
        for field_name in field_names:
            field = self.fields.get(field_name)
            field.widget.attrs.update({'placeholder': field.label})

答案 16 :(得分:2)

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

'0'

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

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

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

action.destructive_requires_name: true

或通过查询:

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

答案 17 :(得分:1)

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

答案 18 :(得分: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"

将产生 { “确认”:true }

答案 19 :(得分:0)

<块引用>

按查询删除 API

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

示例:

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

参考: ES Guide >> Delete by query API

答案 20 :(得分:0)

你可以试试这个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