ElasticSearch 利用索引模板定义date类型字段

ElasticSearch中date类型是个很重要的类型。在聚合、排序、和kibana等结合使时都需要date类型。但在某些依赖es动态映射出index,type及字段类型时,时间字段值为时间戳可能出现一些问题:

这就有个问题,如果json中,时间字段是以 秒时间戳 或者 毫秒时间戳生成的,就无法转换为date,这时可以利用索引模板解决此问题:

_template/template1  PUT{
{
  "template": "dealer", 
  "order": 1,
  "mappings": {
    "_default_": {
      "properties": {
        "create_time": {
          "type": "date",
          "format": "epoch_second"
        }
      }
    }
  }
}
}
/**
template1 --- 创建模板名
"template": "dealer" --- 模板匹配index='dealer',也可以使用-*等匹配多个索引
设置create_time 字段为date,为秒时间戳,还可以设置为epoch_millis 毫秒时间戳
*/

测试:

  • 1.设定模板,匹配index=’public_sentiment’,create_time字段支持秒时间戳,create_time_millis支持毫秒时间戳这里写图片描述
  • 2.删除index=public_sentiment
  • 3.插入测试数据,包含4个字段,create_time,create_time_none,create_time_millis,create_time_millis_none
 @Test
    public void testInsert(){
        long time_millis = System.currentTimeMillis();
        String timestamp = String.valueOf(time_millis/1000);
        long time = Integer.valueOf(timestamp);

        String index="public_sentiment";
        String type="public_sentiment-2018";
        String json="{\"type\":\"mouth_quality\"," +
                "\"create_time_none\":"+time+"," +
                "\"create_time\":"+time+"," +
                "\"create_time_millis\":"+time_millis+"," +
                "\"create_time_millis_none\":"+time_millis+"}";
        ESUtil.index(index, type, json,null);
    }
  • 4.验证插入数据后,自动创建index,且create_time,create_time_millis 为date类型,create_time_none,create_time_millis_none为long类型
    这里写图片描述
  • 5.在kibana中,可以扫描到此date类型
    这里写图片描述
  • 6.时间排序起作用
    这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_25067199/article/details/80031268