摘要:刷新策略作為提供。的典型偵聽(tīng)器如下所示執(zhí)行成功完成時(shí)調(diào)用。處理潛在的失敗。如果存在版本沖突,則拋出引發(fā)的異常表示返回了版本沖突錯(cuò)誤。如果將設(shè)置為并且已存在具有相同索引類(lèi)型和的文檔,則會(huì)發(fā)生相同的情況引發(fā)的異常表示返回了版本沖突錯(cuò)誤。
Index API 索引請(qǐng)求
IndexRequest需要以下參數(shù):
IndexRequest request = new IndexRequest( "posts", "doc", "1"); String jsonString = "{" + ""user":"kimchy"," + ""postDate":"2013-01-30"," + ""message":"trying out Elasticsearch"" + "}"; request.source(jsonString, XContentType.JSON);
posts — 索引。
doc — 類(lèi)型。
1 — 文檔ID。
文檔源以字符串形式提供。
提供文檔源除了上面顯示的String示例之外,還可以以不同的方式提供文檔源:
MapjsonMap = new HashMap<>(); jsonMap.put("user", "kimchy"); jsonMap.put("postDate", new Date()); jsonMap.put("message", "trying out Elasticsearch"); IndexRequest indexRequest = new IndexRequest("posts", "doc", "1") .source(jsonMap);
文檔源作為Map提供,可自動(dòng)轉(zhuǎn)換為JSON格式。
XContentBuilder builder = XContentFactory.jsonBuilder(); builder.startObject(); { builder.field("user", "kimchy"); builder.timeField("postDate", new Date()); builder.field("message", "trying out Elasticsearch"); } builder.endObject(); IndexRequest indexRequest = new IndexRequest("posts", "doc", "1") .source(builder);
文檔源作為XContentBuilder對(duì)象提供,Elasticsearch內(nèi)置輔助生成JSON內(nèi)容。
IndexRequest indexRequest = new IndexRequest("posts", "doc", "1") .source("user", "kimchy", "postDate", new Date(), "message", "trying out Elasticsearch");
文檔源作為Object鍵值對(duì)提供,轉(zhuǎn)換為JSON格式。
可選參數(shù)可以選擇提供以下參數(shù):
request.routing("routing");
路由值。
request.parent("parent");
parent值。
request.timeout(TimeValue.timeValueSeconds(1)); request.timeout("1s");
等待主碎片可用的作為TimeValue的超時(shí)。
等待主碎片可用的作為String的超時(shí)。
request.setRefreshPolicy(WriteRequest.RefreshPolicy.WAIT_UNTIL); request.setRefreshPolicy("wait_for");
刷新策略作為WriteRequest.RefreshPolicy實(shí)例提供。
刷新策略作為String提供。
request.version(2);
版本。
request.versionType(VersionType.EXTERNAL);
版本類(lèi)型。
request.opType(DocWriteRequest.OpType.CREATE); request.opType("create");
操作類(lèi)型作為DocWriteRequest.OpType值提供。
作為String提供的操作類(lèi)型:可以為create或update(默認(rèn))。
request.setPipeline("pipeline");
索引文檔之前要執(zhí)行的攝取管道的名稱(chēng)。
同步執(zhí)行以下列方式執(zhí)行IndexRequest時(shí),客戶端在繼續(xù)執(zhí)行代碼之前等待返回IndexResponse:
IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);異步執(zhí)行
執(zhí)行IndexRequest也可以以異步方式完成,以便客戶端可以直接返回,用戶需要通過(guò)將請(qǐng)求和偵聽(tīng)器傳遞給異步索引方法來(lái)指定響應(yīng)或潛在故障的處理方式:
client.indexAsync(request, RequestOptions.DEFAULT, listener);
要執(zhí)行的IndexRequest和執(zhí)行完成時(shí)要使用的ActionListener。
異步方法不會(huì)阻塞并立即返回,一旦完成,如果執(zhí)行成功完成,則使用onResponse方法回調(diào)ActionListener,如果失敗則使用onFailure方法。
index的典型偵聽(tīng)器如下所示:
listener = new ActionListener() { @Override public void onResponse(IndexResponse indexResponse) { } @Override public void onFailure(Exception e) { } };
onResponse — 執(zhí)行成功完成時(shí)調(diào)用。
onFailure — 當(dāng)整個(gè)IndexRequest失敗時(shí)調(diào)用。
索引響應(yīng)返回的IndexResponse允許檢索有關(guān)已執(zhí)行操作的信息,如下所示:
String index = indexResponse.getIndex(); String type = indexResponse.getType(); String id = indexResponse.getId(); long version = indexResponse.getVersion(); if (indexResponse.getResult() == DocWriteResponse.Result.CREATED) { } else if (indexResponse.getResult() == DocWriteResponse.Result.UPDATED) { } ReplicationResponse.ShardInfo shardInfo = indexResponse.getShardInfo(); if (shardInfo.getTotal() != shardInfo.getSuccessful()) { } if (shardInfo.getFailed() > 0) { for (ReplicationResponse.ShardInfo.Failure failure : shardInfo.getFailures()) { String reason = failure.reason(); } }
處理(如果需要)第一次創(chuàng)建文檔的情況。
處理(如果需要)文檔被重寫(xiě)的情況,因?yàn)樗呀?jīng)存在。
處理成功碎片數(shù)小于總碎片數(shù)的情況。
處理潛在的失敗。
如果存在版本沖突,則拋出ElasticsearchException:
IndexRequest request = new IndexRequest("posts", "doc", "1") .source("field", "value") .version(1); try { IndexResponse response = client.index(request, RequestOptions.DEFAULT); } catch(ElasticsearchException e) { if (e.status() == RestStatus.CONFLICT) { } }
引發(fā)的異常表示返回了版本沖突錯(cuò)誤。
如果將opType設(shè)置為create并且已存在具有相同索引、類(lèi)型和ID的文檔,則會(huì)發(fā)生相同的情況:
IndexRequest request = new IndexRequest("posts", "doc", "1") .source("field", "value") .opType(DocWriteRequest.OpType.CREATE); try { IndexResponse response = client.index(request, RequestOptions.DEFAULT); } catch(ElasticsearchException e) { if (e.status() == RestStatus.CONFLICT) { } }
引發(fā)的異常表示返回了版本沖突錯(cuò)誤。
上一篇:Elasticsearch Java High Level REST Client(入門(mén)) 下一篇:Get API文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/72346.html
摘要:入門(mén)本節(jié)描述從獲取工件到在應(yīng)用程序中使用它如何開(kāi)始使用高級(jí)別客戶端。保證能夠與運(yùn)行在相同主版本和大于或等于的次要版本上的任何節(jié)點(diǎn)通信。與具有相同的發(fā)布周期,將版本替換為想要的客戶端版本。 Java High Level REST Client 入門(mén) 本節(jié)描述從獲取工件到在應(yīng)用程序中使用它如何開(kāi)始使用高級(jí)別REST客戶端。 兼容性 Java High Level REST Client需...
摘要:用于的官方高級(jí)別客戶端,基于低級(jí)別客戶端,它公開(kāi)特定的方法,并負(fù)責(zé)請(qǐng)求編組和響應(yīng)反編組。入門(mén)初始化執(zhí)行請(qǐng)求讀取響應(yīng)日志記錄通用配置嗅探器在中被添加。依賴于核心項(xiàng)目,它接受與相同的請(qǐng)求參數(shù),并返回相同的響應(yīng)對(duì)象。 Elasticsearch Java REST Client Java REST Client有兩種類(lèi)型: Java Low Level REST Client:用于Elast...
閱讀 3277·2021-11-22 14:44
閱讀 1122·2021-11-16 11:53
閱讀 1273·2021-11-12 10:36
閱讀 710·2021-10-14 09:43
閱讀 3703·2019-08-30 15:55
閱讀 3407·2019-08-30 14:14
閱讀 1746·2019-08-26 18:37
閱讀 3420·2019-08-26 12:12