elasticsearch 实现聚合后两个字段相除相加相减相乘,运算

Posted 那页阳光

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于elasticsearch 实现聚合后两个字段相除相加相减相乘,运算的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch聚合后将聚合结果进行分页的解决办法

Elasticsearch日期之间的聚合字段

将聚合函数中的两个值相除?

跨多个索引的多个字段上的 Elasticsearch 聚合

elasticsearch - 聚合返回 key 中的术语,但不是完整的字段,我怎样才能返回完整的字段?

Elasticsearch 聚合功能