zoukankan      html  css  js  c++  java
  • Java High Level REST Client 之 创建索引

    1. 创建索引请求

    CreateIndexRequest request = new CreateIndexRequest("twitter");


    2.设置

    2.1 分别设置

    2.1.1 索引设置

    request.settings(Settings.builder() 
        .put("index.number_of_shards", 3)
        .put("index.number_of_replicas", 2)
    );

    2.1.2 映射表

    request.mapping(
            "{
    " +
            "  "properties": {
    " +
            "    "message": {
    " +
            "      "type": "text"
    " +
            "    }
    " +
            "  }
    " +
            "}", 
            XContentType.JSON);

    也可以用map:

    Map<String, Object> message = new HashMap<>();
    message.put("type", "text");
    Map<String, Object> properties = new HashMap<>();
    properties.put("message", message);
    Map<String, Object> mapping = new HashMap<>();
    mapping.put("properties", properties);
    request.mapping(mapping);

    或者XContentBuilder :

    XContentBuilder builder = XContentFactory.jsonBuilder();
    builder.startObject();
    {
        builder.startObject("properties");
        {
            builder.startObject("message");
            {
                builder.field("type", "text");
            }
            builder.endObject();
        }
        builder.endObject();
    }
    builder.endObject();
    request.mapping(builder);

    2.1.3 索引别名

    request.alias(new Alias("twitter_alias").filter(QueryBuilders.termQuery("user", "kimchy")));

    别名不仅仅可以关联一个索引,它能聚合多个索引。

    例如我们为索引my_index_1 和 my_index_2 创建一个别名my_index_alias,这样对my_index_alias的操作(仅限读操作),会操作my_index_1和my_index_2,类似于聚合了my_index_1和my_index_2.但是我们是不能对my_index_alias进行写操作,当有多个索引时alias,不能区分到底操作哪一个。

    2.2 整体设置

    request.source("{
    " +
            "    "settings" : {
    " +
            "        "number_of_shards" : 1,
    " +
            "        "number_of_replicas" : 0
    " +
            "    },
    " +
            "    "mappings" : {
    " +
            "        "properties" : {
    " +
            "            "message" : { "type" : "text" }
    " +
            "        }
    " +
            "    },
    " +
            "    "aliases" : {
    " +
            "        "twitter_alias" : {}
    " +
            "    }
    " +
            "}", XContentType.JSON);


    3.其他参数

    超时 (Timeout to wait for the all the nodes to acknowledge the index creation as a TimeValue):

    request.setTimeout(TimeValue.timeValueMinutes(2));

    连接主节点超时(Timeout to connect to the master node as a TimeValue):

    request.setMasterTimeout(TimeValue.timeValueMinutes(1));
    image


    4.执行请求

    4.1 同步执行

    CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT);

    4.2 异步执行

    client.indices().createAsync(request, RequestOptions.DEFAULT, listener);

    其中listener:

    ActionListener<CreateIndexResponse> listener =
            new ActionListener<CreateIndexResponse>() {
    
        @Override
        public void onResponse(CreateIndexResponse createIndexResponse) {
            
        }
    
        @Override
        public void onFailure(Exception e) {
            
        }
    };


    5.响应

    boolean acknowledged = createIndexResponse.isAcknowledged(); 
    boolean shardsAcknowledged = createIndexResponse.isShardsAcknowledged();







  • 相关阅读:
    Java中如何设置表格处于不可编辑状态
    Android界面实现不成功(无报错)
    Eclipse网页报错
    【蓝桥杯】基础练习 十六进制转八进制 Java语言
    分析算法的复杂度
    Android Studio安装错误及解决办法
    Android程序报错以及解决办法
    Genymotion安装使用(配合Android Studio)
    Eclipse导入本地项目并运行
    蓝桥杯Java——安装软件Eclipse以及JDK
  • 原文地址:https://www.cnblogs.com/betterwgo/p/11268869.html
Copyright © 2011-2022 走看看