Elasticsearch:批量请求的错误处理

时间:2017-12-12 09:56:30

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

我正在使用Elasticsearch批量API将大量文档发送到索引&立刻删除。如果一个文档出现错误,其他文档将被成功编入索引或删除。这导致弹性存储中的数据状态错误,因为在我的情况下,文档是彼此相关的。我的意思是如果一个文档的字段有一些值,那么还有其他文档也应该具有该字段的相同值。我不确定如何处理批量请求中的此类错误。是否有可能以任何方式回滚请求?我读过类似的问题,但无法解决处理此类案件的问题。或者不是回滚,有没有办法只在没有错误的情况下发送数据?或类似干燥的请求可能吗?

1 个答案:

答案 0 :(得分:0)

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

在又执行BulkRequest的Elasticsearch(ES)批量API之后,您将获得一个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。