es文档整理2 getapi

package sss.first;

import java.io.IOException;
import java.util.Map;

import org.elasticsearch.ElasticsearchException;
import org.elasticsearch.action.ActionListener;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.Strings;
import org.elasticsearch.index.VersionType;
import org.elasticsearch.rest.RestStatus;
import org.elasticsearch.search.fetch.subphase.FetchSourceContext;

public class GetApi {

//获取api
//获取请求
public static GetRequest getRequest() {
GetRequest getRequest = new GetRequest(
        "posts", 
        "doc",  
        "1");   
return getRequest;
}
//可选参数
public static void optional(RestHighLevelClient client,GetRequest request) throws IOException {
// 禁用源检索,默认启用
request.fetchSourceContext(new FetchSourceContext(false)); 

// 为特定字段配置源包含
String[] includes = new String[]{"message", "*Date"};
String[] excludes = Strings.EMPTY_ARRAY;
FetchSourceContext fetchSourceContext = new FetchSourceContext(true, includes, excludes);
request.fetchSourceContext(fetchSourceContext);
// 配置特定字段的源排除
String[] includes1 = Strings.EMPTY_ARRAY;
String[] excludes1 = new String[]{"message"};
FetchSourceContext fetchSourceContext1 = new FetchSourceContext(true, includes1, excludes1);
request.fetchSourceContext(fetchSourceContext1);
// 配置特定存储字段的检索(要求字段在映射中单独存储)
// 检索message存储的字段(要求将字段分开存储在映射中)
request.storedFields("message"); 
GetResponse getResponse = client.get(request);
String message = (String) getResponse.getField("message").getValue();
// 路由值
request.routing("routing");

// 父母的价值
request.parent("parent");
// 偏好值
request.preference("preference");
// 设置实时标志为false(true默认)
request.realtime(false);
// 在检索文档之前执行刷新(false默认情况下)
request.refresh(true); 
// 版本号
request.version(2);
// 版本类型
request.versionType(VersionType.EXTERNAL);
}
//同步执行
public static GetResponse synchronous(RestHighLevelClient client,GetRequest getRequest) throws IOException {
GetResponse getResponse = client.get(getRequest);
return getResponse;
}
public static GetResponse asynchronous(RestHighLevelClient client,GetRequest getRequest) throws IOException {
client.getAsync(getRequest, new ActionListener<GetResponse>() {
@Override
public void onResponse(GetResponse response) {
// 执行成功完成时调用。答复是作为参数提供的。
}
@Override
public void onFailure(Exception e) {
// 在失败的情况下调用。引发的异常是作为参数提供的。
}
});
return null;
}
//获取响应
public static void getResponse(GetResponse getResponse) {
String index = getResponse.getIndex();
String type = getResponse.getType();
String id = getResponse.getId();
if (getResponse.isExists()) {
    long version = getResponse.getVersion();
    
    //以文件形式检索文档 String
    String sourceAsString = getResponse.getSourceAsString(); 
    
    //以文件形式检索文档 Map<String, Object>
    Map<String, Object> sourceAsMap = getResponse.getSourceAsMap(); 
  
    //以文件形式检索文档 byte[]
    byte[] sourceAsBytes = getResponse.getSourceAsBytes();          
} else {
    //处理找不到文档的情况。请注意,虽然返回的响应具有404状态码,
//但返回有效值GetResponse而不是抛出异常。
//此类回复不包含任何源文件并且其isExists方法返回false。
}
}
//当针对不存在的索引执行获取请求时,响应具有404状态码,
//ElasticsearchException得到抛出,需要如下处理:
public static void tryException(RestHighLevelClient client,GetRequest request) throws IOException {
request = new GetRequest("does_not_exist", "doc", "1");
try {
    GetResponse getResponse = client.get(request);
} catch (ElasticsearchException e) {
    if (e.status() == RestStatus.NOT_FOUND) {
        //处理抛出的异常,因为索引不存在
   
    }
}
}
// 如果请求了特定的文档版本,并且现有文档具有不同的版本号,则会引发版本冲突:
public static void tryException2(RestHighLevelClient client,GetRequest request) throws IOException {

try {
    request = new GetRequest("posts", "doc", "1").version(2);
    GetResponse getResponse = client.get(request);
} catch (ElasticsearchException exception) {
    if (exception.status() == RestStatus.CONFLICT) {
        //引发的异常表示返回了版本冲突错误

    }
}
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值