elasticsearchdsl聚合在python中收集平均值

2024-04-20 08:33:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用elasticsearch dsl库,但不幸的是,它没有很好的文档记录。在

我有下面的过滤器,可以工作。在

首先,我找到了我需要寻找的时间。在

longtime = datetime.datetime.strptime(str(datetime.datetime.now() - datetime.timedelta(seconds=int(pairs[p][1]) + basehrs)), '%Y-%m-%d %H:%M:%S.%f').strftime('%s.%f')

然后我用过滤器搜索

^{pr2}$

在这之后,我应该要做些调查。我有以下几项,但不起作用:

s = s.aggs.bucket('average', 'avg', field='ask')

它只是返回:

平均值(field='ask')

我还需要它来做一个有趣的计算,而不仅仅是简单的事情。我需要问+(扩散/2)

s=s。集料桶('average','avg',field='ask+(排列/2')

有人有什么想法吗?在

当我们在这里的时候,我需要spread是一个整数类型,它当前是一个字符串。我首先使用python创建索引;我很乐意删除我的索引并重新开始,但是我不知道如何在python中指定字段类型。在


Tags: 文档过滤器类型fielddatetime记录时间elasticsearch
2条回答

之后s = s.aggs.bucket('average', 'avg', field='ask')

result = s.execute()

然后您的result.aggs.to_dict()将显示agg结果

当指定不应分配回s的聚合时,聚合将被就地修改。在

对于脚本聚合,您需要指定脚本[0](并在elasticsearch中启用脚本):

s.aggs.metric('average', 'avg', script={'inline': "doc['ask'].value + doc['spread'].value/2"})

0-https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-avg-aggregation.html#_script

相关问题 更多 >