如何从 Elasticsearch 中删除文档

新手上路,请多包涵

我在 Python 中找不到从 Elasticsearch 中删除文档的任何示例。我现在看到的是 deletedelete_by_query 函数的定义。但出于某种原因, 文档 甚至没有提供使用这些功能的微观示例。如果我不知道如何将它们正确地输入函数调用,那么单个参数列表并不能告诉我太多信息。所以,可以说,我刚刚插入了一个新文档,如下所示:

 doc = {'name':'Jacobian'}
db.index(index="reestr",doc_type="some_type",body=doc)

世界上谁知道我现在如何使用 deletedelete_by_query 删除此文档?

原文由 Jacobian 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 562
2 个回答

由于您在索引文档时没有提供文档 ID,因此您必须从返回值中获取自动生成的文档 ID,并根据该 ID 进行删除。或者您可以自己定义 id,尝试以下操作:

  db.index(index="reestr",doc_type="some_type",id=1919, body=doc)

 db.delete(index="reestr",doc_type="some_type",id=1919)

在另一种情况下,您需要查看返回值;

  r = db.index(index="reestr",doc_type="some_type", body=doc)
 # r = {u'_type': u'some_type', u'_id': u'AU36zuFq-fzpr_HkJSkT', u'created': True, u'_version': 1, u'_index': u'reestr'}

 db.delete(index="reestr",doc_type="some_type",id=r['_id'])

delete_by_query 的另一个示例。假设在添加了几个名称为“Jacobian”的文档后,运行以下命令删除名称为“Jacobian”的所有文档:

  db.delete_by_query(index='reestr',doc_type='some_type', q={'name': 'Jacobian'})

原文由 Serkan 发布,翻译遵循 CC BY-SA 3.0 许可协议

由于多种原因,在版本 2 中从 ES 核心中删除了 Delete-By-Query API。这个功能变成了一个插件。您可以在此处查找更多详细信息:

为什么 Delete-By-Query 是一个插件

通过查询插件删除

因为我不想添加另一个依赖项(因为稍后我需要它在 docker 镜像中运行)我写了一个自己的函数来解决这个问题。我的解决方案是搜索具有指定索引和类型的所有引号。之后我使用批量 API 删除它们:

 def delete_es_type(es, index, type_):
    try:
        count = es.count(index, type_)['count']
        response = es.search(
            index=index,
            filter_path=["hits.hits._id"],
            body={"size": count, "query": {"filtered" : {"filter" : {
                  "type" : {"value": type_ }}}}})
        ids = [x["_id"] for x in response["hits"]["hits"]]
        if len(ids) > 0:
            return
        bulk_body = [
            '{{"delete": {{"_index": "{}", "_type": "{}", "_id": "{}"}}}}'
            .format(index, type_, x) for x in ids]
        es.bulk('\n'.join(bulk_body))
        # es.indices.flush_synced([index])
    except elasticsearch.exceptions.TransportError as ex:
        print("Elasticsearch error: " + ex.error)
        raise ex

我希望这对未来的谷歌员工有帮助;)

原文由 Chaoste 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题