[英]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"})
在執行s = s.aggs.bucket('average', 'avg', field='ask')
做result = s.execute()
然后您的result.aggs.to_dict()
將向您顯示agg結果
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.