UpdateByQueryRequest
可用于更新索引中的文档。less
它须要在其上执行更新的现有索引(或一组索引)。异步
最简单的UpdateByQueryRequest
形式以下所示:ide
UpdateByQueryRequest request = new UpdateByQueryRequest("source1", "source2");
UpdateByQueryRequest
。默认状况下,版本冲突会停止UpdateByQueryRequest
进程,但你能够经过在请求体中设置它为proceed
来计数它们。oop
request.setConflicts("proceed");
proceed
当版本冲突。你能够经过添加查询来限制文档。ui
request.setQuery(new TermQueryBuilder("user", "kimchy"));
user
设置为kimchy
的文档。也能够经过设置大小来限制处理文档的数量。code
request.setSize(10);
默认状况下,UpdateByQueryRequest
使用1000
批次,你可使用setBatchSize
更改批量大小。索引
request.setBatchSize(100);
按查询更新还能够经过指定管道来使用摄取功能。进程
request.setPipeline("my_pipeline");
UpdateByQueryRequest
还支持修改文档的script
,如下示例说明了这一点。ip
request.setScript( new Script( ScriptType.INLINE, "painless", "if (ctx._source.user == 'kimchy') {ctx._source.likes++;}", Collections.emptyMap()));
setScript
使用户为kimchy
的全部文档上的likes
字段递增。UpdateByQueryRequest
还有助于使用sliced-scroll
自动并行化到_uid
上的切片,使用setSlices
指定要使用的切片数。路由
request.setSlices(2);
UpdateByQueryRequest
使用scroll
参数来控制它保持“搜索上下文”活动的时间。
request.setScroll(TimeValue.timeValueMinutes(10));
若是提供路由,则路由将复制到滚动查询,从而将进程限制为与该路由值匹配的碎片。
request.setRouting("=cat");
除上述选项外,还能够选择提供如下参数:
request.setTimeout(TimeValue.timeValueMinutes(2));
TimeValue
的超时时间。request.setRefresh(true);
request.setIndicesOptions(IndicesOptions.LENIENT_EXPAND_OPEN);
BulkByScrollResponse bulkResponse = client.updateByQuery(request, RequestOptions.DEFAULT);
经过查询更新请求异步执行须要将UpdateByQueryRequest
实例和ActionListener
实例传递给异步方法:
client.updateByQueryAsync(request, RequestOptions.DEFAULT, listener);
UpdateByQueryRequest
和执行完成时要使用的ActionListener
。异步方法不会阻塞并当即返回,完成后,若是执行成功完成,则使用onResponse
方法回调ActionListener
,若是失败则使用onFailure
方法。
BulkByScrollResponse
的典型监听器以下所示:
ActionListener<BulkByScrollResponse> listener = new ActionListener<BulkByScrollResponse>() { @Override public void onResponse(BulkByScrollResponse bulkResponse) { } @Override public void onFailure(Exception e) { } };
onResponse
— 执行成功完成时调用,响应做为参数提供,并包含已执行的每一个操做的单个结果列表,请注意,一个或多个操做可能已失败,而其余操做已成功执行。onFailure
— 在整个UpdateByQueryRequest
失败时调用,在这种状况下,引起异常做为参数提供,而且没有执行任何操做。返回的BulkByScrollResponse
包含有关已执行操做的信息,并容许迭代每一个结果,以下所示:
TimeValue timeTaken = bulkResponse.getTook(); boolean timedOut = bulkResponse.isTimedOut(); long totalDocs = bulkResponse.getTotal(); long updatedDocs = bulkResponse.getUpdated(); long deletedDocs = bulkResponse.getDeleted(); long batches = bulkResponse.getBatches(); long noops = bulkResponse.getNoops(); long versionConflicts = bulkResponse.getVersionConflicts(); long bulkRetries = bulkResponse.getBulkRetries(); long searchRetries = bulkResponse.getSearchRetries(); TimeValue throttledMillis = bulkResponse.getStatus().getThrottled(); TimeValue throttledUntilMillis = bulkResponse.getStatus().getThrottledUntil(); List<ScrollableHitSource.SearchFailure> searchFailures = bulkResponse.getSearchFailures(); List<BulkItemResponse.Failure> bulkFailures = bulkResponse.getBulkFailures();