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);
}
}
}