【问题标题】:How to delete data from ElasticSearch through JavaAPI如何通过 Java API 从 ElasticSearch 中删除数据
【发布时间】:2016-12-28 23:54:05
【问题描述】:

已编辑 我正在尝试找出如何根据条件从 Elasticsearch 中删除数据。我知道旧版本的 ElasticSearch 具有按查询删除功能,但它有非常严重的性能问题,所以它被删除了。我也知道有一个用于通过查询删除的 Java 插件:

org.elasticsearch.plugin:delete-by-query:2.2.0

但我不知道它是否有更好的删除实现,它具有更好的性能,或者它与旧的相同。

另外,有人建议使用滚动删除数据,但我知道如何检索数据滚动,而不是如何使用滚动删除!

有人知道吗(在调用中要删除的文档数量会很大,超过 50k 文档。

提前致谢!

终于用上了这个guy's third option

【问题讨论】:

  • 你使用的是 ES 2.2.0 吗?
  • ES 1.7 的东西,而 java API 是 2.3.5
  • 我不知道,例如,如何做这样的事情: curl -XDELETE localhost:9200/_search/scroll -d ' { "scroll_id" : ["c2Nhbjs2OzM0NDg1ODpzRlBLc0FXNlNyNm5JWUc1"] }' 但是使用 API。

标签: elasticsearch elasticsearch-java-api


【解决方案1】:

您想使用滚动/扫描是正确的。步骤如下:

  1. 开始新的滚动/扫描
  2. 获取下 N 条记录
  3. 从每条记录中获取 ID 并对这些 ID 执行 BulkDelete
  4. 返回步骤 2

因此,您不会完全使用滚动/扫描进行删除,而只是将其用作获取要删除记录的所有 ID 的工具。这样,您一次只删除 N 条记录,而不是 1 个块中的全部 50,000 条记录(这会给您带来各种问题)。

【讨论】:

  • 我确实做到了,非常感谢!很抱歉延迟回复!
猜你喜欢
  • 1970-01-01
  • 2015-01-04
  • 1970-01-01
  • 1970-01-01
  • 2018-07-08
  • 1970-01-01
  • 1970-01-01
  • 2018-01-17
  • 1970-01-01
相关资源
最近更新 更多