【问题标题】:Delete documents from ElasticSearch index in python从python中的ElasticSearch索引中删除文档
【发布时间】:2016-02-22 01:42:03
【问题描述】:

使用elasticsearch-py,我想从特定索引中删除所有文档,而不删除索引。鉴于 delete_by_query 已移至单独的插件,我想知道解决此问题的最佳方法是什么?

【问题讨论】:

  • 您不能只删除并重新创建索引吗?
  • @cricket_007 我可以,但我宁愿通过删除文档来做到这一点。否则,我必须检查索引设置和映射,并在重新创建索引时使用它们。我认为删除文档更容易。
  • 简单的映射备份​​等应该不难。全索引扫描和批量删除似乎并不“容易”,IMO

标签: python elasticsearch elasticsearch-py


【解决方案1】:

通过查询删除来删除所有文档的效率非常低。更直接、更正确的做法是:

  • 获取当前映射(假设您没有使用索引模板)
  • 删除索引DELETE /indexname
  • 创建新索引和映射。

这需要一秒钟,前者需要更多时间和不必要的磁盘 I/O

【讨论】:

  • 谢谢。这就是我最后所做的。我会将另一个答案保留为已接受,因为它更直接地回答了问题(即使它是错误的方法)。
【解决方案2】:

使用 Scroll/Scan API 调用来收集所有文档 ID,然后对这些 ID 调用批量删除。这是基于 the official documentation 的 Delete By Query API 的推荐替代品。

编辑:要求在 elasticsearch-py 中专门使用它的信息。这是helpers 的文档。使用扫描助手扫描所有文档。使用带有 delete 操作的 Bulk 助手删除所有 id。

【讨论】:

  • 您能否提供更多关于如何在 elasticsearch-py 中执行此操作的信息?
  • 为您需要执行扫描然后调用批量删除的 Python 助手添加了指向特定文档的链接。您需要的一切都应该在那里!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-17
  • 2014-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-31
相关资源
最近更新 更多