官网连接
一、文档APIs
Java 高级 REST 客户端支持以下文档 API:
1.单文档 API
Index API
1.IndexRequest
1.一个IndexRequest需要以下参数:
IndexRequest request = new IndexRequest("posts"); //参数一
request.id("1"); //参数二
String jsonString = "{" +
"\"user\":\"kimchy\"," +
"\"postDate\":\"2013-01-30\"," +
"\"message\":\"trying out Elasticsearch\"" +
"}";
request.source(jsonString, XContentType.JSON); //参数三
指数
请求的文档 ID
提供的文档来源String
2.提供文件来源
String除了上面显示的示例之外,还可以通过不同的方式提供文档源 :
Map<String, Object> jsonMap = new HashMap<>();
jsonMap.put("user", "kimchy");
jsonMap.put("postDate", new Date());
jsonMap.put("message", "trying out Elasticsearch");
IndexRequest indexRequest = new IndexRequest("posts")
.id("1").source(jsonMap); // 提供的文档源Map自动转换为 JSON 格式
XContentBuilder builder = XContentFactory.jsonBuilder();
builder.startObject();
{
builder.field("user", "kimchy");
builder.timeField("postDate", new Date());
builder.field("message", "trying out Elasticsearch");
}
builder.endObject();
IndexRequest indexRequest = new IndexRequest("posts")
.id("1").source(builder);
//文档源作为XContentBuilder对象提供,Elasticsearch 内置帮助器生成 JSON 内容
IndexRequest indexRequest = new IndexRequest("posts")
.id("1")
.source("user", "kimchy",
"postDate", new Date(),
"message", "trying out Elasticsearch");
//以密钥对形式提供的文档源Object,将其转换为 JSON 格式
3.可选值
request.routing("routing"); //路由值
request.timeout(TimeValue.timeValueSeconds(1)); // 等待主分片可用的超时TimeValue
request.timeout("1s"); //等待主分片可用的超时String
request.setRefreshPolicy(WriteRequest.RefreshPolicy.WAIT_UNTIL); //刷新策略作为WriteRequest.RefreshPolicy实例
request.setRefreshPolicy("wait_for");// 刷新策略作为String
request.version(2);//版本号
request.versionType(VersionType.EXTERNAL);//版本类型
request.opType(DocWriteRequest.OpType.CREATE); // 作为DocWriteRequest.OpType值提供的操作类型
request.opType("create");//操作类型提供为String: 可以是create或index(默认)
request.setPipeline("pipeline");//在索引文档之前要执行的摄取管道的名称
== 4.同步执行==
当以下列方式执行 a时,客户端在继续执行代码之前IndexRequest等待返回:IndexResponse
IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);
IOException如果无法在高级 REST 客户端中解析 REST 响应、请求超时或服务器没有返回响应的类似情况,同步调用可能会引发错误。
在服务器返回一个4xx或5xx错误代码的情况下,高级客户端尝试解析响应正文错误详细信息,然后抛出一个泛型ElasticsearchException并将原始ResponseException作为抑制的异常添加到它。
5.异步执行
执行 aIndexRequest也可以以异步方式完成,以便客户端可以直接返回。用户需要通过将请求和侦听器传递给异步索引方法来指定如何处理响应或潜在故障:
client.indexAsync(request, RequestOptions.DEFAULT, listener);
执行完成时IndexRequest执行和使用ActionListener
异步方法不会阻塞并立即返回。完成后,如果执行成功完成,则ActionListener使用该方法回调,如果执行失败,则使用该方法。失败场景和预期异常与同步执行情况相同。onResponseonFailure
一个典型的监听器index看起来像:
listener = new ActionListener<IndexResponse>() {
@Override
public void onResponse(IndexResponse indexResponse) {
}
@Override
public void onFailure(Exception e) {
}
};
// 当执行成功完成时调用。
//当整体IndexRequest失败时调用。
6.索引响应
返回的IndexResponse允许检索有关已执行操作的信息,如下所示:
String index = indexResponse.getIndex();
String id = indexResponse.getId();
if (indexResponse.getResult() == DocWriteResponse.Result.CREATED) {
} else if (indexResponse.getResult() == DocWriteResponse.Result.UPDATED) {
}
ReplicationResponse.ShardInfo shardInfo = indexResponse.getShardInfo();
if (shardInfo.getTotal() != shardInfo.getSuccessful()) {
}
if (shardInfo.getFailed() > 0) {
for (ReplicationResponse.ShardInfo.Failure failure :
shardInfo.getFailures()) {
String reason = failure.reason();
}
}
处理(如果需要)第一次创建文档的情况
处理(如果需要)文档已经存在而被重写的情况
处理成功分片数小于总分片数的情况
处理潜在的故障
如果存在版本冲突,ElasticsearchException则会抛出 an:
IndexRequest request = new IndexRequest("posts")
.id("1")
.source("field", "value")
.setIfSeqNo(10L)
.setIfPrimaryTerm(20);
try {
IndexResponse response = client.index(request, RequestOptions.DEFAULT);
} catch(ElasticsearchException e) {
if (e.status() == RestStatus.CONFLICT) {
}
}
引发的异常表示返回了版本冲突错误
opType如果设置为create并且已经存在具有相同索引和 id 的文档,也会发生同样的情况:
IndexRequest request = new IndexRequest("posts")
.id("1")
.source("field", "value")
.opType(DocWriteRequest.OpType.CREATE);
try {
IndexResponse response = client.index(request, RequestOptions.DEFAULT);
} catch(ElasticsearchException e) {
if (e.status() == RestStatus.CONFLICT) {
}
}
引发的异常表示返回了版本冲突错误
Get API
Get Source API
Exists API
Delete API
Update API
Term Vectors API
2.多文档 API
Bulk API
Multi-Get API
Reindex API
Update By Query API
Delete By Query API
Rethrottle API
Multi Term Vectors API