ElasticSearch 通过script脚本自动生成Asia/Shanghai(东八区)时间

公司规定每次往es重中写入数据的时候都需要自动生成三个时间:create_time(创建时间),update_time(更新时间 默认等于创建时间),delete_time(删除时间默认为0)

一.es默认为utc时间
es默认是按UTC时间计算存储,国内的时区是+8(东八区),所以比UTC时间快8小时
二.script脚本自动生成时间以及默认值
1.定义管道(Pipeline)
# 通过管道修改默认utc时间为东八区时间,并将默认值赋值给 create_time,update_time,delete_time

PUT _ingest/pipeline/pipeline_cocktail_py_date
{
   "description" : "inner pipeline cocktail_py",
  "processors" : [
    {
      "script": {
          "lang": "painless", 
          "source": """
          def imp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
          imp.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
            def ts = imp.format(new Date((new Date().getTime())));
            if (ctx.create_time==null  ){
              ctx.create_time = ts;
            }
            if (ctx.delete_time==null  ){
              ctx.delete_time = 0;
            }
            ctx.update_time = ts;
            
          """
        }
    }
  ]
}


2.es自定义动态模板
# 通过模板先规范create_time,delete_time,update_time的类型以及相应的格式
PUT /my-index-100002?pretty
{
"settings": {
    "default_pipeline": "pipeline_cocktail_py_date"
  },
  "mappings": {
      "properties": { 




    "delete_time": {
      "type": "date",
      "format": "epoch_millis"
    },
    "create_time": {
      "type": "date",
      "format": "yyyy-MM-dd HH:mm:ss.SSS"
    },
    "update_time": {
      "type": "date",
      "format": "yyyy-MM-dd HH:mm:ss.SSS"
    }
      }
    
  }
}
3.插入测试数据
PUT my-index-100002/_doc/01
{
  "name": "这是一条测试数据"
}

4.查看相应自动生成的数据情况以及相应mapping
GET /my-index-100002/_search
{
  "query": {
    "bool": {
      "must": [
     
      ]
    }
  }
}

GET /my-index-100002/_mapping

在这里插入图片描述

在这里插入图片描述

参考:https://www.elastic.co/guide/en/elasticsearch/reference/current/script-processor.html

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cocktail_py

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值