通过给定一个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"}}}'

最新文章

  1. The superclass &quot;javax.servlet.http.HttpServlet&quot; was not found on the Java Build Path解决方案
  2. python selenium与自动化
  3. PHP工厂模式的研究
  4. (原)java中对象复制、==、equals
  5. Uploadify上传问题
  6. linux中ll和du的区别
  7. JavaScript 垃圾回收机制分析
  8. 记一次 nginx 504 Gateway Time-out
  9. Beyond Compare 忽略两个文件内容的顺序比较文件内容(xjl456852原创)
  10. Linux下包含头文件的路径问题与动态库链接路径问题
  11. 梯度下降算法的一点认识(Ng第一课)
  12. 【solr这四个主题】大约VelocityResponseWriter
  13. mfc---CFileDialog的过滤器
  14. NPOI:处理xls文件中的合并行
  15. Docker commit 命令保存的镜像文件太大的问题
  16. .Net持续集成 —— Jenkins+Git+WebDeploy
  17. VS code 配置C++编译环境
  18. android 开发 View _10_ Path之基本操作
  19. python之函数用法staticmethod
  20. 《C++ Primer Plus》第10章 对象和类 学习笔记

热门文章

  1. Leetcode 493.翻转对
  2. fade away
  3. linux系统web日志分析脚本
  4. Mysql 死锁
  5. 将数据缓存到sessionStorage中
  6. luogu3723 [AH2017/HNOI2017]礼物 【NTT】
  7. POJ2154 Color 【Polya定理 + 欧拉函数】
  8. bzoj 4131: 并行博弈 (parallel)
  9. 【CCF】JSON查询
  10. linux下头文件