Elasticsearch, вложенный тип, как получить сумму doc_count всех элементов в ведре

используйте тот же пример, что и в сообщении здесь. скажем, что оба поля, address.city и address.stateOrProvince, являются вложенными, а агрегация НЕ указывает "nested":{"path":<nested path>}. Результат агрегирования не имеет суммы doc_count. Поскольку "nested":{"path":<nested path>} не указан, doc_count корневого уровня при попадании на корневой уровень также не является суммой doc_count в сегменте.

[отредактировано], добавлены примеры в качестве комментария Вэла, activities является вложенным типом. В запросе 1 указано "nested":{"path":<nested path>"}, а в запросе 2 нет. В результате2, как получить сумму doc_count всех элементов в ведре, которая в данном случае равна 2+1+1+1.

//doc1

{
"activities.entry.time": "2015-09-15T17:49:35.687Z",
"activities.duration": "18747",
"activities.entry.time": "2015-09-15T17:49:54.639Z",
"activities.duration": "65",
"activities.entry.time": "2015-09-15T17:49:56.737Z",
"activities.duration": "449",
"activities.entry.time": "2015-09-15T17:49:56.772Z",
"activities.duration": "412"}

//doc2

{
"activities.entry.time": "2015-09-15T17:55:43.304Z",
"activities.duration": "18675",
"activities.entry.time": "2015-09-15T17:56:02.150Z",
"activities.duration": "88",
"activities.entry.time": "2015-09-15T17:56:04.269Z",
"activities.duration": "396",
"activities.entry.time": "2015-09-15T17:56:04.314Z",
"activities.duration": "349"}

//doc3

{
"activities.entry.time": "2015-09-15T17:49:56.087Z",
"activities.duration": "18723",
"activities.entry.time": "2015-09-15T17:50:15.002Z",
"activities.duration": "77",
"activities.entry.time": "2015-09-15T17:50:17.125Z",
"activities.duration": "418",
"activities.entry.time": "2015-09-15T17:50:17.137Z",
"activities.duration": "404"}

//запрос1

{
"size": 0,
"aggs": {
    "dim0": {
        "nested": {
            "path": "activities"
        },
        "aggs": {
            "dh": {
                "date_histogram": {
                    "field": "activities.entry.time",
                    "interval": "minute",
                    "format": "yyyy-MM-dd",
                    "pre_zone": -7
                },
                "aggs": {
                    "avg_duration": {
                        "avg": {
                            "field": "activities.duration"
                        }
                    }
                }
            }
        }
    }
}}

//результат1

{
"took": 3,
"timed_out": false,
"_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
},
"hits": {
    "total": 3,
    "max_score": 0.0,
    "hits": []
},
"aggregations": {
    "dim0": {
        "doc_count": 12,
        "dh": {
            "buckets": [{
                "key_as_string": "2015-09-15",
                "key": 1442339340000,     //2015-09-15T17:49:00.000Z
                "doc_count": 5,           //4 count in doc1 + 1 count in doc3
                "avg_duration": {
                    "value": 7679.2       //(18747+65+449+412+18723) / 5
                }
            }, {
                "key_as_string": "2015-09-15",
                "key": 1442339400000,     //2015-09-15T17:50:00.000Z
                "doc_count": 3,
                "avg_duration": {
                    "value": 299.6666666666667
                }
            }, {
                "key_as_string": "2015-09-15",
                "key": 1442339700000,     //2015-09-15T17:55:00.000Z
                "doc_count": 1,
                "avg_duration": {
                    "value": 18675.0
                }
            }, {
                "key_as_string": "2015-09-15",
                "key": 1442339760000,     //2015-09-15T17:56:00.000Z
                "doc_count": 3,
                "avg_duration": {
                    "value": 277.6666666666667
                }
            }]
        }
    }
}}

//запрос2

{
"size": 0,
"aggs": {
    "dh": {
        "date_histogram": {
            "field": "activities.entry.time",
            "interval": "minute",
            "format": "yyyy-MM-dd",
            "pre_zone": -7
        },
        "aggs": {
            "avg_duration": {
                "avg": {
                    "field": "activities.duration"
                }
            }
        }
    }
}}

//результат2

{
"took": 2,
"timed_out": false,
"_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
},
"hits": {
    "total": 3,
    "max_score": 0.0,
    "hits": []
},
"aggregations": {
    "dh": {
        "buckets": [{
            "key_as_string": "2015-09-15",
            "key": 1442339340000, //2015-09-15T17:49:00.000Z
            "doc_count": 2,       //doc1 + doc3
            "avg_duration": {
                "value": 4911.875 //(18747+65+449+412)+(18723+77+418+404)/8
            }
        }, {
            "key_as_string": "2015-09-15",
            "key": 1442339400000, //2015-09-15T17:50:00.000Z
            "doc_count": 1,
            "avg_duration": {
                "value": 4905.5
            }
        }, {
            "key_as_string": "2015-09-15",
            "key": 1442339700000, //2015-09-15T17:55:00.000Z
            "doc_count": 1,
            "avg_duration": {
                "value": 4877.0
            }
        }, {
            "key_as_string": "2015-09-15",
            "key": 1442339760000, //2015-09-15T17:56:00.000Z
            "doc_count": 1,
            "avg_duration": {
                "value": 4877.0
            }
        }]
    }
}}

person androidkc    schedule 21.10.2015    source источник
comment
Я думаю, что в вопросе, на который вы ссылаетесь, автор имел в виду nested в смысле вложенных полей внутри объекта, а не тип nested как таковой. Я уверен, однако, что вы спрашиваете. Можете ли вы показать нам свой текущий запрос, что вы получаете и что вы ожидаете? Людям будет легче помочь вам.   -  person Val    schedule 22.10.2015
comment
спасибо Val, примеры добавлены.   -  person androidkc    schedule 22.10.2015
comment
Первый вопрос: почему бы вам не использовать агрегацию nested во втором запросе?   -  person Val    schedule 23.10.2015
comment
оба запроса имеют смысл, поскольку они предназначены для разных вариантов использования. это может быть причиной того, что elasticsearch разрешает невложенную агрегацию по вложенному полю, и пользователь может разработать используемую вложенную агрегацию или нет.   -  person androidkc    schedule 24.10.2015