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();