从索引/类型中删除所有文档而不删除类型

Mic*_*iss 144 elasticsearch

我知道可以通过deleteByQuery删除某种类型的所有文档.

例:

curl -XDELETE 'http://localhost:9200/twitter/tweet/_query' -d '{
    "query" : {
        "term" : { "user" : "kimchy" }
    }
}'
Run Code Online (Sandbox Code Playgroud)

但我没有任何条款,只是想删除该类型的所有文件,无论什么条款.实现这一目标的最佳做法是什么?空术语不起作用.

链接到deleteByQuery

Joh*_*one 167

我相信如果你把查询删除和匹配结合在一起它应该做你想要的,就像这样(使用你的例子):

curl -XDELETE 'http://localhost:9200/twitter/tweet/_query' -d '{
    "query" : { 
        "match_all" : {}
    }
}'
Run Code Online (Sandbox Code Playgroud)

或者您可以删除类型:

curl -XDELETE http://localhost:9200/twitter/tweet
Run Code Online (Sandbox Code Playgroud)

  • Ftr:在Elasticsearch 2.0中,[删除查询API](https://www.elastic.co/guide/en/elasticsearch/reference/1.7/docs-delete-by-query.html)已从核心中删除现在[住在一个插件](https://www.elastic.co/guide/en/elasticsearch/plugins/2.0/plugins-delete-by-query.html). (23认同)
  • 如果你得到"没有为uri找到处理程序..."错误,请使用curl -XPOST'localhost:9200/twitter/tweet/_delete_by_query?conflicts = proceed&pretty'-d'{"query":{"match_all":{}} }" (11认同)
  • 如果您有自定义映射; 请注意第二个选项将删除类型及其映射.所以不要忘记在删除后重新映射索引类型.否则你会搞砸了. (9认同)
  • Ftr:从版本5开始,查询插件删除将[返回ES核心](https://github.com/elastic/elasticsearch/pull/18516). (3认同)
  • 不建议通过这种方式删除记录。文档中的声明:“这是有问题的,因为它无提示地强制刷新,该刷新会在并发索引期间迅速导致OutOfMemoryError”。https://www.elastic.co/guide/zh/ elasticsearch / reference / 1.7 / docs-delete-by-query.html (2认同)
  • _query DELETE api 在 ElasticSearch 6+ 中不起作用。使用 _delete_by_query 代替。 (2认同)

Iqb*_*bal 66

已删除Delete-By-Query插件,支持在核心中使用新的Delete By Query API实现.在这里阅读

curl -XPOST 'localhost:9200/twitter/tweet/_delete_by_query?conflicts=proceed&pretty' -d'
{
    "query": {
        "match_all": {}
    }
}'
Run Code Online (Sandbox Code Playgroud)

  • 对于ES 6+,您还需要`-H'Content-Type:application / json'` (6认同)
  • 在ES 6.1.1上为我工作 (2认同)

Jay*_*hah 56

从ElasticSearch 5.x开始,默认情况下会出现delete_by_query API

POST: http://localhost:9200/index/type/_delete_by_query

{
    "query": { 
        "match_all": {}
    }
}
Run Code Online (Sandbox Code Playgroud)


use*_*829 20

自 ElasticSearch 7.x 起,delete-by-query插件已被删除,取而代之的是新的“按查询删除”API

卷曲选项

curl -X POST "localhost:9200/my-index/_delete_by_query" -H 'Content-Type: application/json' -d' { "query": { "match_all":{} } } '
Run Code Online (Sandbox Code Playgroud)

或者在基巴纳

POST /my-index/_delete_by_query
{
  "query": {
    "match_all":{}
  }
}
Run Code Online (Sandbox Code Playgroud)


Bri*_*edt 16

Torsten Engelbrecht对John Petrones的评论得到了扩展:

curl -XDELETE 'http://localhost:9200/twitter/tweet/_query' -d 
  '{
      "query": 
      {
          "match_all": {}
      }
   }'
Run Code Online (Sandbox Code Playgroud)

(我不想编辑John的回复,因为它得到了upvotes并被设置为答案,我可能已经引入了错误)


Luk*_*ina 15

您可以使用以下查询从类型中删除文档:

POST /index/type/_delete_by_query
{
    "query" : { 
        "match_all" : {}
    }
}
Run Code Online (Sandbox Code Playgroud)

我在Kibana和Elastic 5.5.2中测试了这个查询


Fab*_*ola 13

从Elasticsearch 2.x开始不再允许删除,因为文档保留在索引中导致索引损坏.


min*_*das 7

由于对Elasticsearch REST请求进行严格的内容类型检查,以上答案不再适用于ES 6.2.2 。curl我最终使用的命令是这样的:

curl -H'Content-Type: application/json' -XPOST 'localhost:9200/yourindex/_doc/_delete_by_query?conflicts=proceed' -d' { "query": { "match_all": {} }}'
Run Code Online (Sandbox Code Playgroud)


Xin*_*Xin 6

Kibana控制台中:

POST calls-xin-test-2/_delete_by_query
{
  "query": { 
    "match_all": {}
  }
}
Run Code Online (Sandbox Code Playgroud)


小智 5

(声誉不够高,无法发表评论)John Petrone 答案的第二部分有效 - 无需查询。它将删除该类型以及该类型中包含的所有文档,但只要您将新文档索引到该类型,就可以重新创建该类型。

只是为了澄清: $ curl -XDELETE 'http://localhost:9200/twitter/tweet'

注意:这删除映射!但如前所述,可以通过创建新文档轻松地重新映射它。

  • 但是您删除了所有映射配置,当您对任何映射有特定配置时,不建议这样做,因为动态映射仅创建基本字段,如字符串、长整型等... (2认同)
  • @CarlosRodriguez,但是您拥有的任何花哨的映射肯定都应该在源代码管理中,并且很容易自动重新应用,作为执行删除的同一脚本的一部分。 (2认同)

Dek*_*kel 5

注意ES2 +

从ES 1.5.3开始,不推荐使用逐个查询API,并且自ES 2.0以来已完全删除

而不是API,Delete By Query现在是一个插件.

要使用"按查询删除"插件,必须在群集的所有节点上安装插件:

sudo bin/plugin install delete-by-query
Run Code Online (Sandbox Code Playgroud)

安装后必须重新启动所有节点.


该插件的用法与旧API相同.您无需更改查询中的任何内容 - 此插件只会使它们正常工作.


*有关为何删除API的完整信息,您可以在此处阅读更多信息.


Nee*_*ngh 5

您有以下选择:

1)删除整个索引:

curl -XDELETE 'http://localhost:9200/indexName'             
Run Code Online (Sandbox Code Playgroud)

例:

curl -XDELETE 'http://localhost:9200/mentorz'
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请单击此处-https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-delete-index.html

2)通过查询删除符合条件的内容:

curl -XDELETE 'http://localhost:9200/mentorz/users/_query' -d                
    '{
        "query":
            {
                "match_all": {}
            }
    }'
Run Code Online (Sandbox Code Playgroud)

*这里mentorz是索引名称,users是类型


Kri*_*ofe 5

我正在使用elasticsearch 7.5,当我使用

curl -XPOST 'localhost:9200/materials/_delete_by_query?conflicts=proceed&pretty' -d'
{
    "query": {
        "match_all": {}
    }
}'
Run Code Online (Sandbox Code Playgroud)

这将引发以下错误。

{
  "error" : "Content-Type header [application/x-www-form-urlencoded] is not supported",
  "status" : 406
}
Run Code Online (Sandbox Code Playgroud)

我还需要-H 'Content-Type: application/json'在请求中添加额外的标头以使其正常工作。

curl -XPOST 'localhost:9200/materials/_delete_by_query?conflicts=proceed&pretty'  -H 'Content-Type: application/json' -d'
{
    "query": {
        "match_all": {}
    }
}'
{
  "took" : 465,
  "timed_out" : false,
  "total" : 2275,
  "deleted" : 2275,
  "batches" : 3,
  "version_conflicts" : 0,
  "noops" : 0,
  "retries" : {
    "bulk" : 0,
    "search" : 0
  },
  "throttled_millis" : 0,
  "requests_per_second" : -1.0,
  "throttled_until_millis" : 0,
  "failures" : [ ]
}
Run Code Online (Sandbox Code Playgroud)