将Elasticsearch中的mapping转换 Java pojo

es mapping 转 java 类

最近在使用es,发现每次mapping 转 java类,字段一个个复制很麻烦,又容易漏掉字段,最后自己写了个工具类。

工具类

代码如下:


package cdc.util;

import lombok.Data;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.GetMappingsRequest;
import org.elasticsearch.client.indices.GetMappingsResponse;
import org.elasticsearch.cluster.metadata.MappingMetaData;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * @author 叶勇
 * @date 2023/4/7 15:27
 */
@Data
public class EsMappingToPoJoUtil {


    public static void esMappingToPoJo(RestHighLevelClient restHighLevelClient, String indexName, String className, String outputDir) throws IOException {
        GetMappingsRequest request = new GetMappingsRequest();
        request.indices(indexName);
        GetMappingsResponse response = restHighLevelClient.indices().getMapping(request, RequestOptions.DEFAULT);
        MappingMetaData mappingMetadata = response.mappings().get(indexName);
        Map<String, Object> mapping = mappingMetadata.getSourceAsMap();
        Map<String, Object> properties = (Map<String, Object>) mapping.get("properties");
        List<Field> fields = new ArrayList<>();
        for (Map.Entry<String, Object> entry : properties.entrySet()) {
            String fieldName = entry.getKey();
            Map<String, Object> fieldMap = (Map<String, Object>) entry.getValue();
            String fieldType = (String) fieldMap.get("type");
            if(fieldType.equals("keyword")||fieldType.equals("text")){
                fieldType = "String";
            }else if(fieldType.equals("date")){
                fieldType = "Date";
            }else if(fieldType.equals("double")){
                fieldType = "Double";
            }else if(fieldType.equals("integer")){
                fieldType = "Integer";
            }else if(fieldType.equals("long")){
                fieldType = "Long";
            }else if(fieldType.equals("nested")){
                fieldType = "List<Map<String, Object>>";
            }else if(fieldType.equals("geo_point")){
                fieldType = "GeoPoint";
            }
            Map<String, Object> fieldProperties = (Map<String, Object>) fieldMap.get("properties");
            Field field = new Field(fieldName, fieldType, fieldProperties);
            fields.add(field);
        }
        StringBuilder sb = new StringBuilder();
        sb.append("public class ").append(className).append(" {\n");
        for (Field field : fields) {
            sb.append("\tprivate ").append(field.getType()).append(" ").append(field.getName()).append(";\n");
        }
        sb.append("}");
        String javaCode = sb.toString();
        // 写入Java文件
        String filePath = outputDir + "/" + className + ".java";
        File file = new File(filePath);
        try (PrintWriter writer = new PrintWriter(file)) {
            writer.write(javaCode);
        }
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值