Ответ 1
Так как оба (внешние) документы соответствуют условию соответствия одного из их внутренних документов запросу, оба внешних документа возвращаются, и агрегация вычисляется против всех внутренних документов, принадлежащих этим внешним документам. Уф.
Во всяком случае, похоже, это похоже на то, что вы хотите, я думаю, используя агрегацию фильтров:
POST /myindex/_search?search_type=count
{
"aggs": {
"nested_nestedobjects": {
"nested": {
"path": "nestedobjects"
},
"aggs": {
"filtered_nestedobjects": {
"filter": {
"term": {
"nestedobjects.objtype": "a"
}
},
"aggs": {
"my_agg": {
"sum": {
"field": "nestedobjects.objvalue"
}
}
}
}
}
}
}
}
...
{
"took": 4,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 0,
"hits": []
},
"aggregations": {
"nested_nestedobjects": {
"doc_count": 4,
"filtered_nestedobjects": {
"doc_count": 2,
"my_agg": {
"value": 4,
"value_as_string": "4.0"
}
}
}
}
}
Вот какой код я использовал для его проверки:
http://sense.qbox.io/gist/c1494619ff1bd0394d61f3d5a16cb9dfc229113a
Очень хорошо структурированный вопрос, кстати.