elasticsearch时间自动映射问题

elasticsearch在没有手动指定映射时会自动根据值映射类型,在时间的映射有需要注意。
首先创建一个索引(test),这里不指定映射类型

PUT /test

往test索引中插入一个数据

POST /test/_doc
{
  "name":"zhangsan",
  "birthday":"2021-01-01"
}

然后查询索引中数据映射关系

GET /test/_mapping

映射关系如下

{
  "test" : {
    "mappings" : {
      "dynamic_date_formats" : [
        "yyyy-MM-dd",
        "yyyy-MM-dd HH:mm:ss"
      ],
      "date_detection" : true,
      "properties" : {
        "birthday" : {
          "type" : "date",
          "format" : "yyyy-MM-dd"
        },
        "name" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        }
      }
    }
  }
}

从映射关系可以看到birthday自动映射成了日期类型。将test索引删除重新创建

PUT /test

仍然插入刚才的数据,现在将birthday的时分秒加上

POST /test/_doc
{
  "name":"zhangsan",
  "birthday":"2021-01-01 00:00:00"
}

再看看映射关系

GET /oa_data_01/_mapping
{
  "test" : {
    "mappings" : {
      "properties" : {
        "birthday" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "name" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        }
      }
    }
  }
}

可以看到birthday加了时分秒后es没有将其映射为日期类型,而是字符串类型,这里需要在创建索引时做如下设置才能让es识别时分秒的日期。date_detection设置为ture是让es自动检测日期类型,dynamic_date_formats是需要匹配的日期格式,这里设置了两种格式都要让es自动映射为日期类型。

PUT /test
{
  "mappings": {
    "date_detection": true,
    "dynamic_date_formats": ["yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss"]
  }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值