elasticsearch - 如何处理批量请求中的错误

标签 elasticsearch error-handling elasticsearch-bulk-api

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

最佳答案

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

执行Elasticsearch(ES)批量API(又称为BulkRequest)后,您会得到一个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。

关于elasticsearch - 如何处理批量请求中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47769703/

相关文章:

elasticsearch - Elasticsearch是否可以为将来的索引使用索引模式的别名?

ssl - Elasticsearch 异常 - 打开发行版警报

java - Log4j 直接记录到 elasticsearch 服务器

elasticsearch - 用于Elasticsearch Nest 5.x的批量插入

python - elasticsearch python 批量 api (elasticsearch-py)

postgresql - 为复杂的地理查询选择数据结构/存储解决方案

ios - 快速限制 init() 中的输入选项

c# - 网页访问问题

php - 使用file_get_contents()PHP函数的正确方法

python - 如何将已创建的json格式字符串插入Elasticsearch Bulk