java动态创建es 及mapping

发布时间 2023-10-24 14:34:07作者: ni当像鸟飞往你的山
public CreateIndexResponse createIndexWithMapping(String index, Map<String, String> mapping) {
    CreateIndexResponse response = null;
    try {
        CreateIndexRequest request = new CreateIndexRequest(index);
        request.settings(Settings.builder().put("index.number_of_shards", defaultShards)
                .put("index.number_of_replicas", defaultReplicas));
        request.mapping(generateMapping(mapping));
        response = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);
    } catch (Exception e) {
        log.error("创建索引[{}]失败", index, e);
    }
    return response;
}

private XContentBuilder generateMapping(Map<String, String> mapping) throws IOException {
    XContentBuilder builder = XContentFactory.jsonBuilder();
    builder.startObject();
    {
        builder.startObject("properties");
        for (Map.Entry<String, String> entry : mapping.entrySet()) {
            {
                builder.startObject(entry.getKey());
                {
                    String dataType=entry.getValue();
                    if(dataType == null || "".equals(dataType.trim())){
                        dataType = "String";
                    }
                    dataType = dataType.toLowerCase();
                    if("string".equals(dataType)){
                        dataType="text";
                    }
                    builder.field("type", dataType);
                }
                builder.endObject();
            }
        }
        builder.endObject();
    }
    builder.endObject();

    return builder;
}

  参考:https://www.cnblogs.com/a-du/p/8807661.html

https://www.zhihu.com/tardis/bd/art/615012104?source_id=1001