资讯专栏INFORMATION COLUMN

Elasticsearch Java High Level REST Client(Index AP

wangzy2019 / 1696人阅读

摘要:刷新策略作为提供。的典型侦听器如下所示执行成功完成时调用。处理潜在的失败。如果存在版本冲突,则抛出引发的异常表示返回了版本冲突错误。如果将设置为并且已存在具有相同索引类型和的文档,则会发生相同的情况引发的异常表示返回了版本冲突错误。

Index API 索引请求

IndexRequest需要以下参数:

IndexRequest request = new IndexRequest(
        "posts", 
        "doc",  
        "1");   
String jsonString = "{" +
        ""user":"kimchy"," +
        ""postDate":"2013-01-30"," +
        ""message":"trying out Elasticsearch"" +
        "}";
request.source(jsonString, XContentType.JSON);

posts — 索引。

doc — 类型。

1 — 文档ID。

文档源以字符串形式提供。

提供文档源

除了上面显示的String示例之外,还可以以不同的方式提供文档源:

Map jsonMap = new HashMap<>();
jsonMap.put("user", "kimchy");
jsonMap.put("postDate", new Date());
jsonMap.put("message", "trying out Elasticsearch");
IndexRequest indexRequest = new IndexRequest("posts", "doc", "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", "doc", "1")
        .source(builder);

文档源作为XContentBuilder对象提供,Elasticsearch内置辅助生成JSON内容。

IndexRequest indexRequest = new IndexRequest("posts", "doc", "1")
        .source("user", "kimchy",
                "postDate", new Date(),
                "message", "trying out Elasticsearch");

文档源作为Object键值对提供,转换为JSON格式。

可选参数

可以选择提供以下参数:

request.routing("routing");

路由值。

request.parent("parent");

parent值。

request.timeout(TimeValue.timeValueSeconds(1)); 
request.timeout("1s");

等待主碎片可用的作为TimeValue的超时。

等待主碎片可用的作为String的超时。

request.setRefreshPolicy(WriteRequest.RefreshPolicy.WAIT_UNTIL);
request.setRefreshPolicy("wait_for");

刷新策略作为WriteRequest.RefreshPolicy实例提供。

刷新策略作为String提供。

request.version(2);

版本。

request.versionType(VersionType.EXTERNAL);

版本类型。

request.opType(DocWriteRequest.OpType.CREATE); 
request.opType("create");

操作类型作为DocWriteRequest.OpType值提供。

作为String提供的操作类型:可以为createupdate(默认)。

request.setPipeline("pipeline");

索引文档之前要执行的摄取管道的名称。

同步执行

以下列方式执行IndexRequest时,客户端在继续执行代码之前等待返回IndexResponse

IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);
异步执行

执行IndexRequest也可以以异步方式完成,以便客户端可以直接返回,用户需要通过将请求和侦听器传递给异步索引方法来指定响应或潜在故障的处理方式:

client.indexAsync(request, RequestOptions.DEFAULT, listener);

要执行的IndexRequest和执行完成时要使用的ActionListener

异步方法不会阻塞并立即返回,一旦完成,如果执行成功完成,则使用onResponse方法回调ActionListener,如果失败则使用onFailure方法。

index的典型侦听器如下所示:

listener = new ActionListener() {
    @Override
    public void onResponse(IndexResponse indexResponse) {
        
    }

    @Override
    public void onFailure(Exception e) {
        
    }
};

onResponse — 执行成功完成时调用。

onFailure — 当整个IndexRequest失败时调用。

索引响应

返回的IndexResponse允许检索有关已执行操作的信息,如下所示:

String index = indexResponse.getIndex();
String type = indexResponse.getType();
String id = indexResponse.getId();
long version = indexResponse.getVersion();
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

IndexRequest request = new IndexRequest("posts", "doc", "1")
        .source("field", "value")
        .version(1);
try {
    IndexResponse response = client.index(request, RequestOptions.DEFAULT);
} catch(ElasticsearchException e) {
    if (e.status() == RestStatus.CONFLICT) {
        
    }
}

引发的异常表示返回了版本冲突错误。

如果将opType设置为create并且已存在具有相同索引、类型和ID的文档,则会发生相同的情况:

IndexRequest request = new IndexRequest("posts", "doc", "1")
        .source("field", "value")
        .opType(DocWriteRequest.OpType.CREATE);
try {
    IndexResponse response = client.index(request, RequestOptions.DEFAULT);
} catch(ElasticsearchException e) {
    if (e.status() == RestStatus.CONFLICT) {
        
    }
}

引发的异常表示返回了版本冲突错误。

上一篇:Elasticsearch Java High Level REST Client(入门) 下一篇:Get API

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/72346.html

相关文章

  • Elasticsearch Java High Level REST Client(入门)

    摘要:入门本节描述从获取工件到在应用程序中使用它如何开始使用高级别客户端。保证能够与运行在相同主版本和大于或等于的次要版本上的任何节点通信。与具有相同的发布周期,将版本替换为想要的客户端版本。 Java High Level REST Client 入门 本节描述从获取工件到在应用程序中使用它如何开始使用高级别REST客户端。 兼容性 Java High Level REST Client需...

    honmaple 评论0 收藏0
  • Elasticsearch Java REST Client(目录)

    摘要:用于的官方高级别客户端,基于低级别客户端,它公开特定的方法,并负责请求编组和响应反编组。入门初始化执行请求读取响应日志记录通用配置嗅探器在中被添加。依赖于核心项目,它接受与相同的请求参数,并返回相同的响应对象。 Elasticsearch Java REST Client Java REST Client有两种类型: Java Low Level REST Client:用于Elast...

    roland_reed 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<