Elasticsearch delete_by_query使用错误

时间:2016-09-05 10:43:10

标签: python elasticsearch elasticsearch-py

我使用2个类似的ES方法来加载和删除文档:

result = es.search(index='users_favourite_documents',
                   doc_type='favourite_document',
                   body={"query": {"match": {'user': user}}})

result = es.delete_by_query(index='users_favourite_documents',
                            doc_type='favourite_document',
                            body={"query": {"match": {'user': user}}})

第一个正常工作并返回预期记录 第二个抛出异常:

  

“TransportError(404,”{
  \ “找到\”:虚假,
  \ “_指数\”:\ “users_favourite_documents \”,
  \ “_类型\”:\ “favourite_document \”,
  \ “_ ID \”:\ “_查询\”,   \ “_版\”:1,
  \ “_碎片\”:{\ “总\”:2,\ “成功\”:2,   \ “失败\”:0}}')“

我做错了什么?

2 个答案:

答案 0 :(得分:2)

如果您正在运行ES 2.x,则需要确保先安装delete-by-query plugin

在ES_HOME文件夹中,运行以下命令:

bin/plugin install delete-by-query

然后重新启动ES,您的es.delete_by_query(...)电话将会正常工作。

如果你正在运行ES 1.x,那么逐个查询是核心的一部分,它应该是开箱即用的。

答案 1 :(得分:1)

我使用的是Elastic Stack的6.2.0版本,并且API的使用可以像这样删除:

es.delete_by_query(index="index_name", doc_type='doc_type', body={"query":{"match": {"message": "message_value"}}})

如果您的值为INT,请删除message_value中的“”。