【问题标题】:Elasticsearch delete_by_query wrong usageElasticsearch delete_by_query 错误用法
【发布时间】:2018-02-27 18:52:54
【问题描述】:

我正在使用 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}}})

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

“传输错误(404,'{
\"找到\":假,
\"_index\":\"users_favourite_documents\",
\"_type\":\"favourite_document\",
\"_id\":\"_query\", \"_version\":1,
\"_shards\":{\"总数\":2,\"成功\":2, \"失败\":0}}')"

我做错了什么?

【问题讨论】:

  • 你用的是什么版本的ES?
  • ES 版本 == 2.3
  • 在下面查看我的答案。运气好吗?
  • 不幸的是它不是我的 ES 服务器。我设法通过使用搜索作为第一步来获取_id和正常的delete()(它使用先前获得的_id)作为第二步来解决问题。
  • 好的,明白了。但是,如果您设法在服务器上有所帮助,那么答案仍然有效。

标签: python elasticsearch elasticsearch-py


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    如果你运行的是 ES 2.x,你需要先确保你已经安装了delete-by-query plugin

    在你的 ES_HOME 文件夹中,运行这个:

    bin/plugin install delete-by-query
    

    然后重启 ES,你的es.delete_by_query(...) 调用就可以工作了。

    如果您运行的是 ES 1.x,那么 delete-by-query 是核心的一部分,应该可以开箱即用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-24
      • 2015-01-24
      • 1970-01-01
      • 2020-02-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-07
      • 2022-11-01
      相关资源
      最近更新 更多