我知道可以通过deleteByQuery从某种类型删除所有文档。
例:
curl -XDELETE 'http://localhost:9200/twitter/tweet/_query' -d '{
    "query" : {
        "term" : { "user" : "kimchy" }
    }
}'
但是我没有术语,无论什么术语,我都只想删除该类型的所有文档。什么是实现这一目标的最佳实践?空项不起作用。
我知道可以通过deleteByQuery从某种类型删除所有文档。
例:
curl -XDELETE 'http://localhost:9200/twitter/tweet/_query' -d '{
    "query" : {
        "term" : { "user" : "kimchy" }
    }
}'
但是我没有术语,无论什么术语,我都只想删除该类型的所有文档。什么是实现这一目标的最佳实践?空项不起作用。
Answers:
我相信,如果您将通过查询进行的删除与匹配相结合,那么它应该做的就是您想要的,例如(使用您的示例):
curl -XDELETE 'http://localhost:9200/twitter/tweet/_query' -d '{
    "query" : { 
        "match_all" : {}
    }
}'
或者,您可以删除类型:
curl -XDELETE http://localhost:9200/twitter/tweet
已删除Delete-By-Query插件,以支持内核中新的Delete By Query API实现。在这里阅读
curl -XPOST 'localhost:9200/twitter/tweet/_delete_by_query?conflicts=proceed&pretty' -d'
{
    "query": {
        "match_all": {}
    }
}'
-H 'Content-Type: application/json'
                    在ElasticSearch 5.x中,默认情况下存在delete_by_query API
POST: http://localhost:9200/index/type/_delete_by_query
{
    "query": { 
        "match_all": {}
    }
}
您可以使用以下查询从类型中删除文档:
POST /index/type/_delete_by_query
{
    "query" : { 
        "match_all" : {}
    }
}
我在Kibana和Elastic 5.5.2中测试了此查询
从Elasticsearch 2.x开始,不再允许删除,因为文档保留在索引中,导致索引损坏。
news1, news2 and so on并为news路径的当前活动索引设置别名。当然,索引的名称仅作为示例。在这里,您可以找到[索引别名]的完整示例(elastic.co/guide/en/elasticsearch/reference/current/…)和说明案例研究的文章。
                    由于对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": {} }}'
您有以下选择:
1)删除整个索引:
curl -XDELETE 'http://localhost:9200/indexName'             
例:
curl -XDELETE 'http://localhost:9200/mentorz'
有关更多详细信息,您可以在这里找到- -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": {}
            }
    }'
*这里mentorz是索引名称,users是类型
ES2 +的注意事项
从ES 1.5.3开始,不建议使用按查询删除API,并且从ES 2.0开始将其完全删除
代替了API,“ 按查询删除”现在是一个插件。
为了使用“按查询删除”插件,您必须在集群的所有节点上安装该插件:
sudo bin/plugin install delete-by-query
安装后必须重新启动所有节点。
插件的用法与旧API相同。您无需更改查询中的任何内容-此插件将使其工作。
*有关为什么删除该API的完整信息,您可以在此处阅读更多内容。
(声誉不足以发表评论)John Petrone的答案的第二部分有效-无需查询。它将删除该类型以及该类型中包含的所有文档,但是只要您将新文档索引到该类型,就可以重新创建该类型。
只是澄清一下:
$ curl -XDELETE 'http://localhost:9200/twitter/tweet'
注意:这确实会删除映射!但是,如前所述,可以通过创建新文档轻松地将其重新映射。
我正在使用Elasticsearch 7.5,当我使用
curl -XPOST 'localhost:9200/materials/_delete_by_query?conflicts=proceed&pretty' -d'
{
    "query": {
        "match_all": {}
    }
}'
这将引发以下错误。
{
  "error" : "Content-Type header [application/x-www-form-urlencoded] is not supported",
  "status" : 406
}
我还需要-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" : [ ]
}