2016-08-13 2 views
2

Я обновляю документ в Elasticsearch с использованием Java API и время от времени он терпит неудачу без каких-либо указаний (возможно, 1 из 10). Единственный способ узнать, было ли обновление успешным, - прочитать документ для проверки и проверить, обновлено ли оно.Как определить, не удалось ли обновить документ в Elasticsearch

IndexResponse имеет метод, называемый isCreated, и, как указывает его имя, он возвращает только true, если была успешная вставка. Этот метод вернет false при обновлении, независимо от того, что он успешный или неудачный.

Вот мой код, чтобы обновить документ:

IndexRequest indexRequest = new IndexRequest(index_name, type_name, doc_id) 
    .source(json); 

UpdateRequest updateRequest = new UpdateRequest(index_name, type_name, doc_id) 
    .doc(json) 
    .upsert(indexRequest); 

UpdateResponse response = es_client.update(updateRequest).actionGet(); 

Прежде чем я могу исправить неудачное обновление, мне нужно, чтобы обнаружить, если запрос был успешным или нет. Но как?

P.S. UpdateResponse наследует от IndexResponse и не имеет дополнительного способа указывать статус обновления или, по крайней мере, насколько мне известно.

+0

I _think_ вам нужно получить документ и проверить его после обновления. –

ответ

2

Из UpdateResponse вы можете получить экземпляр ShardInfo, который содержит число failed и successful операции с осколками. Если failed: 0, вероятность того, что операция выполнена успешно.

int failed = response.getShardInfo().getFailed() 
+0

Когда операция завершилась неудачей, 'getShardInfo()' выглядит так: '{" total ": 0," success ": 0," failed ": 0}', но в других случаях это '{" total ": 2," success " : 1, «failed»: 0} ' – Mehran

+0

Тогда' total: 0' является хорошим показателем того, что операция не выполнялась. Для правильного выполнения вы должны проверить, что 'total> 0' и' total == successful' – Val

+0

Я считаю, что 'total' не ссылается на количество документов, вместо чего что-то похожее на количество осколков или что-то в этом роде. Я не уверен. Но я обновлял только один документ, а не два! – Mehran

Смежные вопросы