首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ElasticSearch不识别日期类型,显示为字符串类型

ElasticSearch不识别日期类型,显示为字符串类型
EN

Stack Overflow用户
提问于 2018-09-17 07:15:58
回答 2查看 2.4K关注 0票数 1

ElasticSearch版本: 6.3

映射定义:ES_DOCTYPE = { "properties": { "UsageEndDate": {"type": "date", "format": "YYYY-MM-dd HH:mm:ss"}, "UsageStartDate": {"type": "date", "format": "YYYY-MM-dd HH:mm:ss"} } }

json数据:

{ 'UsageEndDate': '2018-08-01 02:00:00', 'UsageStartDate': '2018-08-01 01:00:00' } { 'UsageEndDate': '2018-08-02 02:00:00', 'UsageStartDate': '2018-08-02 01:00:00' }

创建索引:es.index(index="test", doc_type='test', body=ES_DOCTYPE)

发送数据:helpers.streaming_bulk(es, documents(), index="test", doc_type='test', chunk_size=1000)

嗨,我做了我的工作谷歌搜索,但可能是关键字太笼统,所以我没有得到很多。

当我阅读文档时,ES应该能够自动找到日期格式,但是即使我添加了映射定义,当我在Kibana中查看那些UsageStartDateUsageEndDate时,它们仍然显示为string

我遗漏了什么吗?

(非常感谢:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-18 17:26:42

我自己想出来的,

dynamicTemplate = { "properties": { "UsageEndDate": {"type": "date", "format": "YYYY-MM-dd HH:mm:ss"}, "UsageStartDate": {"type": "date", "format": "YYYY-MM-dd HH:mm:ss"} }, "dynamic_templates": [ { "notanalyzed": { "match": "*", "match_mapping_type": "string", "mapping": { "type": "string", "index": "not_analyzed" } } } ] }

将映射定义放在首位,然后将数据发送到ElasticSearch

代码语言:javascript
复制
es.indices.put_mapping(index="test", doc_type='test', body={'test': dynamicTemplate})

es.index(index='test-index', doc_type='tweet', body=ES_DOCTYPE)
票数 0
EN

Stack Overflow用户

发布于 2018-09-17 12:17:04

根据医生的说法 ElasticSearch以以下方式处理date。在内部,它将它们存储为一个很长的数字,表示自那个时代以来的毫秒时间。对于输出日期,将始终以字符串形式呈现。

引用文件:

JSON没有日期数据类型,所以Elasticsearch中的日期可以是:

  • 包含格式化日期的字符串,例如"2015-01-01“或"2015/01/01 12:10:30”。
  • 代表时代以来毫秒的长数字。
  • 表示自时代以来的秒数的整数。

在内部,日期被转换为UTC (如果指定了时区),并存储为一个表示自时代以来毫秒长的数字。

对日期的查询在内部转换为这种长表示形式上的范围查询,聚合和存储字段的结果将根据与字段关联的日期格式转换回字符串。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52362574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档