Delete API
Delete請求
DeleteRequest
沒有引數。
DeleteRequest request = new DeleteRequest(
"posts",
"doc",
"1");
-
posts
— 索引。 -
doc
— 型別。 -
1
— 文件id。
可選引數
可以選擇提供以下引數:
request.routing("routing");
- 路由值。
request.parent("parent");
- parent值。
request.timeout(TimeValue.timeValueMinutes(2));
request.timeout("2m");
- 等待主碎片可用的作為
TimeValue
的超時。 - 等待主碎片可用的作為
String
的超時。
request.setRefreshPolicy(WriteRequest.RefreshPolicy.WAIT_UNTIL);
request.setRefreshPolicy("wait_for");
- 將重新整理策略作為
WriteRequest.RefreshPolicy
例項。 - 將重新整理策略作為
String
。
request.version(2);
- 版本。
request.versionType(VersionType.EXTERNAL);
- 版本型別。
同步執行
以下列方式執行DeleteRequest
時,客戶端在繼續執行程式碼之前等待返回DeleteResponse
:
DeleteResponse deleteResponse = client.delete(
request, RequestOptions.DEFAULT);
非同步執行
執行DeleteRequest
也可以以非同步方式完成,以便客戶端可以直接返回,使用者需要通過將請求和偵聽器傳遞給非同步刪除方法來指定響應或潛在故障的處理方式:
client.deleteAsync(request, RequestOptions.DEFAULT, listener);
- 要執行的
DeleteRequest
和執行完成時要使用的ActionListener
。
非同步方法不會阻塞並立即返回,完成後,如果執行成功完成,則使用onResponse
方法回撥ActionListener
,如果失敗則使用onFailure
方法。
delete
的典型偵聽器如下所示:
listener = new ActionListener<DeleteResponse>() {
@Override
public void onResponse(DeleteResponse deleteResponse) {
}
@Override
public void onFailure(Exception e) {
}
};
-
onResponse
— 執行成功完成時呼叫。 -
onFailure
— 在整個DeleteRequest
失敗時呼叫。
Delete響應
返回的DeleteResponse
允許檢索有關已執行操作的資訊,如下所示:
String index = deleteResponse.getIndex();
String type = deleteResponse.getType();
String id = deleteResponse.getId();
long version = deleteResponse.getVersion();
ReplicationResponse.ShardInfo shardInfo = deleteResponse.getShardInfo();
if (shardInfo.getTotal() != shardInfo.getSuccessful()) {
}
if (shardInfo.getFailed() > 0) {
for (ReplicationResponse.ShardInfo.Failure failure :
shardInfo.getFailures()) {
String reason = failure.reason();
}
}
- 處理成功碎片數小於總分片數的情況。
- 處理潛在的失敗。
還可以檢查文件是否被找到:
DeleteRequest request = new DeleteRequest("posts", "doc", "does_not_exist");
DeleteResponse deleteResponse = client.delete(
request, RequestOptions.DEFAULT);
if (deleteResponse.getResult() == DocWriteResponse.Result.NOT_FOUND) {
}
- 如果找不到要刪除的文件,請執行某些操作。
如果存在版本衝突,則丟擲ElasticsearchException
:
try {
DeleteResponse deleteResponse = client.delete(
new DeleteRequest("posts", "doc", "1").version(2),
RequestOptions.DEFAULT);
} catch (ElasticsearchException exception) {
if (exception.status() == RestStatus.CONFLICT) {
}
}
- 引發的異常表示返回了版本衝突錯誤。