关于elasticsearch:elasticsearch-实现聚合后两个字段相除相加相减相乘运算

有个需要,在sql中的计算形式是:

sum(cost) / 100 / sum(view_count) * 1000

统计出均匀千次展示均价,老本按分存储。

在es中须要聚合cost和view_count 之后再运算。折腾了半天,记录下:

"aggs" => [
    'total_cost_count' => [
        'sum' => [
            'field' => 'cost'
        ]
    ],
    'total_view_count' => [
        'sum' => [
            'field' => 'view_count'
        ]
    ],
    '(total_cost / total_view)' => [
        'bucket_script' => [
            'buckets_path' => [
                'cost' => 'total_cost_count',
                'view_count' => 'total_view_count',
            ],
            'script' => [
                'source' => "params.cost / params.unit / params.view_count * params.days",
                'params' => [
                    'unit' => 100,
                    'days' => 1000,
                ]
            ]
        ]
    ]
],

调试过程中报错信息:

  • Only sibling pipeline aggregations are allowed at the top level

    • 在顶层只容许兄弟管道聚合。也就是聚合运算只能在同一个桶内。

参考文档:https://www.elastic.co/guide/en/elasticsearch/painless/7.13/painless-bucket-script-agg-context.html

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理