Elasticsearch Java High Level REST Client(Delete API)

Delete API

Delete请求

DeleteRequest没有参数。segmentfault

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时,客户端在继续执行代码以前等待返回DeleteResponseide

DeleteResponse deleteResponse = client.delete(
        request, RequestOptions.DEFAULT);

异步执行

执行DeleteRequest也能够以异步方式完成,以便客户端能够直接返回,用户须要经过将请求和侦听器传递给异步删除方法来指定响应或潜在故障的处理方式:post

client.deleteAsync(request, RequestOptions.DEFAULT, listener);
  • 要执行的DeleteRequest和执行完成时要使用的ActionListener

异步方法不会阻塞并当即返回,完成后,若是执行成功完成,则使用onResponse方法回调ActionListener,若是失败则使用onFailure方法。code

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) {
    
}
  • 若是找不到要删除的文档,请执行某些操做。

若是存在版本冲突,则抛出ElasticsearchExceptionget

try {
    DeleteResponse deleteResponse = client.delete(
            new DeleteRequest("posts", "doc", "1").version(2),
            RequestOptions.DEFAULT);
} catch (ElasticsearchException exception) {
    if (exception.status() == RestStatus.CONFLICT) {
        
    }
}
  • 引起的异常表示返回了版本冲突错误。

上一篇:Exists API

相关文章
相关标签/搜索