The current 1.4 docs mention that the scripted_metric aggregation is
experimental, and to share our usages. I've found a really great use on our
project so I thought I'd share!
While the 'stats' metric provides great data like 'sum' and 'average', we
needed to calculate a weighted average. In this case, the weighting field
is 'principal_amount', and the field we'd like the metric on is 'rate'. A
CURL for this agg is here:
curl -XGET "http://localhost:9200/my_index/_search" -d'
{
"size": 0,
"aggs": {
"test_script": {
"scripted_metric": {
"init_script": "_agg["numerator"] = []; _agg["denominator"] =
[];",
"map_script": "_agg.numerator << (doc["principal_amount"].value *
doc["rate"].value); _agg.denominator << doc["principal_amount"].value",
"combine_script" : "num_sum = 0; den_sum = 0; for (t in
_agg.numerator) { num_sum += t }; for (t in _agg.denominator) { den_sum +=
t };return [num_sum: num_sum, den_sum: den_sum]",
"reduce_script" : "num_sum = 0; den_sum=0; for (a in _aggs) {
num_sum += a.num_sum; den_sum += a.den_sum; }; return num_sum/den_sum"
}
}
}
}'
For reference, a weighted average is defined here (it's pretty simple):
Without this great new aggregation type, I guess I'd have to index the
product of 'rate' and 'principal_amount' so that I could run a stats agg on
that. It would work, but not as clean.
One thing I notice here is that there is quite a bit of redundancy between
the 'combine' and 'reduce' scripts. I haven't fully explored what the most
concise representation might look like, but it could be something to think
about as this aggregation develops.
I have data that has a weighting field and I'd like to visualize the
weighted average in Kibana4. Is it possible to visualize this query in
Kibana4?
On Friday, 9 January 2015 23:42:42 UTC+1, Kallin Nagelberg wrote:
The current 1.4 docs mention that the scripted_metric aggregation is
experimental, and to share our usages. I've found a really great use on our
project so I thought I'd share!
While the 'stats' metric provides great data like 'sum' and 'average', we
needed to calculate a weighted average. In this case, the weighting field
is 'principal_amount', and the field we'd like the metric on is 'rate'. A
CURL for this agg is here:
Without this great new aggregation type, I guess I'd have to index the
product of 'rate' and 'principal_amount' so that I could run a stats agg on
that. It would work, but not as clean.
One thing I notice here is that there is quite a bit of redundancy between
the 'combine' and 'reduce' scripts. I haven't fully explored what the most
concise representation might look like, but it could be something to think
about as this aggregation develops.
Apache, Apache Lucene, Apache Hadoop, Hadoop, HDFS and the yellow elephant
logo are trademarks of the
Apache Software Foundation
in the United States and/or other countries.