Elasticsearch java api 6.6 Document APIs(2) Get API

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值