why aggregation script is not working in elasticsearch?

1.4k Views Asked by At

i have a some problem in elasticsearch.

i want division value with two aggregated values.

this query is working.

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

but this query is not working.

{
"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"
        }
    }
}

i think this reason is what sum value is not in bucket.

this reason right? help me, please.

1

There are 1 best solutions below

2
On BEST ANSWER

Sum aggregation is a single-value metrics aggregation that sums up numeric values that are extracted from the aggregated documents.

Bucket script aggregation is a parent pipeline aggregation that executes a script that can perform per bucket computations on specified metrics in the parent multi-bucket aggregation.

Because sum aggregation, do not create any buckets, so you cannot use bucket script aggregation on it.

Adding a working example with index data, search query, and search result

Index Data:

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

Search Query:

{
  "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"
          }
        }
      }
    }
  }
}

Search Result:

"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
          }
        }
      ]
    }