Фильтровать результаты по текущему времени asticsearch-dsl.py
Я пытаюсь воссоздать этот запрос в asticsearch-dsl.py
{
"query": {
"bool": {
"must": [
{
"match_all": {}
},
{
"query_string": {
"analyze_wildcard": true,
"query": "*"
}
},
{
"range": {
"timeStamp": {
"gte": 1524468274851,
"lte": 1524469174851,
"format": "epoch_millis"
}
}
}
],
"must_not": []
}
},
"size": 0,
"_source": {
"excludes": []
},
"aggs": {
"2": {
"terms": {
"field": "label",
"size": 10,
"order": {
"1": "desc"
}
},
"aggs": {
"1": {
"avg": {
"field": "elapsed"
}
},
"3": {
"percentiles": {
"field": "elapsed",
"percents": [
90
],
"keyed": false
}
}
}
}
},
"version": true,
"highlight": {
"pre_tags": [
"@kibana-highlighted-field@"
],
"post_tags": [
"@/kibana-highlighted-field@"
],
"fields": {
"*": {
"highlight_query": {
"bool": {
"must": [
{
"match_all": {}
},
{
"query_string": {
"analyze_wildcard": true,
"query": "*",
"all_fields": true
}
},
{
"range": {
"timeStamp": {
"gte": {NOW},
"lte": {1 hour ago},
"format": "epoch_millis"
}
}
}
],
"must_not": []
}
}
}
},
"fragment_size": 2147483647
}
}
Я начинаю с малого и просто хочу получить среднее время отклика и 90-процентиль из моего набора данных. (В настоящее время небольшой набор данных 10 МБ ежедневно)
from elasticsearch import Elasticsearch
from elasticsearch_dsl import Search
from elasticsearch_dsl.connections import connections
connections.create_connection(hosts=[REDACTED], timeout=20)
client = Elasticsearch()
s = Search(using=client, index="logstash-*") \
.filter("term", label="1 year - Edge")
s.aggs.metric('avg_responsetime', 'avg', field='elapsed')
s.aggs.metric('90_percentile', 'percentiles', field='elapsed', percents=[90])
response = s.execute()
Метрические агрегации работают отдельно, но я не могу использовать их вместе. Нужно ли выполнять один поиск для каждой агрегации или я могу пойти другим путем?