exists 接口

  • Post author:
  • Post category:其他


官方文档地址:

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。



版权声明:本文为wb1046329430原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。