Elasticsearch Java High Level REST Client(Get API)

Get API

Get请求

GetRequest须要如下参数:segmentfault

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时,客户端在继续执行代码以前等待返回GetResponseide

GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);

异步执行

执行GetRequest也能够以异步方式完成,以便客户端能够直接返回,用户须要经过将请求和侦听器传递给异步get方法来指定响应或潜在故障的处理方式:post

client.getAsync(request, RequestOptions.DEFAULT, listener);
  • 要执行的GetRequest和执行完成时要使用的ActionListener

异步方法不会阻塞并当即返回,完成后,若是执行成功完成,则使用onResponse方法回调ActionListener,若是失败则使用onFailure方法。fetch

get的典型监听器看起来像:code

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

相关文章
相关标签/搜索