Elastic 用のJest クライアントを使用してドキュメントのインデックスを参照し、1 つのフィールドを更新しています。私のワークフローは、ページングを使用して空のクエリを実行し、余分なフィールドを計算できるかどうかを確認することです。可能であれば、関連するドキュメントを 1 回の一括更新で更新します。
擬似コード
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)
}
エラーはありませんが、バッチを数回実行すると、ドキュメントの総数が変わっていないのに、アップグレードする「新しい」ドキュメントを見つけているように見えます。更新されたドキュメントが数回処理された疑いがあり、処理された ID を確認することで確認できました。
元のドキュメントが処理され、更新がそれを妨げないようにクエリを実行するにはどうすればよいですか?