Elasti c Поиск обновлений по запросу не отражает правильно обновленное количество документов - PullRequest
0 голосов
/ 31 марта 2020

Я запускаю обновление по запросу с помощью java rest client: https://www.elastic.co/guide/en/elasticsearch/client/java-rest/master/java-rest-high-document-update-by-query.html

Это мой код: (извлекла только соответствующую часть и обновила некоторые поля в безболезненный сценарий)

UpdateByQueryRequest queryRequest = new UpdateByQueryRequest(indexName);
Script script = new Script(ScriptType.INLINE, "painless", "if (ctx._source.someKey == someVal) {ctx._source.someKey = someOtherVal;}",Collections.emptyMap());
queryRequest.setScript(script);
BulkByScrollResponse bulkResponse = aesClient.updateByQuery(queryRequest, RequestOptions.DEFAULT);

Приведенный выше код работает нормально, соответствующие документы обновляются. Однако всякий раз, когда я выполняю следующее:

long updatedDocs = bulkResponse.getUpdated();

Значение, хранящееся в updatedDocs, не отражает фактического количества обновляемых документов. В нем хранится количество документов, которые оно обработало.

Согласно документации , должно возвращаться количество обновленных документов.

Пожалуйста, поправьте меня, если я ошибаюсь. Есть ли исправление для этого?

1 Ответ

1 голос
/ 01 апреля 2020

Вы должны изменить свой скрипт на:

if (ctx._source.someKey == someVal) {ctx._source.someKey = someOtherVal;} else { ctx.op='noop'}

В ctx.op = 'n oop' этот документ не включается в обновления, как указано в документации update_by_query

Об этой операции не будет сообщено:

long noops = bulkResponse.getNoops(); 
...