elasticsearch-dsl - 聚合在python中收集平均值

时间:2017-01-17 23:27:40

标签: python python-3.x elasticsearch-dsl elasticsearch-py

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

我有以下过滤器,它有效。

首先,我发现我需要多长时间才能进行搜索。

x.map(_.age).get
// res141: Int = 13

然后我使用过滤器

运行搜索
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')

在此之后我应该运行一些aggs。我有以下但它不起作用:

s = Search(using=es, index="history", doc_type=pairs[p][0]).filter('range', timestamp={'gte': longtime})

它只会返回:

平均(字段='问&#39)

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

s = s.aggs.bucket(' average',' avg',field =' ask +(spread / 2')

有没有人有任何想法?

虽然我们在这里,但我需要传播为整数类型,它目前是一个字符串。我首先使用python创建索引;我很高兴删除我的索引并重新开始,但我不知道如何在python中创建字段类型。

2 个答案:

答案 0 :(得分:0)

Whan指定您不应该分配回short date format (mm/dd/yy)的聚合,聚合会在适当的位置进行修改。

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

Format

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

答案 1 :(得分:0)

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

之后

result = s.execute()

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