通过Java的Domain类构建ElasticSearch的mapping
2024-10-18 10:31:36
通过给定一个Java的class类自行创建ElasticSearch的mapping
Order的domain类
public class Order {
public String system_id;
public String finger_id;
public String merchant_id;
public Double tx_money;
public String pay_date;
public String payment_status;
public Date settle_date;
public Long goods_count;
}
用于构建elasticsearch的mapping启动类
public class startMapping {
private static Log log = LogFactory.getLog(startMapping.class);
private static TransportClient client = null;
private static IndicesAdminClient adminClient; private static TransportClient getClient() throws UnknownHostException {
Settings settings = Settings.settingsBuilder().put("cluster.name", Constant.CLUSTER).build();
TransportClient client = TransportClient.builder().settings(settings).build();
client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(Constant.ESHOST), Constant.ESPORT));
return client;
} static{
try {
client = getClient();
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
//elasticsearch-mapping build
DoMapping(); } /**
* 判断ElasticSearch中的索引是否存在
*/
private static boolean exists(String index){
adminClient = client.admin().indices();
IndicesExistsRequest request = new IndicesExistsRequest(index);
IndicesExistsResponse response = adminClient.exists(request).actionGet();
if (response.isExists()) {
return true;
}
return false;
} private static void DoMapping() {
if(exists(Constant.INDEX)){
System.out.println(Constant.INDEX+"索引已经存在!");
log.info(Constant.INDEX+"索引已经存在!");
return;
}
String template = "{\n"
+"\t\""+Constant.INDEX+"\":{\n"
+"\t\t\"properties\":{\n"
+ "\t\t{#}\n"
+ "\t\t\t\t}\n"
+ "\t\t}\n"
+"}";
String fieldString = getClassMapping();
template = template.replace("{#}",fieldString);
client.admin().indices().prepareCreate(Constant.INDEX).addMapping(Constant.INDEX, template).get();
System.out.println(template);
System.out.println("创建ElasticSearch Mapping完成!!!");
log.info("创建ElasticSearch Mapping完成!!!");
} /**
* 从类的字段映射处elasticsearch中的字段
* @return
*/
public static String getClassMapping() {
StringBuilder fieldstring = new StringBuilder();
Field[] fields = Order.class.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
fieldstring.append("\t\t\t\t\"" + fields[i].getName().toLowerCase() + "\": {\n");
fieldstring.append("\t\t\t\t\t\t\"type\": \""
+ GetElasticSearchMappingType(fields[i].getType().getSimpleName()) + "\n");
if (i == fields.length-1) {
fieldstring.append("\t\t\t\t\t}\n");
} else {
fieldstring.append("\t\t\t\t\t},\n");
}
}
return fieldstring.toString();
} private static String GetElasticSearchMappingType(String varType) {
String es = "String";
switch (varType) {
case "Date":
es = "date\"\n"+"\t\t\t\t\t\t,\"format\":\"yyyy-MM-dd HH:mm:ss\"\n"+"\t\t\t\t\t\t,\"null_value\":\"1900-01-01 00:00:01\"";
break;
case "Double":
es = "double\"\n"+"\t\t\t\t\t\t,\"null_value\":\"NaN\"";
break;
case "Long":
es = "long\"";
break;
default:
es = "string\"";
break;
}
return es;
} }
关于elasticsearch mapping字段手动增加
curl -XPUT http://192.168.46.165:9200/t_order/_mapping/t_order?pretty -d '{"properties":{"order_ip":{"type":"string"}}}'
最新文章
- The superclass ";javax.servlet.http.HttpServlet"; was not found on the Java 	 Build Path解决方案
- python selenium与自动化
- PHP工厂模式的研究
- (原)java中对象复制、==、equals
- Uploadify上传问题
- linux中ll和du的区别
- JavaScript 垃圾回收机制分析
- 记一次 nginx 504 Gateway Time-out
- Beyond Compare 忽略两个文件内容的顺序比较文件内容(xjl456852原创)
- Linux下包含头文件的路径问题与动态库链接路径问题
- 梯度下降算法的一点认识(Ng第一课)
- 【solr这四个主题】大约VelocityResponseWriter
- mfc---CFileDialog的过滤器
- NPOI:处理xls文件中的合并行
- Docker commit 命令保存的镜像文件太大的问题
- .Net持续集成 —— Jenkins+Git+WebDeploy
- VS code 配置C++编译环境
- android 开发 View _10_ Path之基本操作
- python之函数用法staticmethod
- 《C++ Primer Plus》第10章 对象和类 学习笔记