摘要:異步方法不會(huì)阻塞并立即返回,完成后,如果執(zhí)行成功完成,則使用方法回調(diào),如果失敗則使用方法。在整個(gè)失敗時(shí)調(diào)用,在這種情況下,引發(fā)異常作為參數(shù)提供,并且沒有執(zhí)行任何操作。檢查請(qǐng)求是否超時(shí)。獲取處理的文檔總數(shù)。已刪除的文檔數(shù)。已執(zhí)行的批次數(shù)。
Update By Query API Update By Query請(qǐng)求
UpdateByQueryRequest可用于更新索引中的文檔。
它需要在其上執(zhí)行更新的現(xiàn)有索引(或一組索引)。
最簡(jiǎn)單的UpdateByQueryRequest形式如下所示:
UpdateByQueryRequest request = new UpdateByQueryRequest("source1", "source2");
在一組索引上創(chuàng)建UpdateByQueryRequest。
默認(rèn)情況下,版本沖突會(huì)中止UpdateByQueryRequest進(jìn)程,但你可以通過在請(qǐng)求體中設(shè)置它為proceed來(lái)計(jì)數(shù)它們。
request.setConflicts("proceed");
設(shè)置proceed當(dāng)版本沖突。
你可以通過添加查詢來(lái)限制文檔。
request.setQuery(new TermQueryBuilder("user", "kimchy"));
僅復(fù)制將字段user設(shè)置為kimchy的文檔。
也可以通過設(shè)置大小來(lái)限制處理文檔的數(shù)量。
request.setSize(10);
只復(fù)制10條文檔。
默認(rèn)情況下,UpdateByQueryRequest使用1000批次,你可以使用setBatchSize更改批量大小。
request.setBatchSize(100);
使用100個(gè)文檔批次。
按查詢更新還可以通過指定管道來(lái)使用攝取功能。
request.setPipeline("my_pipeline");
UpdateByQueryRequest還支持修改文檔的script,以下示例說明了這一點(diǎn)。
request.setScript( new Script( ScriptType.INLINE, "painless", "if (ctx._source.user == "kimchy") {ctx._source.likes++;}", Collections.emptyMap()));
setScript使用戶為kimchy的所有文檔上的likes字段遞增。
UpdateByQueryRequest還有助于使用sliced-scroll自動(dòng)并行化到_uid上的切片,使用setSlices指定要使用的切片數(shù)。
request.setSlices(2);
設(shè)置要使用的切片數(shù)。
UpdateByQueryRequest使用scroll參數(shù)來(lái)控制它保持“搜索上下文”活動(dòng)的時(shí)間。
request.setScroll(TimeValue.timeValueMinutes(10));
設(shè)置滾動(dòng)時(shí)間。
如果提供路由,則路由將復(fù)制到滾動(dòng)查詢,從而將進(jìn)程限制為與該路由值匹配的碎片。
request.setRouting("=cat");
設(shè)置路由。
可選參數(shù)除上述選項(xiàng)外,還可以選擇提供以下參數(shù):
request.setTimeout(TimeValue.timeValueMinutes(2));
等待查詢請(qǐng)求更新執(zhí)行作為TimeValue的超時(shí)時(shí)間。
request.setRefresh(true);
通過調(diào)用查詢更新后刷新索引。
request.setIndicesOptions(IndicesOptions.LENIENT_EXPAND_OPEN);
設(shè)置索引選項(xiàng)。
同步執(zhí)行BulkByScrollResponse bulkResponse = client.updateByQuery(request, RequestOptions.DEFAULT);異步執(zhí)行
通過查詢更新請(qǐng)求異步執(zhí)行需要將UpdateByQueryRequest實(shí)例和ActionListener實(shí)例傳遞給異步方法:
client.updateByQueryAsync(request, RequestOptions.DEFAULT, listener);
要執(zhí)行的UpdateByQueryRequest和執(zhí)行完成時(shí)要使用的ActionListener。
異步方法不會(huì)阻塞并立即返回,完成后,如果執(zhí)行成功完成,則使用onResponse方法回調(diào)ActionListener,如果失敗則使用onFailure方法。
BulkByScrollResponse的典型監(jiān)聽器如下所示:
ActionListenerlistener = new ActionListener () { @Override public void onResponse(BulkByScrollResponse bulkResponse) { } @Override public void onFailure(Exception e) { } };
onResponse — 執(zhí)行成功完成時(shí)調(diào)用,響應(yīng)作為參數(shù)提供,并包含已執(zhí)行的每個(gè)操作的單個(gè)結(jié)果列表,請(qǐng)注意,一個(gè)或多個(gè)操作可能已失敗,而其他操作已成功執(zhí)行。
onFailure — 在整個(gè)UpdateByQueryRequest失敗時(shí)調(diào)用,在這種情況下,引發(fā)異常作為參數(shù)提供,并且沒有執(zhí)行任何操作。
Update By Query響應(yīng)返回的BulkByScrollResponse包含有關(guān)已執(zhí)行操作的信息,并允許迭代每個(gè)結(jié)果,如下所示:
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(); ListsearchFailures = bulkResponse.getSearchFailures(); List bulkFailures = bulkResponse.getBulkFailures();
獲取總耗時(shí)。
檢查請(qǐng)求是否超時(shí)。
獲取處理的文檔總數(shù)。
已更新的文檔數(shù)。
已刪除的文檔數(shù)。
已執(zhí)行的批次數(shù)。
跳過的文檔數(shù)。
版本沖突數(shù)。
請(qǐng)求必須重試批量索引操作的次數(shù)。
請(qǐng)求必須重試搜索操作的次數(shù)。
此請(qǐng)求限制的總時(shí)間不包括當(dāng)前正在休眠的當(dāng)前節(jié)流時(shí)間。
任何當(dāng)前節(jié)流閥休眠的剩余延遲或如果不休眠則為0。
搜索階段的失敗。
批量索引操作期間的失敗。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/72369.html
摘要:用于的官方高級(jí)別客戶端,基于低級(jí)別客戶端,它公開特定的方法,并負(fù)責(zé)請(qǐng)求編組和響應(yīng)反編組。入門初始化執(zhí)行請(qǐng)求讀取響應(yīng)日志記錄通用配置嗅探器在中被添加。依賴于核心項(xiàng)目,它接受與相同的請(qǐng)求參數(shù),并返回相同的響應(yīng)對(duì)象。 Elasticsearch Java REST Client Java REST Client有兩種類型: Java Low Level REST Client:用于Elast...
摘要:入門本節(jié)描述從獲取工件到在應(yīng)用程序中使用它如何開始使用高級(jí)別客戶端。保證能夠與運(yùn)行在相同主版本和大于或等于的次要版本上的任何節(jié)點(diǎn)通信。與具有相同的發(fā)布周期,將版本替換為想要的客戶端版本。 Java High Level REST Client 入門 本節(jié)描述從獲取工件到在應(yīng)用程序中使用它如何開始使用高級(jí)別REST客戶端。 兼容性 Java High Level REST Client需...
閱讀 2631·2023-04-26 01:44
閱讀 2677·2021-09-10 10:50
閱讀 1495·2019-08-30 15:56
閱讀 2439·2019-08-30 15:44
閱讀 573·2019-08-29 11:14
閱讀 3486·2019-08-26 11:56
閱讀 3084·2019-08-26 11:52
閱讀 987·2019-08-26 10:27