私はelasticsearch-dslライブラリを使用しようとしていますが、残念ながらそれは十分に文書化されていません。elasticsearch-dsl - Pythonで平均を集める集計
私は以下のフィルタを使用しています。
最初に、私は自分の検索がどれくらい前に戻ってくるかを見つけます。
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})
と私の検索を実行します。私は、次のを持っているが、それは動作しません:
s = s.aggs.bucket('average', 'avg', field='ask')
ちょうど戻る:
平均(フィールドが=「尋ねる」)
私も、それが楽しいの計算を行うために必要はありませんちょっと単純です。私は(広がっ/ 2)+尋ねる必要
すなわち
S = s.aggs.bucket( '平均'、 '平均'、フィールド= '(広がっ+尋ねる/ 2')
ん誰でもアイデアがありますか?
私はここにいますが、整数型にする必要があります。現在は文字列です。私は最初にインデックスを作成するためにpythonを使用しました。再度開始しますが、作成時にpythonでフィールド型を指定する方法がわかりません。
こんにちは、私は援助に感謝します。私は数時間前からそれをやり遂げてきました。私は次のようになっています: '{'query':{'bool':{'フィルタ': '{'範囲 ':{'タイムスタンプ ':{' gt ':' 1484749397.311207 '}}}}}} '平均':{'平均':{'スクリプト':{'インライン': 'ドキュメント' [質問]]値+ドキュメント["スプレッド"]値/ 2 '}}}}、' 「sort_keys」:True、「size」:50000} ' が返されます。 –
ああ、datetimesを渡すだけで、タイムスタンプにシリアル化する必要はありません。シリアル化する場合は、ミリ秒精度(Pythonの 'timestamp * 1000')を使用するelasticsearchと互換性があることを確認してください。 –