如何处理批量请求的错误



我正在使用Elasticsearch批量API发送大量文档进行索引和删除。如果一个文档出现错误,其他文档将成功编制索引或删除。这会导致 elasticstore 中的数据状态错误,因为在我的案例中,文档彼此相关。我的意思是,如果一个文档的字段具有一些值,那么其他文档也应该对该字段具有相同的值。我不确定如何处理批量请求中的此类错误。是否可以以任何方式回滚请求?我读过类似的问题,但无法获得处理此类案件的解决方案。或者代替回滚,有没有办法仅在没有错误时才发送数据?或者可能出现类似请求的试运行?

我迟到了,但将来会遇到类似情况的人都会回答。

在执行 Elasticsearch (ES) 批量 API 又名BulkRequest后,您将获得一个由一个或多个BulkItemResponse组成的BulkResponseBulkItemResponse有一个方法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 阅读更多相关信息

呵呵。

上面共享的使用 BulkResponse 输出的解决方案基本上是处理下一个批处理请求。如果我想在批处理中任何请求失败的位置中断批处理,该怎么办?我们正在发送彼此相关的批量事件。我的问题示例:批处理(E1- E10),如果批处理在 E5 失败。我不希望 E6-E10 进行处理,因为它们是相关的。在这种情况下,我希望立即做出回应。

相关内容

最新更新