我正在使用Elasticsearch
批量API将大量文档发送到索引&立刻删除。如果一个文档出现错误,其他文档将被成功编入索引或删除。这导致弹性存储中的数据状态错误,因为在我的情况下,文档是彼此相关的。我的意思是如果一个文档的字段有一些值,那么还有其他文档也应该具有该字段的相同值。我不确定如何处理批量请求中的此类错误。是否有可能以任何方式回滚请求?我读过类似的问题,但无法解决处理此类案件的问题。或者不是回滚,有没有办法只在没有错误的情况下发送数据?或类似干燥的请求可能吗?
答案 0 :(得分:0)
我迟到了这个问题,但是将来回答遇到类似情况的任何人。
在又执行BulkRequest
的Elasticsearch(ES)批量API之后,您将获得一个BulkResponse
的回报,其中包含一个或多个BulkItemResponse
。 BulkItemResponse
具有方法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。