簡體   English   中英

elasticsearch-dsl-聚集python中的平均值

[英]elasticsearch-dsl - Aggregates collecting average in 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')

然后我用過濾器運行搜索

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

之后,我應該運行一些aggs。 我有以下內容,但不起作用:

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

它只是返回:

平均(field ='ask')

我還需要它來進行有趣的計算,而不僅僅是簡單的事情。 我需要詢問+(點差/ 2)

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

有人有什么想法嗎?

當我們在這里時,我需要將spread設置為整數類型,目前它是一個字符串。 我首先使用python創建了索引; 我很高興刪除索引並重新開始,但是我不知道在創建時如何在python中指定字段類型。

在指定您不應分配給s聚合時,聚合會被適當修改。

對於腳本化聚合,您需要指定腳本[0](並在elasticsearch中啟用腳本):

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

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

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

result = s.execute()

然后您的result.aggs.to_dict()將向您顯示agg結果

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM