为什么聚合脚本在elasticsearch中不起作用?

w6mmgewl  于 2021-06-14  发布在  ElasticSearch
关注(0)|答案(1)|浏览(501)

我在elasticsearch有点问题。
我想要两个聚合值的除法值。
此查询正在运行。

{
"query": {
    "bool": {
        "adjust_pure_negative": true,
        "boost": 1.0
    }
},
"aggregations": {
    "sumPageview": {
        "sum": {
            "field": "pageview",
            "missing": 0
        }
    },
    "sumVisit": {
        "sum": {
            "field": "visit",
            "missing": 0
        }
    }
}

但这个查询不起作用。

{
"query": {
    "bool": {
        "adjust_pure_negative": true,
        "boost": 1.0
    }
},
"aggregations": {
    "sumPageview": {
        "sum": {
            "field": "pageview",
            "missing": 0
        }
    },
    "sumVisit": {
        "sum": {
            "field": "visit",
            "missing": 0
        }
    },
    "totalPageviewPerVisit": {
        "bucket_script": {
            "buckets_path": {
                "sumPageview": "sumPageview",
                "sumVisit": "sumVisit"
            },
            "script": {
                "source": "params.sumPageview / params.sumVisit",
                "lang": "painless"
            },
            "gap_policy": "skip"
        }
    }
}

我想这就是为什么和值不在桶里。
这个理由对吧?请帮帮我。

2exbekwf

2exbekwf1#

sum aggregation是一个单值度量聚合,它汇总从聚合文档中提取的数值。
bucket script aggregation是一种父管道聚合,它执行一个脚本,该脚本可以对父多bucket聚合中的指定度量执行逐bucket计算。
因为sum聚合不创建任何bucket,所以不能对其使用bucket脚本聚合。
添加索引数据、搜索查询和搜索结果的工作示例
索引数据:

{
  "user_id":1,
  "pageview": 1,
  "visit": 2
}
{
  "user_id":2,
  "pageview": 2,
  "visit": 3
}
{
  "user_id":3,
  "pageview": 3,
  "visit": 4
}

搜索查询:

{
  "size": 0,
  "aggs": {
    "all": {
      "terms": {
        "field": "user_id"
      },
      "aggs": {
        "sum_1": {
          "sum": {
            "field": "pageview"
          }
        },
        "sum_2": {
          "sum": {
            "field": "visit"
          }
        },
        "division": {
          "bucket_script": {
            "buckets_path": {
              "my_var1": "sum_1",
              "my_var2": "sum_2"
            },
            "script": "params.my_var1 / params.my_var2"
          }
        }
      }
    }
  }
}

搜索结果:

"aggregations": {
    "all": {
      "doc_count_error_upper_bound": 0,
      "sum_other_doc_count": 0,
      "buckets": [
        {
          "key": 1,
          "doc_count": 1,
          "sum_2": {
            "value": 2.0
          },
          "sum_1": {
            "value": 1.0
          },
          "division": {
            "value": 0.5
          }
        },
        {
          "key": 2,
          "doc_count": 1,
          "sum_2": {
            "value": 3.0
          },
          "sum_1": {
            "value": 2.0
          },
          "division": {
            "value": 0.6666666666666666
          }
        },
        {
          "key": 3,
          "doc_count": 1,
          "sum_2": {
            "value": 4.0
          },
          "sum_1": {
            "value": 3.0
          },
          "division": {
            "value": 0.75
          }
        }
      ]
    }

相关问题