上篇文章和读者分享了Elasticsearch中文档删除API的基本用法,但是这些API还不能满足实际开发中的需求,实际开发中,更加灵活的删除操作还是需要结合查询API才能实现。本文就来看看Delete By Query API。
本文是Elasticsearch系列的第十二篇,阅读前面的文章,有助于更好的理解本文:
1.Delete By Query API
这里最简单的用法是对每个查询匹配的文档执行删除文档,例如下面这样:
curl -X POST “localhost:9200/twitter/_delete_by_query?pretty” -H ‘Content-Type: application/json’ -d’
{
“query”: {
“match”: {
“user”: “kimchy”
}
}
}
’
执行结果如下:
这里的查询需要使用和Search API(后文会讲)相同的方式来将查询条件作为query的值传递,当然也可以使用q关键字,例如如下请求:
curl -X POST “localhost:9200/twitter/_delete_by_query?pretty&q=user:kimchy” -H ‘Content-Type: application/json’
执行结果如下:
delete by query在索引启动时获取索引的快照,并使用内部版本控制删除它找到的文档。这意味着如果文档在拍摄快照的时间和处理删除请求之间发生更改,就会出现版本冲突,当版本匹配时(即未出现冲突时),文档将被删除。
注意
由于内部版本控制不支持值0作为有效的版本号,因此无法使用
_delete_by_query
删除版本等于零的文档,并且将请求失败。