我知道可以通过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" : [ ]
}