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)

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值