ElasticSearch7 数据类型之日期类型

日期类型(Date datatype)

 Elasticsearch7 日期表达成类型:

  • 日期格式化的字符串,比如: “2015-01-01” 或者 “2015/01/01 12:10:30”;
  • 毫秒级别的 long 类型
  • 秒级别的 integer 类型

MySQL8 Timestamp与String 日期格式类型转换

    //  2.1 String ->Timestamp
    // 使用Timestamp的valueOf()方法
    @org.junit.Test
    public void testStringToTimestamp() {
        // 注:String的类型必须形如: yyyy-mm-dd hh:mm:ss[.f...] 这样的格式,中括号表示可选,否则报错!!!
        // 如果String为其他格式,可考虑重新解析下字符串,再重组~~
        String tsStr = "2011-05-09 11:49:45";
        Timestamp ts = Timestamp.valueOf(tsStr);  // 2011-05-09 11:49:45.0
        System.out.println(ts);
    }
 
    //  2.2 Timestamp -> String
    @org.junit.Test
    public void testTimestampToString() {
        Timestamp ts = new Timestamp(System.currentTimeMillis());
        DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 
        //方法一:优势在于可以灵活的设置字符串的形式。
        String tsStr = sdf.format(ts);
        System.out.println(tsStr);  // 2017-01-15 21:17:04
        //方法二
        tsStr = ts.toString();
        System.out.println(tsStr); // 2017-01-15 21:17:04.7
    }

ElasticSearch7 实际开发中应用案例:

1、判断数据库取值对象类型是否为:java.sql.Timestamp

2、条件一成立:将java.sql.Timestamp 转换为String 日期格式,进行elasticsearch 7 数据填充

public void batchInsert(String sql, Connection conn, Integer pageNo, Integer pageSize, BulkProcessor bulkProcessor){
  		ResultSet rs = null;
  		PreparedStatement ps = null;
  		try{
  			ps = conn.prepareStatement(String.format(sql, pageNo, pageSize), ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
  			ps.setFetchSize(Integer.MIN_VALUE);
  			rs = ps.executeQuery();
  			
  			ResultSetMetaData colData = rs.getMetaData();
  			ArrayList<HashMap<String, Object>> dataList = new ArrayList<HashMap<String, Object>>();
  			HashMap<String, Object> map = null;
  			
  			String c = null;
  			Object v = null;
  			while (rs.next()) {
  				map = new HashMap<String, Object>(100);
  				for (int i = 1; i <= colData.getColumnCount(); i++) {
  					//c = colData.getColumnName(i);
  					c = colData.getColumnLabel(i);
  					v = rs.getObject(c);
  					if(v instanceof java.sql.Timestamp){
  						// 处理java.sql.Timestamp 与es 日期个数转换
  						if(v != null){
  							 DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
  							 String str = dateFormat.format(v);
  							 map.put(c, str);
  						}
  					} else {
  						map.put(c, v);
  					}
  					
  				}
  				dataList.add(map);
  				
  			}

  			for (HashMap<String, Object> hashMap2 : dataList) {
  				bulkProcessor.add(new IndexRequest("fileinfo").source(hashMap2));
  			}

  			logger.info("-------------------------- Finally insert number total");
              // 将数据刷新到es, 注意这一步执行后并不会立即生效,取决于bulkProcessor设置的刷新时间
  			bulkProcessor.flush();
  		}catch(Exception e){
  			e.printStackTrace();
  			logger.error(e.getMessage());
  		}finally {
  			try {
  				rs.close();
  				ps.close();
  			} catch (Exception e) {
  				e.printStackTrace();
  				logger.error(e.getMessage());
  			}
  		}
  	}

 

上一篇:【ElasticSearch学习笔记】(一)linux环境下elasticSearch7.x的安装


下一篇:Memcached 简介