admin
2020-05-06 24a8d17e007545f7426c48352109aa1a9c6587ee
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
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<String, Object>
                Map<String, Object> 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<GetResponse> listener = new ActionListener<GetResponse>() {
            @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("------------ 测试结束 -------------------------");
    }
 
}