elasticsearch 5.x python2.7调用delete_by_query函数删除失败

问题:

最近我在使用elasticsearch 5.1版本,用python调用delete_by_query根据已知条件过滤数据并删除的时候,出现如下问题

调用代码:

from elasticsearch import Elasticsearch
ES = Elasticsearch(ES_SEARCH_HOSTURL)
ES.delete_by_query(dsl)

查看官方网站说明: 提示说2.x版本将这个功能删除了,原因是调用这个接口容易出现一些很意外的错误,如果特别想使用的话,可以安装插件来解决;但是5.x版本已经重新考虑将此功能加入并实现,见下图

官方已经提供相关测试用例,说明确实实现了啊,那为啥python调用那个函数执行会报错呢,这个就值得探讨一下了;首先根据官方提示,使用POST请求URL的方式,进行在linux终端下请求,发现确实 _delete_by_query 可用,这尼玛什么神奇操作,python就是不能调用呢?

最后总结得出结论: python2.7对此接口封装的有问题

其实按照搜索条件,将需要删除的数据的_id过滤出来,再调用delete函数一条一条删除,也能实现,但是这个一旦需要删除的数据量比较大的话,这个方式就有点捉襟见肘了,慢出新高度

灵机一动,可以换种思路来实现呀,思路就是以requests POST请求urL的形式,不就达到同样效果了嘛,具体代码见下:

import requests
# 其中doc_type_name如果没有的话,表示直接操作对象是整个索引
url = 'http://localhost:9200/index_name/doc_type_name/_delete_by_query'
query = DSL  # 就是安装DSL规范写的字典
result = requests.post(url=url, json=query)
result = result.json()
print(result)

不知道各位同仁有没有遇到类似问题,分享出来希望能帮助掉进抗里面的人 

猜你喜欢

转载自blog.csdn.net/u012089823/article/details/88039270