Я использую клиент Jest для Elastic, чтобы просмотреть индекс документа и обновить одно поле. Мой рабочий процесс состоит в том, чтобы запустить пустой запрос с пейджингом и посмотреть, смогу ли я вычислить дополнительное поле. Если я могу, я обновляю соответствующие документы в одном массовом обновлении.
Псевдокод
private void process() {
int from = 0
int size = this.properties.batchSize
boolean moreResults = true
while (moreResults) {
moreResults = handleBatch(from, this.properties.batchSize)
from += size
}
}
private boolean handleBatch(int from, int size) {
log.info("Processing records $from to " + (from + size))
def result = search(from, size)
if (result.isSucceeded()) {
// Check each element and perform an upgrade
}
// return true if the query returned at least one item
}
private SearchResult search(int from, int size) {
String query =
'{ "from": ' + from + ', ' +
'"size": ' + size + '}'
Search search = new Search.Builder(query)
.addIndex("my-index")
.addType('my-document')
.build();
jestClient.execute(search)
}
У меня нет никакой ошибки, но когда я запускаю пакет несколько раз, похоже, что он находит «новые» документы для обновления, в то время как общее количество документов не изменилось. У меня возникло подозрение, что обновленный документ обрабатывался несколько раз, что я мог подтвердить, проверив обработанные идентификаторы.
Как я могу запустить запрос, чтобы исходные документы обрабатывались и никакие обновления не мешали ему?