Not sure if this is the right place to post but here goes...
How do I create a bucket aggregation (in this case terms aggregations), that keys off of a nested field AND a non nested field. I would like to the results to be a single bucketaggregation (with other sub aggregations included).
Example mapping:
"mappings": {
"test": {
"dynamic": "false",
"properties": {
"foo": {
"dynamic": "false",
"properties": {
"bar": {
"dynamic": "false",
"properties": {
"id": {
"type": "long"
}
}
},
"nesty": {
"type": "nested",
"properties": {
"bar": {
"dynamic": "false",
"properties": {
"id": {
"type": "long"
}
}
}
}
}
}
}
}
}
}
Example documents
{ "foo":
{ "nesty": [
{ "bar":{"id":1}},
{ "bar":{"id":2}}
]
}
}
{ "foo": { "bar" : {"id": 1} } }
What I expect back:
"aggregations" : {
"blah" : {
"buckets" : [
{
"key" : "1",
"doc_count" : 2,
...
},
{
"key" : "2",
"doc_count" : 1,
...
}
]
}
}
Here's what I have tried so far
GET _search
{
"size": 0,
"aggs": {
"a": {
"nested": {
"path": "foo.nesty"
},
"aggs": {
"a": {
"terms": {
"script": "if (doc['foo.bar.id'].value != 0) {return doc['foo.bar.id'].value} return doc['foo.nesty.bar.id'].value"
}
}
}
},
"b": {
"terms": {
"script": {
"inline": "if (doc['foo.bar.id'].value != 0) {return doc['foo.bar.id'].value} return doc['foo.nesty.bar.id'].value"
}
}
}
}
}
There doesn't seem to be a sibling pipeline aggregation that lets me combine the buckets from two aggregations either, so if I had two terms aggregations (one nested and one not) I can't seem to combine the buckets they return.
Is there any way to access both a nested field and a non nested field in a script?