从 python 中的 ElasticSearch 索引中删除文档

Delete documents from ElasticSearch index in python

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

使用 Scroll/Scan API 调用来收集所有文档 ID,然后对这些 ID 调用批量删除。这是基于 the official documentation.

的 Delete By Query API 的推荐替代品

编辑:请求在 elasticsearch-py 中专门使用它的信息。这是 helpers 的文档。使用扫描助手扫描所有文档。使用带有删除操作的批量助手来删除所有 ID。

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

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

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