在Python中发送ElasticSearch时间戳范围请求
我正在尝试在我的ES(Elasticsearch)上进行一个请求,目的是统计在某个时间范围内的日志。我的请求是可以正常工作的,但每次返回的结果都是一样的。看起来时间戳的过滤器没有起作用。
我想要根据状态码来获取一个关于我的servertest01的统计数据,时间范围是我自定义的。
import rawes
from datetime import datetime
from dateutil import tz
paristimezone = tz.gettz('Europe/Paris')
es = rawes.Elastic('127.0.0.1:9200')
result = es.get('/_search', data={
"query" : { "match_all" : {}
},
"filter": {
"range": {
"@timestamp": {
"from": datetime(2013, 3, 11, 8, 0, 30, tzinfo=paristimezone),
"to": datetime(2013, 3, 12, 11, 0, 30, tzinfo=paristimezone)}
}
},
"facets" : {
"error" : {
"terms" : {
"field" : "status_code"
},
"facet_filter" : {
"term" : {"server" : "testserver01"}
}
}
}
})
print(result['facets'])
而在我的ES数据中,时间戳字段是这样的:
"@timestamp":"2013-03-12T00:02:29+01:00"
谢谢 :)
1 个回答
4
搜索API中的filter
元素是用来在计算完各个方面的结果后,进一步筛选查询结果的。
如果你想把这个筛选条件同时应用到查询和各个方面的结果上,那你应该使用filtered
查询,方法如下:
result = es.get('/_search', data={
"query": {
"filtered": {
"query" : { "match_all" : {}},
"filter": {
"range": {
"@timestamp": {
"from": datetime(2013, 3, 11, 8, 0, 30, tzinfo=paristimezone),
"to": datetime(2013, 3, 12, 11, 0, 30, tzinfo=paristimezone)
}
}
}
}
},
"facets" : {
"error" : {
"terms" : {
"field" : "status_code"
},
"facet_filter" : {
"term" : {"server" : "testserver01"}
}
}
}
})