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

url = 'http://localhost:9200/test/_delete_by_query'
query = DSL  # 就是安裝DSL規範寫的字典
result = requests.post(url=url, json=query)
result = result.json()
print(result)

不知道各位同仁有沒有遇到類似問題,分享出來希望能幫助掉進抗裏面的人 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章