我正在使用 Elastic 的Jest 客户端来浏览文档索引以更新一个字段。我的工作流程是使用分页运行一个空查询,看看我是否可以计算额外的字段。如果可以,我会在一次批量更新中更新相关文档。
伪代码
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 来确认。
如何运行查询以便处理原始文档并且任何更新都不会干扰它?