如何修复Elasticsearch中的“无法解析日期字段”错误

时间:2018-02-12 15:01:54

标签: parsing elasticsearch timestamp

我试图通过pyton在ELasticsearch中进行查询。我希望从现在起最后一小时内获得所有价值。为此我写了这个脚本:

import time
from elasticsearch import Elasticsearch
from datetime import datetime, timedelta

es = Elasticsearch()
index= "standalone"

filename = "2017-12-22V2.csv"

Timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
one_hour_from_now = datetime.now() - timedelta(hours=1)
one_hour_from_now = one_hour_from_now.strftime('%Y-%m-%d %H:%M:%S')


query = {"query":{"bool":{"must":{"range":{"Time":{"gt":one_hour_from_now,"lt":Timestamp}}},"must_not":[],"should":[]}},"from":0,"size":10,"sort":[],"aggs":{}}


ret = es.search(index, body=query)
print("ret", ret)

当我执行它时,我收到此错误:

 es.search exception:  TransportError(400, 'search_phase_execution_exception', 'failed to parse date field [2018-02-12 15:50:26] with format [strict_date_optional_time||epoch_millis]')

这是我的ES索引的结构: Elasticsearch structure

有人可以帮助我吗

谢谢

1 个答案:

答案 0 :(得分:2)

从文档中看,您的格式化日期似乎失败了。 根据您的excel屏幕截图,您的数据采用以下格式:

yyyy-MM-dd'T'HH:mm:ss

根据documentation,此格式为

date_hour_minute_second or strict_date_hour_minute_second

使用python中的datetime库,您可以通过以下方式设置日期格式:

yyyy-MM-dd HH:mm:ss

尝试使用strict_date_optional_time

修改format子句中的查询yyyy-MM-dd HH:mm:ss

或更改行代码:

one_hour_from_now = one_hour_from_now.strftime('%Y-%m-%d %H:%M:%S')

one_hour_from_now = one_hour_from_now.strftime("%Y-%m-%d"'T'"%H:%M:%S")

并且不要在查询中指定格式或指定正确的格式