官方文档地址: Get Source API
这个 API 只帮助获取文档的_source
字段。
GetSourceRequest
一个GetSourceRequest
要求下列参数:
GetSourceRequest getSourceRequest = new GetSourceRequest(
"posts", //索引
"1");//文档ID
可选参数
可以提供以下参数:
//上下文排除和包含的参数是可选的(参见Get API文档中的示例)
String[] includes = Strings.EMPTY_ARRAY;
String[] excludes = new String[]{"postDate"};
getSourceRequest.fetchSourceContext(
//FetchSourceContext的第一个参数fetchSource必须为true,否则会抛出ElasticsearchException
new FetchSourceContext(true, includes, excludes));
//路由值
getSourceRequest.routing("routing");
//喜好度
getSourceRequest.preference("preference");
//设置realtime标志为false(默认为true)
getSourceRequest.realtime(false);
//在检索文档之前执行刷新(默认为false)
getSourceRequest.refresh(true);
同步执行
当以以下方式执行GetSourceRequest
时,客户端会等待GetSourceResponse
返回,然后才会继续执行代码:
GetSourceResponse getSourceResponse =
client.getSource(getSourceRequest, RequestOptions.DEFAULT);
同步调用可能会在无法解析高级 REST 客户端中的 REST 响应、请求超时或没有从服务器返回响应等类似情况下会抛出IOException
。
在服务器返回4xx
或5xx
错误代码的情况下,高级客户端尝试解析响应体错误细节,然后抛出一个通用的ElasticsearchException
,并将原始的ResponseException
作为被抑制的异常添加到其中。
异步执行
还可以以异步方式执行GetSourceRequest
,以便客户端可以直接返回。用户需要通过将请求和侦听器传递给异步 get-source 方法来指定如何处理响应或潜在的失败:
//要执行的GetSourceRequest和执行完成时要使用的ActionListener
client.getSourceAsync(getSourceRequest, RequestOptions.DEFAULT, listener);
异步方法不会阻塞并会立即返回。如果执行成功,则使用onResponse
方法回调ActionListener
;如果执行失败,则使用onFailure
方法回调ActionListener
。失败场景和预期异常与同步执行情况相同。
get-source
的标准侦听器如下所示:
ActionListener<GetSourceResponse> listener = new ActionListener<GetSourceResponse>() {
@Override
public void onResponse(GetSourceResponse getSourceResponse) {
//当执行成功完成时调用。
}
@Override
public void onFailure(Exception e) {
//当整个GetSourceRequest失败时调用。
}
};
GetSourceResponse
返回的GetSourceResponse
包含字段source
,该字段源将文档的源表示为映射。
Map<String, Object> source = getResourceResponse.getSource();