package org.fanli.elastic; import java.io.IOException; import java.util.Map; import org.apache.http.HttpHost; import org.elasticsearch.action.ActionListener; import org.elasticsearch.action.get.GetRequest; import org.elasticsearch.action.get.GetResponse; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.common.Strings; import org.elasticsearch.search.fetch.subphase.FetchSourceContext; public class GetUtils { private static String clusterName = "my-application"; private static String host = "192.168.1.200"; private static Integer port = 9200; // 相当于数据库名称 public static String indexName = "shose"; // 初始化api客户端 public static RestHighLevelClient client = new RestHighLevelClient( RestClient.builder(new HttpHost(host, port, "http"))); public static void get1() { // 获取请求 index, _id GetRequest request = new GetRequest("posts", "2"); // 禁用源检索,默认情况下启用 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); request.storedFields("message"); // String[] includes = Strings.EMPTY_ARRAY; // String[] excludes = new String[]{"message"}; // FetchSourceContext fetchSourceContext = // new FetchSourceContext(true, includes, excludes); // request.fetchSourceContext(fetchSourceContext); // ---可选参数---- // request.routing("routing"); // request.preference("preference"); // // 实时标志设置 // request.realtime(false); // // 刷新 // request.refresh(true); // request.version(2); // request.versionType(VersionType.EXTERNAL); // --------- // 同步 try { GetResponse getResponse = client.get(request, RequestOptions.DEFAULT); // String message = getResponse.getField("message").getValue(); // 返回的内容GetResponse允许检索请求的文档及其元数据和最终存储的字段。 String index = getResponse.getIndex(); String id = getResponse.getId(); // 判断是否找到 if (getResponse.isExists()) { long version = getResponse.getVersion(); System.out.println(version); // 将该文档检索为 String String sourceAsString = getResponse.getSourceAsString(); System.out.println(sourceAsString); // 文档检索为 Map Map sourceAsMap = getResponse.getSourceAsMap(); System.out.println(sourceAsMap); // 将该文档检索为 byte[] byte[] sourceAsBytes = getResponse.getSourceAsBytes(); System.out.println(sourceAsBytes); } else { // 处理找不到文档的情况。请注意,尽管返回的响应具有404状态码,但返回的是有效值GetResponse,而不是引发异常。 // 这样的响应不包含任何源文档,并且其isExists方法返回false。 } } catch (IOException e) { e.printStackTrace(); } // 当针对不存在的索引执行get请求时,响应具有404状态码,并且ElasticsearchException抛出get ,需要按以下方式处理: // 处理由于索引不存在而引发的异常 // GetRequest request = new GetRequest("does_not_exist", "1"); // try { // GetResponse getResponse = client.get(request, RequestOptions.DEFAULT); // } catch (ElasticsearchException e) { // if (e.status() == RestStatus.NOT_FOUND) { // // } // } // 如果请求了特定的文档版本,并且现有文档具有不同的版本号,则会引发版本冲突: // 引发的异常表明已返回版本冲突错误 // try { // GetRequest request = new GetRequest("posts", "1").version(2); // GetResponse getResponse = client.get(request, RequestOptions.DEFAULT); // } catch (ElasticsearchException exception) { // if (exception.status() == RestStatus.CONFLICT) { // // } // } // 异步 ActionListener listener = new ActionListener() { @Override public void onResponse(GetResponse getResponse) { } @Override public void onFailure(Exception e) { } }; client.getAsync(request, RequestOptions.DEFAULT, listener); } // 判断是否存在 public static void get2() { // index、id文件编号 GetRequest getRequest = new GetRequest("shose", "20"); getRequest.fetchSourceContext(new FetchSourceContext(false)); // 禁用获取存储的字段。 getRequest.storedFields("_none_"); try { boolean exists = client.exists(getRequest, RequestOptions.DEFAULT); System.out.println(exists); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { get2(); System.out.println("------------ 测试结束 -------------------------"); } }