【Elasticsearch教程11】Mapping字段类型之日期时间date date_nanos

这篇具有很好参考价值的文章主要介绍了【Elasticsearch教程11】Mapping字段类型之日期时间date date_nanos。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、日期格式

1.1 简介

JSON没有date类型,但我们可以把以下类型作为日期时间存入ES。

类型 说明
字符串 日期格式的字符串,如"2015-01-01"或"2015/01/01 12:10:30"
长整型 从开始纪元(1970-01-01 00:00:00 UTC)开始的毫秒数
整型 从开始纪元(1970-01-01 00:00:00 UTC)开始的秒数

上面的UTC(Universal Time Coordinated) 叫做世界统一时间,中国大陆和 UTC 的时差是 + 8 ,也就是 UTC+8。在ES内部,时间以毫秒数(long型)存储,而展现有多种format格式。

date的格式可以被指定的,如果没有指定,默认“strict_date_optional_time || epoch_millis”
strict_date_optional_time或者epoch_millis)。

1.2 什么是epoch_millis?

  • epoch_millis就是从开始纪元(1970-01-01 00:00:00 UTC)开始的毫秒数(long型)
  • 1970以前的时间也可以, 值是负数。

如下图,2020/8/31 14:57:56是常用的日期格式,它距离1970-01-01 00:00:00 有 1598857076000豪秒。所以可以用1598857076000表示2020/8/31 14:57:56
strict_date_optional_time,Elasticsearch教程(New),Elasticsearch,elasticsearch,大数据,日期时间,date

1.3 什么是strict_date_optional_time?

strict_date_optional_timedate_optional_time的严格级别,这个严格指的是年份、月份、天必须分别以4位、2位、2位表示,不足两位的话第一位需用0补齐。常见格式如下:

  • yyyy
  • yyyyMM
  • yyyyMMdd
  • yyyyMMddHHmmss
  • yyyy-MM
  • yyyy-MM-dd
  • yyyy-MM-ddTHH:mm:ss dd后面有个T
  • yyyy-MM-ddTHH:mm:ss.SSS
  • yyyy-MM-ddTHH:mm:ss.SSSZ

工作常见到是yyyy-MM-dd HH:mm:ss,但ES默认不支持这格式,我们可以在format里自定义支持它。上面最后一个里大写的"Z"表示时区。

二、实验

2.1 测试date类型

新增一个索引,设置birthday是date格式。

#ES7去掉了type,所以mappings下面一层不用写“_doc”
PUT /test_date_index
{
    "mappings":{
        "properties":{
            "birthday":{
                "type":"date"
            }
        }
    }
}

测试存入时间格式

PUT test_date_index/_doc/0
{
  "birthday":"2020-08"
}

PUT test_date_index/_doc/1
{
  "birthday":"2020-08-31"
}

PUT test_date_index/_doc/2
{
  "birthday":"2020-08-31T14:32"
}

PUT test_date_index/_doc/3
{
  "birthday":"2020-08-31T14:32:11"
}

PUT test_date_index/_doc/4
{
  "birthday":"1598857076000"
}

#1970以前的时间也可以, 值是负数
PUT test_date_index/_doc/5
{
  "birthday":"1955-08-31T14:32:11"
}

2.2 测试错误的格式:yyyy-MM-ddTHH:mm:s

因为秒只有1位,左侧没有补0,所以不是合法格式。

#插入yyyy-MM-ddTHH:mm:s格式
PUT test_date_index/_doc/3
{
  "bithday":"2020-08-31T14:32:1"
}

结果报错:
"type" : "illegal_argument_exception",
"reason" : "failed to parse date field [2020-08-31T14:32:1] with format [strict_date_optional_time||epoch_millis]",

2.3 测试错误的格式:yyyy-MM-dd HH:mm:ss

#插入yyyy-MM-dd HH:mm:ss格式
PUT /test_date_index/_doc/3
{
  "birthday": "2020-03-01 16:29:41"
}

结果报错:
"caused_by": {
  "type": "illegal_argument_exception",
  "reason": "Invalid format: \"2020-03-01 16:29:41\" is malformed at \" 16:29:41\""
}
#插入 yyyy-MM-ddTHH:mm:ss格式,ES返回成功
PUT /test_date_index/_doc/4
{
  "birthday": "2020-03-01T16:29:41"
}

三、混合日期格式

date类型,还支持一个参数format,它让我们可以自己定制化日期格式。
比如format配置了格式A||格式B||格式C,插入一个值后,会从左往右匹配,直到有一个格式匹配上。

举例:你想一个字段同时支持yyyy-MM-dd HH:mm:ssyyyy-MM-ddepoch_millis这3种格式,没有问题,只需在format上设置这3个格式,它们在ES内部都是按照long类型存储的。

#重建索引
PUT /test_date_index
{
    "mappings":{
        "properties":{
            "birthday":{
                "type":"date",
                "format":"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
            }
        }
    }
}

PUT /test_date_index/_doc/1
{
  "birthday": "2020-03-01 16:29:41"
}

PUT /test_date_index/_doc/2
{
  "birthday": "2020-02-29"
}

#2020/03/01 17:44:09的毫秒级时间戳
PUT /test_date_index/_doc/3
{
  "birthday": 1583055849000
}

四、date_nanos,支持纳秒

date类型支持到毫秒,如果特殊情况下用到纳秒得用date_nanos类型。

#创建一个index,其date字段是date_nanos类型,支持纳秒
PUT my_index?include_type_name=true
{
  "mappings": {
    "_doc": {
      "properties": {
        "date": {
          "type": "date_nanos" 
        }
      }
    }
  }
}

#和普通的date类型一样,可以存strict_date_optional_time||epoch_millis这些格式的
#不过在es内部是存的长整型是纳秒单位的
PUT my_index/_doc/1
{ "date": "2015-01-01" } 

#存一个具体到纳秒的值
PUT my_index/_doc/2
{ "date": "2015-01-01T12:10:30.123456789Z" } 

#存的是整型,说明是秒,换成日期就是2015/1/1 8:0:0
#但是在es内部,会以纳秒为单位的long类型存储
PUT my_index/_doc/3
{ "date": 1420070400 } 

GET my_index/_search
{
  "sort": { "date": "asc"} 
}

五、性能优化

  • 如果不在日期时间字段上做排序、聚合和script脚本操作,可以设置doc_value为false。
  • 如果不在日期时间字段上做检索,只是做展示用,可以设置index为false。

如果本文对您有帮助,就给亚瑟王点个赞👍吧文章来源地址https://www.toymoban.com/news/detail-820191.html

到了这里,关于【Elasticsearch教程11】Mapping字段类型之日期时间date date_nanos的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ElasticSearch索引mapping添加字段

    ES版本5.3.0,在已存在的索引mapping中添加字段。 如下: my_index索引名称,my_type为索引类型名称,new_field_name为新增的字段名称。 如下: 返回为true代表添加操作成功。

    2024年02月13日
    浏览(32)
  • Elasticsearch Mapping字段未支持索引导致搜索失效

    生产上Es根据一个时间字段搜索,却没有返回数据 根据命令: GET indexName/_mapping 查看 count_name设置了 “index”: false 导致根据该字段搜索导致索引不生效。 ES的mappings 定义好了生成索引后是不支持修改现有的字段的,只能新增属性。 使用 reindex 命令处理 1、运行命令: GET ind

    2024年02月11日
    浏览(26)
  • ElasticSearch数据库修改分片数、副本数及修改mapping字段

            对于已经存在的索引,副本数可以随时修改。 示例演示如下:         ElasticSearch中的数据会被分别存储在不同的分片上,索引库的分片数量是在索引库创建的时候通过settings去设置的,如果不设置,分片数默认是5,分片数一旦确定就不能改变。分片数量的设

    2024年02月02日
    浏览(41)
  • es elasticsearch 八 mapping 映射 、复杂数据类型

    目录 Mapping 映射 复杂数据类型 Mapping 映射 精确匹配 必须和对应字段值安全一致才可查出 全文检索 缩写搜索全程、格式转换 大小写 同义词 全文检索核心原理 分词,初步的倒排索引的建立 重建倒排索引 时态转换、重复数的转换、同义词的转换、大小写的转换 分词器 analy

    2024年02月07日
    浏览(46)
  • 如何将 performance_schema 中的 TIMER 字段转换为日期时间

    最近有好几个朋友问,如何将 performance_schema.events_statements_xxx 中的 TIMER 字段(主要是TIMER_START和TIMER_END)转换为日期时间。 因为 TIMER 字段的单位是皮秒(picosecond),所以很多童鞋会尝试直接转换,但转换后的结果并不对,看下面这个示例。 下面会从源码角度分析 TIMER 字段

    2024年02月05日
    浏览(33)
  • TIDB日期和时间类型

    TIDB日期和时间类型 DATE、DATETIME和TIMESTAMP 1、 DATE DATE 类型的格式为 YYYY-MM-DD,支持的范围是 1000-01-01 到 9999-12-31。 2、 TIME 类型 TIME 类型的格式为 HH:MM:SS[.fraction],支持的范围是 -838:59:59.000000 到 838:59:59.000000。TIME 不仅可用于指示一天内的时间,还可用于指两个事件之间的时间间

    2024年02月08日
    浏览(28)
  • SQL Server ,日期时间函数将时间日期类型的值截取为年月日

    使用 CONVERT 函数将日期时间类型的值转换为字符串类型,同时指定格式为 yyyyMMdd(例如2022年6月30日的日期字符串为\\\'20220630\\\')。 sql复制代码 在上述例子中,我们使用 GETDATE 函数获取当前的日期时间,然后使用 CONVERT 函数将其转换为格式为 yyyyMMdd 的字符串类型。 如果要将日期

    2024年02月16日
    浏览(35)
  • sql字段类型和时间格式转换

    在SQL中,字段类型格式转换是指将数据从一种数据类型转换为另一种数据类型的过程。这通常涉及将字符串转换为日期、将数字转换为字符串、将整数转换为浮点数等。 SQL字段类型格式转换的原理如下: 显式转换:显式转换是指用户明确指定要执行的数据类型转换。这可以

    2024年02月08日
    浏览(36)
  • 【⑬MySQL | 数据类型(一)】简介 | 整数 | 浮点 | 定点 | 时间/日期类型

    ✨欢迎来到小K的MySQL专栏,本节将为大家带来MySQL数据类型简介 | 整数 | 浮点 | 定点 | 时间/日期类型的分享 ✨ 0.数据类型简介 数据类型(data_type)是指系统中所允许的数据的类型。MySQL 数据类型定义了列中可以存储什么数据以及该数据怎样存储的规则。 数据库中的每个列都

    2024年02月11日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包