我试图通过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索引的结构:
有谁可以帮助我吗
谢谢
最佳答案
从文档看来,您格式化日期似乎失败了。
根据您的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")
并且不要在查询中指定格式或指定正确的格式关于python - 如何在Elasticsearch中修复错误 "failed to parse date field ",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48749364/