Я использую Elasticsearch's bulk requests в Java, и я пытаюсь справиться с ситуациями, когда какая-то ошибка происходит:Как получить от BulkItemResponse на соответствующий запрос
BulkResponse bulkResponse = bulkRequest.get();
if (bulkResponse.hasFailures()) {
for (BulkItemResponse response : bulkResponse) {
if (response.isFailed()
|| response.getResponse().getShardInfo().getFailed() > 0) {
//Find the corresponding request and resend it
}
}
}
После нахождения ответа с ошибкой, я хочу повторно отправить запрос, поскольку в моем случае ошибки могут быть кратковременными, и в большинстве случаев повторная попытка может решить проблему.
Так что мой вопрос: как добраться от BulkItemResponse
до исходного Request
, который привел его? Есть ли способ лучше, чем полагаться на порядок запросов и ответов?
Я думаю, вы считаете, что в каждом 'BulkRequestBuilder'' myObject.getId() 'уникален, но это не обязательно так. У меня может быть одна вставка и одно обновление/удаление в одном массовом запросе для того же документа. – Mehran
Обновить карту в этом случае. – dadoonet
Извините, но я не уверен, что вы имеете в виду! Рассмотрим сценарий, в котором в одном и том же объеме два запроса имеют один и тот же идентификатор, а один из них не работает. Как ваше решение справляется с этой ситуацией? Я полагаю, что полагаться на id никогда не будет. – Mehran