zoukankan      html  css  js  c++  java
  • 通过Java的Domain类构建ElasticSearch的mapping

    通过给定一个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 = "{
    " 
                                +"	""+Constant.INDEX+"":{
    " 
                                    +"		"properties":{
    "
                                            + "		{#}
    " 
                                    + "				}
    "
                                    + "		}
    " 
                                +"}";
            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("				"" + fields[i].getName().toLowerCase() + "": {
    ");
                 fieldstring.append("						"type": ""
                            + GetElasticSearchMappingType(fields[i].getType().getSimpleName()) + "
    ");
                 if (i == fields.length-1) {
                        fieldstring.append("					}
    ");
                    } else {
                        fieldstring.append("					},
    ");
                    }
            }
            return fieldstring.toString();
        }
    
        private static String GetElasticSearchMappingType(String varType) {
            String es = "String";
            switch (varType) {
            case "Date":
                es = "date"
    "+"						,"format":"yyyy-MM-dd HH:mm:ss"
    "+"						,"null_value":"1900-01-01 00:00:01"";
                break;
            case "Double":
                es = "double"
    "+"						,"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"}}}'

  • 相关阅读:
    42. Trapping Rain Water
    223. Rectangle Area
    645. Set Mismatch
    541. Reverse String II
    675. Cut Off Trees for Golf Event
    安装 VsCode 插件安装以及配置
    向上取整 向下取整 四舍五入 产生100以内随机数
    JS 判断是否为数字 数字型特殊值
    移动端初始配置,兼容不同浏览器的渲染内核
    Flex移动布局中单行和双行布局的区别以及使用
  • 原文地址:https://www.cnblogs.com/atomicbomb/p/6900166.html
Copyright © 2011-2022 走看看