Hey guys, is there any way I can grab a bucket's key from within a scripted_metric?
I have an issue where I need to grab some specific data from within a document that is being aggregated.
For example, this is an example of the document I am working on:
{
    "attr1": "thing",
    "groups": [
        {
            "id": 1,
            "name": "foo"
        },
        {
            "id": 2,
            "name": "bar"
        },
        {
            "id": 3,
            "name": "baz"
        }
    ],
    "otherAttrs": true
}
Figure 1 (Document structure)
I am doing a terms aggregation on the distinct group IDs, but within each bucket, I'd like to put the name of the group that is represented by the bucket_key (which would be the id).
This is an example of the terms aggregation I am using:
{
    "terms": {
        "execution_hint": "global_ordinals_hash",
        "field": "actors.groups.id",
        "min_doc_count": 1
    }
}
Figure 2 (Terms Aggregation to create buckets where I am trying to set name as a field)
So ideally my response would look something like this:
{
    "...": "...",
    "buckets" : [
        {
            "key" : 1,
            "group_name": "foo",
            "doc_count" : 42684,
            "measure 0" : {
                "value" : 37180
            },
            "measure 3" : {
                "doc_count" : 37180,
                "measure 3" : { "value" : 68 }
            },
            "measure 4" : {
                "doc_count" : 3008,
                "measure 4" : {
                    "value" : 3008
                }
            }
        }
    ]
}
Figure 3 (Ideal Response format)
Notice how the key corresponds with the name found in Figure 1
So I am currently receiving a response similar to Figure 3 (without group_name) and I cannot for the life of me figure out how to extract the name field because it's within a document being aggregated.
Due to the nature of the documents I'm working with, this has to happen within a bucket aggregation but this one attribute is not an aggregation, it's just a single metric that I need to pluck off of one document.
So my attempt to solve this issue was to use a scripted_metric:
{
    "...":"...",
    "group_name": {
        "scripted_metric": {
            "map_script": {
                "lang": "painless",
                "source": """
                for (HashMap group : params._source.actor.groups) {
                    String groupId = < bucket_key_here >;
                    if (groupId != null && !groupId.isEmpty()) {
                        params._aggs.name = params._source.actor.groups[groupId].name;
                    }
                }
                """
            },
            "reduce_script": {
                "lang": "painless",
                "source": "return params._aggs.length > 0 ? params._aggs[0].name : null;"
            }
        }
    },
    "...":"..."
}
Figure 4 (Current attempt to use a scripted_metric to tease out the group name)
I cannot figure out how to access the bucket's key value which means even if I use _source to access the JSON structure of the document being aggregated, I cannot see the bucket in order to determine which group is the correct name.
Notice in Figure 1 that it's possible for one document to contain multiple groups. So I need to be able to reference the key in order to match the name from the corresponding id.
Please let me know if I can clarify or expound on anything to make this issue more clear.
Regards,
Adam