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("------------ 测试结束 -------------------------");
|
}
|
|
}
|