ElasticSearch7 数据类型之日期类型

虾米姐 阅读:660 2021-03-31 12:44:47 评论:0

日期类型(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()); 
  			} 
  		} 
  	}

 

声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号