Elasticsearch Java High Level REST Client(Get API)
Get API
Get请求
GetRequest
需要以下参数:
GetRequest getRequest = new GetRequest( "posts", "doc", "1");
posts
— 索引。doc
— 类型。1
— 文档id。
可选参数
可以选择提供以下参数:
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();
- 配置特定存储字段的检索(要求字段分别存储在映射中)。
- 检索
message
存储字段(要求字段分别存储在映射中)。
request.routing("routing");
- 路由值。
request.parent("parent");
- parent值。
request.preference("preference");
- 偏好值。
request.realtime(false);
- 将
realtime
标志设置为false
(默认为true
)。
request.refresh(true);
- 在检索文档之前执行刷新(默认为
false
)。
request.version(2);
- 版本。
request.versionType(VersionType.EXTERNAL);
- 版本类型。
同步执行
以下列方式执行GetRequest
时,客户端在继续执行代码之前等待返回GetResponse
:
GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);
异步执行
执行GetRequest
也可以以异步方式完成,以便客户端可以直接返回,用户需要通过将请求和侦听器传递给异步get
方法来指定响应或潜在故障的处理方式:
client.getAsync(request, RequestOptions.DEFAULT, listener);
- 要执行的
GetRequest
和执行完成时要使用的ActionListener
。
异步方法不会阻塞并立即返回,完成后,如果执行成功完成,则使用onResponse
方法回调ActionListener
,如果失败则使用onFailure
方法。
get
的典型监听器看起来像:
ActionListener<GetResponse> listener = new ActionListener<GetResponse>() { @Override public void onResponse(GetResponse getResponse) { } @Override public void onFailure(Exception e) { } };
onResponse
— 执行成功完成时调用。onFailure
— 在整个GetRequest失败时调用。
Get响应
返回的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 { }
- 以字符串形式检索文档。
- 将文档检索为
Map<String, Object>
。 - 以
byte[]
的形式检索文档。 - 处理未找到文档的方案,请注意,虽然返回的响应具有
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) { } }
- 引发的异常表示返回了版本冲突错误。
上一篇:Index API
下一篇:Exists API
相关推荐
newbornzhao 2020-09-14
做对一件事很重要 2020-09-07
renjinlong 2020-09-03
明瞳 2020-08-19
李玉志 2020-08-19
mengyue 2020-08-07
molong0 2020-08-06
AFei00 2020-08-03
molong0 2020-08-03
wenwentana 2020-08-03
YYDU 2020-08-03
另外一部分,则需要先做聚类、分类处理,将聚合出的分类结果存入ES集群的聚类索引中。数据处理层的聚合结果存入ES中的指定索引,同时将每个聚合主题相关的数据存入每个document下面的某个field下。
sifeimeng 2020-08-03
心丨悦 2020-08-03
liangwenrong 2020-07-31
sifeimeng 2020-08-01
mengyue 2020-07-30
tigercn 2020-07-29
IceStreamLab 2020-07-29