一文读懂 Java操作Elasticsearch( 六 )

文档源作为对象提供,弹性搜索内置帮助器生成 JSON 内容 XContentBuilder
IndexRequest indexRequest = new IndexRequest("student").id("1").source("id", 1,"name", "admin","content", "trying out Elasticsearch");
作为密钥对提供的文档源,该源将转换为 JSON 格式Object
 
5.1.3 可选参数
  • 可以选择提供以下参数:
request.routing("routing"); //<1>
<1> 路由值
request.timeout(TimeValue.timeValueSeconds(1)); //<1>request.timeout("1s");// <2>
<1> 超时以等待主分片 作为 TimeValue<2> 超时以等待主分片 作为 String
request.setRefreshPolicy(WriteRequest.RefreshPolicy.WAIT_UNTIL); //<1>request.setRefreshPolicy("wait_for"); //<2>
<1> 将策略刷新 为实例 WriteRequest.RefreshPolicy<2> 将策略刷新 为 String
request.version(2);
版本
request.versionType(VersionType.EXTERNAL); //版本类型
版本类型
request.opType(DocWriteRequest.OpType.CREATE);//<1>request.opType("create");//<2>
<1> 作为值提供的操作类型 DocWriteRequest.OpType<2> 提供的操作类型可以是 或(默认) String create index
request.setPipeline("pipeline");
在索引文档之前要执行的包含管道的名称
 
5.1.4 同步执行
  • 以下列方式执行 时,客户端将等待 返回 ,然后再继续执行代码: IndexRequest IndexResponse
IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);
  • 同步调用可能会引发 在高级 REST 客户端中无法解析 REST 响应、请求会发出时间或类似情况下没有从服务器返回的响应的情况下 。 IOException
  • 在服务器返回 或 错误代码的情况下,高级客户端尝试分析响应正文错误详细信息,然后引发泛型,并将原始代码添加为抑制异常 。 4xx 5xx ElasticsearchExceptionResponseException
5.1.5 异步执行
  • 也可以以异步方式执行 ,以便客户端可以直接返回 。用户需要指定如何通过将请求和侦听器传递到异步索引方法来处理响应或潜在故障: IndexRequest
client.indexAsync(request, RequestOptions.DEFAULT, listener); //<1>
<1> 执行完成时要执行和要使用的 IndexRequest ActionListener
  • 异步方法不会阻止并立即返回 。完成后,如果执行成功完成,则使用 方法调用 ,如果执行失败,则使用 该方法 。失败方案和预期异常与同步执行案例相同 。 ActionListener onResponse onFailure
  • 典型的侦听器如下所示:index
listener = new ActionListener<IndexResponse>() {@Overridepublic void onResponse(IndexResponse indexResponse) {//<1> 成功执行时调用 。}@Overridepublic void onFailure(Exception e) {//<2> 当整个失败时调用 。IndexRequest}};
<1> 成功执行时调用 。
<2> 当整个失败时调用 。> IndexRequest
5.1.6 索引响应
  • 返回的允许检索有关执行操作的信息,如下所示: IndexResponse
String index = indexResponse.getIndex();String id = indexResponse.getId();if (indexResponse.getResult() == DocWriteResponse.Result.CREATED) {//<1>} else if (indexResponse.getResult() == DocWriteResponse.Result.UPDATED) {//<2>}ReplicationResponse.ShardInfo shardInfo = indexResponse.getShardInfo();if (shardInfo.getTotal() != shardInfo.getSuccessful()) {// <3>}if (shardInfo.getFailed() > 0) {for (ReplicationResponse.ShardInfo.Failure failure :shardInfo.getFailures()) {String reason = failure.reason(); //<4>}}
<1> 处理(如果需要)首次创建文档的情况
<2> 处理(如果需要)文档被重写的情况,因为它已经存在
<3> 处理成功分片数少于总分片的情况
<4> 处理潜在的故障