文章目录
官方文档地址:
Exists API
如果文档存在,则 exists API 返回
true
,否则返回
false
。
GetRequest
它像
Get API
一样使用
GetRequest
。支持它的所有可选参数。由于
exists()
只返回
true
或
false
,我们建议关闭获取
_source
和任何存储字段,这样请求会稍微轻一些:
GetRequest getRequest = new GetRequest(
"posts", //索引
"1"); //文档ID
getRequest.fetchSourceContext(new FetchSourceContext(false)); //禁用抓取_source。
getRequest.storedFields("_none_"); //禁止抓取存储的字段。
同步执行
当以以下方式执行
GetRequest
时,客户端会等待返回
boolean
,然后才会继续执行代码:
boolean exists = client.exists(getRequest, RequestOptions.DEFAULT);
同步调用可能会在无法解析高级 REST 客户端中的 REST 响应、请求超时或没有从服务器返回响应等类似情况下会抛出
IOException
。
在服务器返回
4xx
或
5xx
错误代码的情况下,高级客户端尝试解析响应体错误细节,然后抛出一个通用的
ElasticsearchException
,并将原始的
ResponseException
作为被抑制的异常添加到其中。
异步执行
还可以以异步方式执行
GetRequest
,以便客户端可以直接返回。用户需要通过将请求和侦听器传递给异步 exists 方法来指定如何处理响应或潜在的失败:
//要执行的GetRequest和执行完成时要使用的ActionListener
client.existsAsync(getRequest, RequestOptions.DEFAULT, listener);
异步方法不会阻塞并会立即返回。如果执行成功,则使用
onResponse
方法回调
ActionListener
;如果执行失败,则使用
onFailure
方法回调
ActionListener
。失败场景和预期异常与同步执行情况相同。
exists
的标准侦听器如下所示:
ActionListener<Boolean> listener = new ActionListener<Boolean>() {
@Override
public void onResponse(Boolean exists) {
//当执行成功完成时调用。
}
@Override
public void onFailure(Exception e) {
//当整个GetRequest失败时调用。
}
};
existsSource
exists 请求的一个变体是
existsSource
方法,它具有附加检查,以确定问题文档是否存储了
source
。如果索引的映射选择删除对文档中存储 JSON source 的支持,那么该方法将为该索引中的文档返回 false。