Je dois retourner les données mises en évidence par terme, puis par un intervalle de date d'ElasticSearch en utilisant elasticsearch_dsl
. L'intervalle est paramétré, et j'essaie de déterminer s'il existe un moyen de forcer ElasticSearch à retourner au dernier intervalle complet (basé sur une plage de dates) en remplissant les intervalles manquants avec des zéros.Elasticsearch Date Histogramme Agrégation - Comment forcer max (le plus renvoyé) plein intervalle
J'utilise déjà min_doc_count=0
et extended_bounds.min
dans l'agrégation, et qui se charge du début de la plage, mais ne peut pas comprendre comment spécifier extended_bounds.max
de telle sorte qu'il ne saisit pas le plus récent intervalle partiel.
est ici peu pertinent de code que j'ai jusqu'à présent:
from_period = (datetime.now() - timedelta(days=lookback_in_days))
date_range_max = "now"
if interval in FULL_INTERVALS:
# round down by interval
date_range_max += "/" + (interval[:1].upper() if interval == 'month' else interval[:1])
else:
# round down by time unit
temp = re.split(PARTIAL_INTERVAL_PATTERN, interval)
## e.g. for interval = '3d', temp will have ['', '3', 'd', '']
date_range_max += "/" + temp[2]
s = ES_Search(doc_type='message', index=config['ES_INDEX_NAME']) \
.using(client) \
.query('match', foo=bar) \
.filter('range',
**{
"@timestamp": {
"gte": from_period,
"lt": date_range_max
}
}
)
for name in score_names:
s.aggs.bucket(name, 'terms', field='meta.{}.value.keyword'.format(name))
s.aggs[name].bucket(
'interval_buckets',
'date_histogram',
field='@timestamp', interval=interval,
format='YYYY-MM-dd', time_zone=time_zone,
# set a "hard" start/end dates to make sure uniform earliest/latest bucket, and include empty buckets
min_doc_count=0,
extended_bounds={
"min": from_period.strftime("%Y-%m-%d"),
"max": datetime.now().strftime("%Y-%m-%d")
}
)
Y at-il un moyen de spécifier extended_bounds.max
telle que Elasticsearch
fera le calcul basé sur filter
, ou dois-je faire le calcul manuel de la date utiliser dans extended_bounds.max
?