我知道可以通过deleteByQuery删除某种类型的所有文档。
示例:
curl -XDELETE 'http://localhost:9200/twitter/tweet/_query' -d '{
"query" : {
"term" : { "user" : "kimchy" }
}
}'
但我没有任何条款,只是想删除该类型的所有文件,无论什么条款。实现这一目标的最佳做法是什么?空术语不起作用。
答案 0 :(得分:152)
我相信如果你将查询删除与匹配相结合,它应该做你想要的事情,就像这样(使用你的例子):
curl -XDELETE 'http://localhost:9200/twitter/tweet/_query' -d '{
"query" : {
"match_all" : {}
}
}'
或者你可以删除类型:
curl -XDELETE http://localhost:9200/twitter/tweet
答案 1 :(得分:54)
已删除Delete-By-Query插件,支持在核心中使用新的Delete By Query API实现。 Read here
curl -XPOST 'localhost:9200/twitter/tweet/_delete_by_query?conflicts=proceed&pretty' -d'
{
"query": {
"match_all": {}
}
}'
答案 2 :(得分:46)
从ElasticSearch 5.x开始,默认情况下会出现delete_by_query API
POST: http://localhost:9200/index/type/_delete_by_query
{
"query": {
"match_all": {}
}
}
答案 3 :(得分:16)
Torsten Engelbrecht对John Petrones的评论答案扩大了:
curl -XDELETE 'http://localhost:9200/twitter/tweet/_query' -d
'{
"query":
{
"match_all": {}
}
}'
(我不想编辑John的回复,因为它得到了upvotes并被设置为答案,我可能已经引入了错误)
答案 4 :(得分:13)
从Elasticsearch 2.x开始不再允许删除,因为文档保留在索引中导致索引损坏。
答案 5 :(得分:11)
您可以使用以下查询从类型中删除文档:
MathView mv = new MathView(context, null);
mv.setEngine(MathView.Engine.MATHJAX);
mv.config("MathJax.Hub.Config({\n" +
"jax: [\"input/TeX\",\"output/HTML-CSS\"],\n" +
"displayAlign: \"left\"" +
"});"
);
String a= text;
mv.setText(a);
我在Kibana和Elastic 5.5.2中测试了这个查询
答案 6 :(得分:5)
ES2 +
的注释
从ES 1.5.3开始,不推荐使用逐个查询API,并且自ES 2.0以来已完全删除
而不是API,Delete By Query is now a plugin。
要使用Delete By Query插件,您必须在群集的所有节点上安装插件:
sudo bin/plugin install delete-by-query
安装后必须重新启动所有节点。
该插件的用法与旧API相同。您不需要在查询中更改任何内容 - 此插件只会让它们正常工作。
*有关为何删除API的完整信息,您可以阅读更多here。
答案 7 :(得分:4)
(声誉不足以发表评论) John Petrone的回答的第二部分是有效的 - 不需要查询。它将删除该类型中包含的类型和所有文档,但只要将新文档索引到该类型,就可以重新创建该文档。
只是为了澄清:
$ curl -XDELETE 'http://localhost:9200/twitter/tweet'
注意:此 删除映射!但如前所述,可以通过创建新文档轻松地重新映射它。
答案 8 :(得分:4)
你有这些选择:
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 是索引名称,用户是类型
答案 9 :(得分:4)
在 Kibana 控制台:
POST calls-xin-test-2/_delete_by_query
{
"query": {
"match_all": {}
}
}
答案 10 :(得分:4)
由于Strict Content-Type Checking for Elasticsearch REST Requests,上述答案不再适用于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": {} }}'
答案 11 :(得分:2)
只需加上几美分即可。
顶部提到的"delete_by_query"仍然可以作为elasticsearch 2.x中的插件使用。
虽然在最新的即将发布的5.x版中,它将被替换为 "delete by query api"
答案 12 :(得分:1)
我正在使用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" : [ ]
}
答案 13 :(得分:0)
Elasticsearch 2.3选项
action.destructive_requires_name: true
在elasticsearch.yml中的做了这次旅行
curl -XDELETE http://localhost:9200/twitter/tweet
答案 14 :(得分:0)
如果要根据日期删除文档。 您可以使用kibana console(v.6.1.2)
POST index_name/_delete_by_query
{
"query" : {
"range" : {
"sendDate" : {
"lte" : "2018-03-06"
}
}
}
}
答案 15 :(得分:0)
自 LeasticSearch 7.x 起,delete-by-query
插件被移除以支持新的 Delete By Query API。
curl 选项:
curl -X POST "localhost:9200/my-index/_delete_by_query" -H 'Content-Type: application/json' -d' { "query": { "match_all":{} } } '
或者在Kibana
POST /my-index/_delete_by_query
{
"query": {
"match_all":{}
}
}