Get API
GetRequest
GetRequest对象需要以下参数:
Index | 索引 | |
Type | 类型 | |
Document id | 文档ID |
GetRequest getRequest = new GetRequest(
"posts",
"doc",
"1");
可选参数
停止返回检索数据,默认启用返回检索数据
request.fetchSourceContext(FetchSourceContext.DO_NOT_FETCH_SOURCE);
实现返回指定的字段
String[] includes = new String[]{"message", "*Date"};
String[] excludes = Strings.EMPTY_ARRAY;
FetchSourceContext fetchSourceContext =
new FetchSourceContext(true, includes, excludes);
request.fetchSourceContext(fetchSourceContext);
实现不返回指定的字段
String[] includes = Strings.EMPTY_ARRAY;
String[] excludes = new String[]{"message"};
FetchSourceContext fetchSourceContext =
new FetchSourceContext(true, includes, excludes);
request.fetchSourceContext(fetchSourceContext);
//实际测试有问题
//指定检索返回字段
request.storedFields("message");
GetResponse getResponse = client.get(request, RequestOptions.DEFAULT);
//获取检索存储的字段
String message = getResponse.getField("message").getValue();
指定路由
request.routing("routing");
将realtime标志设置为false(默认为true)
request.realtime(false);
在检索文档之前执行刷新(默认为false)
request.refresh(true);
同步查询请求
GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);
异步查询请求
client.getAsync(request, RequestOptions.DEFAULT, listener);
GetResponse的典型监听器如下:
ActionListener<GetResponse> listener = new ActionListener<GetResponse>() {
@Override
public void onResponse(GetResponse getResponse) {
//当执行成功完成时调用。
}
@Override
public void onFailure(Exception e) {
//万一失败所引发的异常作为参数提供
}
};
Get esponse
返回的GetResponse允许检索请求的文档及其元数据和最终存储的字段。
String index = getResponse.getIndex();
String type = getResponse.getType();
String id = getResponse.getId();
if (getResponse.isExists()) {
long version = getResponse.getVersion();
String sourceAsString = getResponse.getSourceAsString();
Map<String, Object> sourceAsMap = getResponse.getSourceAsMap();
byte[] sourceAsBytes = getResponse.getSourceAsBytes();
} else {
/*处理没有找到文档的场景。
注意,虽然返回的响应有404状态代码,但是返回的是有效的GetResponse,而不是抛出异常。
这样的响应不包含任何源文档,它的isExists方法返回false。*/
}
当对不存在的索引执行get请求时,响应有404状态代码,抛出ElasticsearchException,需要处理如下:
GetRequest request = new GetRequest("does_not_exist", "doc", "1");
try {
GetResponse getResponse = client.get(request, RequestOptions.DEFAULT);
} catch (ElasticsearchException e) {
if (e.status() == RestStatus.NOT_FOUND) {
}
}
如果已要求特定的文件版本,而现有文件的版本号不同,则会引发版本冲突:
try {
GetRequest request = new GetRequest("posts", "doc", "1").version(2);
GetResponse getResponse = client.get(request, RequestOptions.DEFAULT);
} catch (ElasticsearchException exception) {
if (exception.status() == RestStatus.CONFLICT) {
}
}
原文:https://www.elastic.co/guide/en/elasticsearch/client/java-rest/6.6/java-rest-high-document-get.html