一文读懂 Java操作Elasticsearch( 三 )


XContentBuilder builder = XContentFactory.jsonBuilder(); // 使用XContentBuilder内容生成器builder.startObject();{builder.startObject("properties");{builder.startObject("message");{builder.field("type", "text");}builder.endObject();}builder.endObject();}builder.endObject();

映射作为对象提供的源,弹性搜索内置帮助器,用于生成 JSON 内容 XContentBuilder
4.1.5 索引别名
  • 可以在索引创建时设置别名
request.alias(new Alias("twitter_alias").filter(QueryBuilders.termQuery("user", "kimchy"))); //要定义的别名 
4.1.6 提供整个源
  • 前面我们都是一步一步的设置的,其实也可以提供整个源,包括其所有部分(映射、设置和别名):
request.source("{n" +""settings" : {n" +""number_of_shards" : 1,n" +""number_of_replicas" : 0n" +"},n" +""mappings" : {n" +""properties" : {n" +""message" : { "type" : "text" }n" +"}n" +"},n" +""aliases" : {n" +""twitter_alias" : {}n" +"}n" +"}", XContentType.JSON);
作为 JSON 字符串提供的源 。它也可以作为 或 提供 。MapXContentBuilder
 
4.1.7 可选参数
  • 可以选择提供以下参数:
request.setTimeout(TimeValue.timeValueMinutes(2));
超时以等待所有节点将索引创建确认为 TimeValue
request.setMasterTimeout(TimeValue.timeValueMinutes(1));
以作为 TimeValue
request.waitForActiveShards(ActiveShardCount.from(2));request.waitForActiveShards(ActiveShardCount.DEFAULT);
在创建索引 API 返回响应之前等待的活动分片副本数,作为 in t在创建索引 API 返回响应之前等待的活动分片副本数,作为 ActiveShardCount
4.1.8 同步执行
  • 以下列方式执行 时,客户端将等待 返回 ,然后再继续执行代码: CreateIndexRequest CreateIndexResponse
【一文读懂 Java操作Elasticsearch】CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT);
同步调用可能会引发 在高级 REST 客户端中无法解析 REST 响应、请求会发出时间或类似情况下没有从服务器返回的响应的情况下 。 IOException在服务器返回 或 错误代码的情况下,高级客户端尝试分析响应正文错误详细信息,然后引发泛型,并将原始代码添加为抑制异常 。 4xx 5xx ElasticsearchExceptionResponseException
4.1.9 异步执行
  • 也可以以异步方式执行 ,以便客户端可以直接返回 。用户需要指定如何通过将请求和侦听器传递到异步创建索引方法来处理响应或潜在故障: CreateIndexRequest
client.indices().createAsync(request, RequestOptions.DEFAULT, listener);
执行完成时要执行和要使用的 CreateIndexRequest ActionListener
  • 异步方法不会阻止并立即返回 。完成后,如果执行成功完成,则使用 onResponse 方法调用 ,如果执行失败,则使用 onFailure 该方法 。失败方案和预期异常与同步执行案例相同 。 ActionListener
    典型的侦听器如下所示:
ActionListener<CreateIndexResponse> listener =new ActionListener<CreateIndexResponse>() {@Overridepublic void onResponse(CreateIndexResponse createIndexResponse) {//成功执行时调用 。}@Overridepublic void onFailure(Exception e) {//当整个失败时调用}};  
4.1.10 创建索引响应
  • 返回的允许检索有关执行操作的信息,如下所示: CreateIndexResponse
boolean acknowledged = createIndexResponse.isAcknowledged(); // <1>boolean shardsAcknowledged = createIndexResponse.isShardsAcknowledged(); // <2>
<1> 指示所有节点是否都已确认请求
<2> 指示在计时之前是否为索引中的每个分片启动所需的分片副本数
 
4.2 删除索引(Delete Index Api) 
4.2.1 案例:/*** 删除索引.* url:https://i-code.online/* @param args*/public static void main(String[] args) {//1. 创建客户端RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("127.0.0.1",9200)));//2. 创建DeleteIndexRequest 接受 index(索引名) 参数DeleteIndexRequest request = new DeleteIndexRequest("student");//超时以等待所有节点确认索引删除 参数为 TimeValue 类型request.timeout(TimeValue.timeValueMinutes(1));//连接master节点的超时时间(使用TimeValue方式)request.masterNodeTimeout(TimeValue.timeValueMinutes(1));try {// 调用deleteAcknowledgedResponse response = client.indices().delete(request, RequestOptions.DEFAULT);System.out.printf("isAcknowledged:%s", response.isAcknowledged());} catch (IOException e) {e.printStackTrace();}}


推荐阅读