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) {
}
}
- 引发的异常表示返回了版本冲突错误。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。