delete 接口


官方文档地址: Delete API


DeleteRequest

DeleteRequest有两个必需参数:

DeleteRequest deleteRequest = new DeleteRequest(
        "posts", //索引
        "1");//文档ID

可选参数

可以提供以下参数:

//路由值
deleteRequest.routing("routing");
使用TimeValue作为等待主分片可用的超时时间
deleteRequest.timeout(TimeValue.timeValueMinutes(2)); 
//使用String作为等待主分片可用的超时时间
deleteRequest.timeout("2m");
//WriteRequest.RefreshPolicy作为刷新策略
deleteRequest.setRefreshPolicy(WriteRequest.RefreshPolicy.WAIT_UNTIL); 
//使用String作为刷新策略
deleteRequest.setRefreshPolicy("wait_for"); 
//版本
deleteRequest.version(2);
//版本类型
deleteRequest.versionType(VersionType.EXTERNAL);

同步执行

当以以下方式执行DeleteRequest时,客户端会等待DeleteRequest返回,然后才会继续执行代码:

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

同步调用可能会在无法解析高级 REST 客户端中的 REST 响应、请求超时或没有从服务器返回响应等类似情况下会抛出IOException

在服务器返回4xx5xx错误代码的情况下,高级客户端尝试解析响应体错误细节,然后抛出一个通用的ElasticsearchException,并将原始的ResponseException作为被抑制的异常添加到其中。

异步执行

还可以以异步方式执行DeleteRequest,以便客户端可以直接返回。用户需要通过将请求和侦听器传递给异步 delete 方法来指定如何处理响应或潜在的失败:

//要执行的IndexRequest和执行完成时要使用的ActionListener
client.deleteAsync(deleteRequest, RequestOptions.DEFAULT, listener);

异步方法不会阻塞并会立即返回。如果执行成功,则使用onResponse方法回调ActionListener;如果执行失败,则使用onFailure方法回调ActionListener。失败场景和预期异常与同步执行情况相同。

delete的标准侦听器如下所示:

listener = new ActionListener<DeleteResponse>() {
    @Override
    public void onResponse(DeleteResponse deleteResponse) {
         //当执行成功完成时调用。
    }

    @Override
    public void onFailure(Exception e) {
        //当整个DeleteRequest失败时调用。
    }
};

DeleteResponse

返回的DeleteResponse允许检索关于执行操作的信息,如下所示:

String index = deleteResponse.getIndex();
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 deleteRequest = new DeleteRequest("posts", "does_not_exist");
DeleteResponse deleteResponse = client.delete(deleteRequest, RequestOptions.DEFAULT);
if (deleteResponse.getResult() == DocWriteResponse.Result.NOT_FOUND) {
    //如果找不到要删除的文档,在这里进行处理
}

如果有版本冲突,将抛出一个ElasticsearchException

try {
    DeleteResponse deleteResponse = client.delete(
        new DeleteRequest("posts", "1").setIfSeqNo(100).setIfPrimaryTerm(2),
            RequestOptions.DEFAULT);
} catch (ElasticsearchException exception) {
    if (exception.status() == RestStatus.CONFLICT) {
        //所引发的异常表明返回了版本冲突错误
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值