Elasticsearch DSL 过滤器聚合和扩展统计
Elasticsearch DSL filter on aggregation and extended stats
如果我将 aggregations.bucket 与指标一起使用,我如何过滤该指标以控制回溯期?类似地,过滤器可以以相同的方式用于扩展统计信息吗?这是一个有效的代码片段(以及我想使用的过滤器类型):
s = Search(using=client)
s.aggs.bucket('some_bucket_by_day', 'date_histogram', field='time_field', interval='day')
.metric('some_avg', 'avg', field='some_field')
尝试像这样过滤:
filter='range', **{'time_field': {'gte': 'now-10d'}}
此外,如果使用 extended_stats,过滤器也可以工作吗?
s.aggs.bucket('exchange_stats', 'extended_stats', field='some_field')
谢谢!
可以在查询级别应用过滤器,这将减少需要计算聚合的文档数量。另外 extended_stats
是一个度量聚合,而不是一个桶聚合。所以你可以这样做:
// create search and filter the document by date
s = Search(using=client)
.filter('range', time_field={'gte': 'now-10d'})
// add some aggregations
s.aggs.bucket('some_bucket_by_day', 'date_histogram', field='time_field', interval='day')
.metric('some_avg', 'avg', field='some_field')
.metric('exchange_stats', 'extended_stats', field='some_field')
如果我将 aggregations.bucket 与指标一起使用,我如何过滤该指标以控制回溯期?类似地,过滤器可以以相同的方式用于扩展统计信息吗?这是一个有效的代码片段(以及我想使用的过滤器类型):
s = Search(using=client)
s.aggs.bucket('some_bucket_by_day', 'date_histogram', field='time_field', interval='day')
.metric('some_avg', 'avg', field='some_field')
尝试像这样过滤:
filter='range', **{'time_field': {'gte': 'now-10d'}}
此外,如果使用 extended_stats,过滤器也可以工作吗?
s.aggs.bucket('exchange_stats', 'extended_stats', field='some_field')
谢谢!
可以在查询级别应用过滤器,这将减少需要计算聚合的文档数量。另外 extended_stats
是一个度量聚合,而不是一个桶聚合。所以你可以这样做:
// create search and filter the document by date
s = Search(using=client)
.filter('range', time_field={'gte': 'now-10d'})
// add some aggregations
s.aggs.bucket('some_bucket_by_day', 'date_histogram', field='time_field', interval='day')
.metric('some_avg', 'avg', field='some_field')
.metric('exchange_stats', 'extended_stats', field='some_field')