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

通过Java的Domain类构建ElasticSearch的mapping的更多相关文章

  1. 在 Java 应用程序中使用 Elasticsearch

    如果您使用过 Apache Lucene 或 Apache Solr,就会知道它们的使用体验非常有趣.尤其在您需要扩展基于 Lucene 或 Solr 的解决方案时,您就会了解 Elasticsear ...

  2. java中Inetaddress类

    InetAddress类 InetAddress类用来封装我们前面讨论的数字式的IP地址和该地址的域名. 你通过一个IP主机名与这个类发生作用,IP主机名比它的IP地址用起来更简便更容易理解. Ine ...

  3. 浅析Java.lang.ProcessBuilder类

    最近由于工作需要把用户配置的Hive命令在Linux环境下执行,专门做了一个用户管理界面特地研究了这个不经常用得ProcessBuilder类.所以把自己的学习的资料总结一下. 一.概述      P ...

  4. 深入研究java.lang.ProcessBuilder类

     深入研究java.lang.ProcessBuilder类 一.概述       ProcessBuilder类是J2SE 1.5在java.lang中新添加的一个新类,此类用于创建操作系统进程,它 ...

  5. Java中ArrayList类详解

    1.什么是ArrayList ArrayList就是传说中的动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了如下一些好处: 动态的增加和减少元素 实现了ICollection和ILis ...

  6. java 学习笔记——类之间的关系之封装、继承与多态的详解

    封装 一个封装的简单例子 封装就是把对象的属性(状态)和方法(行为)结合在一起,并尽可能隐蔽对象的内部细节,成为一个不可分割的独立单位(即对象),对外形成一个边界,只保留有限的对外接口使之与外部发生联 ...

  7. 【JAVA零基础入门系列】Day11 Java中的类和对象

    今天要说的是Java中两个非常重要的概念--类和对象. 什么是类,什么又是对象呢?类是对特定集合的概括描述,比如,人,这个类,外观特征上,有名字,有年龄,能说话,能吃饭等等,这是我们作为人类的相同特征 ...

  8. JDK1.8源码(四)——java.util.Arrays 类

    java.util.Arrays 类是 JDK 提供的一个工具类,用来处理数组的各种方法,而且每个方法基本上都是静态方法,能直接通过类名Arrays调用. 1.asList public static ...

  9. elasticsearch系列七:ES Java客户端-Elasticsearch Java client(ES Client 简介、Java REST Client、Java Client、Spring Data Elasticsearch)

    一.ES Client 简介 1. ES是一个服务,采用C/S结构 2. 回顾 ES的架构 3. ES支持的客户端连接方式 3.1 REST API ,端口 9200 这种连接方式对应于架构图中的RE ...

随机推荐

  1. docker镜像与docker容器的区别

    镜像的一个实例称为容器. 你有一个镜像,这是你描述的一组图层. 如果你开始这个镜像,你有一个运行这个镜像的容器. 您可以拥有许多相同镜像的正在运行的容器. docker images 查看所有镜像 d ...

  2. 遇到的python3 不兼容 python2的地方

    python3中执行以下代码 >>> import subprocess >>> p=subprocess.Popen('ls',shell=True,stdout ...

  3. 【转】Unity3D学习日记(一)使用UGUI制作虚拟摇杆

    http://blog.csdn.net/begonia__z/article/details/51170059 如今手机游戏玩法多种多样,尤其使用虚拟摇杆进行格斗类游戏开发或者是MMORPG成为了主 ...

  4. uvalive 6323 状态压缩DP

    思路:dp[i][j][x]表示状态 i 以 j 为结束 得分为 x 的方案数. #include<iostream> #include<cstdio> #include< ...

  5. [01] radio ,checkbox 表单文字对齐

    http://www.cnblogs.com/wangsir015/p/5555818.html 这几天在做表单时总会碰到复选框(checkbox)和单选框(radio)与文字不对齐的问题,要不是ch ...

  6. 分裂游戏(bzoj 1188)

    Description 聪聪和睿睿最近迷上了一款叫做分裂的游戏. 该游戏的规则试: 共有 n 个瓶子, 标号为 0,1,2.....n-1, 第 i 个瓶子中装有 p[i]颗巧克力豆,两个人轮流取豆子 ...

  7. URL重写IIS7(URL Rewrite Module) 比之前的urlrewrite更方便使用

    原文发布时间为:2011-02-24 -- 来源于本人的百度文章 [由搬家工具导入] 微软在IIS7中添加了URL的重写模块,并且免费使用,可以导入.htaccess规则,确实是个不错的选择 URL ...

  8. [LeetCode] Populating Next Right Pointers in Each Node 深度搜索

    Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *nex ...

  9. eclipse集成JBPM

    JBPM4.4是一款运用的比较广泛的工作流开发框架,最近参与的BSS项目里面也有用到了JBPM4.4.自己在已经搭建的框架下使用,但更详细的理解并没有.因此借此机会学习一下. 学习版本为:JBPM为4 ...

  10. 【asp.net】Win7旗舰版IIS配置

    1.IIS配置流程 win7 iis 的配置不需要插入安装盘,可直接在控制面板中开启该功能,步骤如下: (1)"控制面板"-->"程序和功能"--> ...