ElasticSearch无法识别日期类型,显示为字符串类型

时间:2018-09-17 07:15:58

标签: elasticsearch indexing date-format

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)

嗨,我在google上搜索了我的工作,但是关键字可能太笼统了,所以我的收获不多。

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

有什么我想念的吗?

非常感谢:)

2 个答案:

答案 0 :(得分:0)

我自己弄清楚了,

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

es.indices.put_mapping(index="test", doc_type='test', body={'test': dynamicTemplate})

es.index(index='test-index', doc_type='tweet', body=ES_DOCTYPE)

答案 1 :(得分:-1)

According to the docs ElasticSearch通过以下方式与date一起使用。在内部,它将它们存储为一个整数,表示自纪元以来的毫秒数。对于输出日期,日期将始终呈现为字符串。

文档引用:

  

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

     
      
  • 包含格式化日期的字符串,例如“ 2015-01-01”或“ 2015/01/01”   12:10:30“。
  •   
  • 一个整数,代表从纪元以来的毫秒数。
  •   
  • 一个整数,表示从秒开始的秒数。
  •   
     

在内部,日期是   转换为UTC(如果指定了时区)并存储   是一个代表毫秒的毫秒数。

     

日期查询在内部转换为与此相关的范围查询   长表示形式以及聚合和存储字段的结果   根据日期格式转换回字符串   与该字段相关联。