0
我需要返回按照術語分類的數據,然後使用elasticsearch_dsl
從ElasticSearch返回日期間隔。 間隔參數化爲,我試圖找出是否有辦法強制ElasticSearch返回上一個完整時間間隔(基於日期範圍)返回用零填充缺失間隔。Elasticsearch日期直方圖聚合 - 如何強制最大(最新發布)完整時間間隔
我已經在使用的聚集和min_doc_count=0
extended_bounds.min
,而這需要照顧範圍的開始,但無法弄清楚如何指定extended_bounds.max
,使得它不會搶最近部分間隔。
下面是相關的代碼位我到目前爲止有:
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")
}
)
是否有指定extended_bounds.max
這樣Elasticsearch
會做計算依據filter
,或做我必須做的日期的手工計算方式在extended_bounds.max
中使用?