删除一个document
需要指定index,type,id
curl -XDELETE http://localhost:9200/twitter/tweet/1
Routing
当创建index的时候如果指定了routing,那么在删除的时候要同时指定文档的id和routing,如果routing不匹配,光是id匹配也不会删除
curl -XDELETE http://localhost:9200/twitter/tweet/1?routing=user1
按查询条件删除
可以按照查询条件删除,只要是符合条件的document都会被删除,类似于批量删除
参数:_delete_by_query
curl -XPOST http://localhost:9200/_delete_by_query -d'
{
"query":{
"match":{
"message":"some message"
}
}
'
返回结果
"took" : 147,
"timed_out": false,
"deleted": 119,
"batches": 1,
"version_conflicts": 0,
"noops": 0,
"retries": {
"bulk": 0,
"search": 0
},
"throttled_millis": 0,
"requests_per_second": -1.0,
"throttled_until_millis": 0,
"total": 119,
"failures" : [ ]
}
_delete_by_query
是根据index的快照删除document的,并且使用的是内部的version, 意味着删除时如果刚好index被更新,会引发版本的冲突,所以_delete_by_query
只会删除版本一致的,因为内部版本号不支持0,所以版本是0的document不能被_delete_by_query
删除
删除整个type
POST twitter,blog/tweet,post/_delete_by_query
{
"query": {
"match_all": {}
}
}
上面的请求将会删除tweet,post两个索引的所有type,类似于关系型数据库的删除整张表
设置batch size
默认_delete_by_query
批量删除1000条,可以传递参数scroll_size
修改
POST twitter/_delete_by_query?scroll_size=5000
{
"query": {
"term": {
"user": "kimchy"
}
}
}
URL 参数
pretty
: 格式化返回内容
refresh
: 当delete by query 完成后立即刷新所有的被涉及的分片
wait_for_completion
: 当设为false的时候,elasticsearch会做一些预处理,执行这个请求,返回一个task,这个task可以通过task api 来查看状态或者取消,Elasticsearch也会创建一个这个task的document, 在.tasks/task/{<script type="math/tex" id="MathJax-Element-5">{</script>taskId},我们可以保留这个document,不过当执行完成后也可以删除他。
wati_for_active_shards
: 指定多少个副本是有效的
timeout
: 指定delete的时候等待一个不可用的分片到可用的超时时间
requests_per_second
: 指定每秒执行的请求数,-1的时候禁止此阀值