Elasticsearch Java High Level REST Client(Delete API)

博弈發表於2019-01-19

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) {
        
    }
}
  • 引發的異常表示返回了版本衝突錯誤。

上一篇:Exists API

相關文章