【问题标题】:How to handle errors with bulk requests如何处理批量请求的错误
【发布时间】:2018-05-25 23:11:33
【问题描述】:

我正在使用 Elasticsearch 批量 API 一次发送大量文档以进行索引和删除。如果一个文档有错误,其他文档将被成功索引或删除。这会导致弹性存储中的数据状态错误,因为在我的案例中,文档是相互关联的。我的意思是,如果一个文档的字段具有某些值,那么还有其他文档也应该对该字段具有相同的值。我不确定如何处理来自批量请求的此类错误。是否可以以任何方式回滚请求?我阅读了类似的问题,但无法获得处理此类案件的解决方案。或者不是回滚,有没有什么办法只有在没有错误的情况下才发送数据?或类似请求的空运行?

【问题讨论】:

    标签: elasticsearch error-handling elasticsearch-bulk-api


    【解决方案1】:

    我迟到了这个问题,但会为将来遇到类似情况的人回答。

    在执行 Elasticsearch (ES) 批量 API 又名 BulkRequest 后,您会得到一个 BulkResponse 作为回报,其中包含一个或多个 BulkItemResponseBulkItemResponse 有一个方法 isFailed() 会告诉你该操作是否失败。在您的情况下,如果有失败,您可以遍历响应中的所有项目并根据您的要求处理失败的响应。

    Synchronous 执行的代码如下所示:

    val bulkResponse: BulkResponse = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
    bulkResponse.iterator.asScala
    .filter(_.isFailed)
    .foreach(item => { // your logic to handle failures })
    

    对于Asynchronous 执行,您可以提供一个listener,它将在执行完成后调用。在这种情况下,您必须覆盖 onResponse()onFailure()。你可以在https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high-document-bulk.html了解更多信息

    HTH。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-10
      • 2017-07-16
      • 2014-08-19
      • 1970-01-01
      • 2015-11-24
      • 2018-08-10
      • 2023-02-09
      • 2021-04-28
      相关资源
      最近更新 更多