我尝试通过python在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索引的结构:
有人能帮帮我吗
谢谢
1条答案
按热度按时间ecbunoof1#
从文档来看,您的日期格式似乎不正确。根据屏幕截图,您的数据格式如下:
根据documentation,此格式为
使用python中的datetime库,你可以用这种方式来形成你的日期格式:
尝试在范围查询中使用format子句转换
strict_date_optional_time
(es中的默认日期格式,根据es索引的结构在日期字段中使用),并将其转换为值yyyy-MM-dd HH:mm:ss
:或更改线路代码:
在
并且不在查询中指定格式或指定正确的格式