3

在使用 Elasticsearch Java 高级 REST 客户端进行批量请求时,有什么方法可以在响应中仅获取失败的文档。

目前,ES 在响应中发送所有成功和失败的文档,我们正在重新处理所有失败的文档,我们正在迭代BulkItemResponse查找失败的文档并重新处理它。

private BulkRequest createBulkRequestsForRetry(BulkResponse bulkItemResponses, BulkRequest currentBulkRequest) {
        BulkRequest bulkRequest = new BulkRequest();
        int index = 0;
        for (BulkItemResponse bulkItemResponse : bulkItemResponses.getItems()) {
            if (bulkItemResponse.isFailed()) {
                bulkRequest.add(currentBulkRequest.requests().get(index));
            }
            index++;
        }
        return bulkRequest;
    }

代表在bulkItemResponse.getItems()批量操作中执行的每个操作(以相同的顺序!)。

4

1 回答 1

2

到目前为止,即使在最新的 7.7 版本的客户端中,此功能也不存在,如果您想要此功能,您可以创建问题或更好地提交 PR 来解决问题,这将是一个非常有用的功能。

您可以查看完整的 BulkResponse并了解自己在 master 分支中也没有此类功能。

您也可以在这里向 Elasticsearch 创建问题。

于 2020-06-05T06:30:59.647 回答