# \[solved\] How to do this query aggs?

**URL:** <https://discuss.elastic.co/t/solved-how-to-do-this-query-aggs/57624>\
**Category:** Elasticsearch\
**Created:** [August 9, 2016, 7:49pm UTC](https://discuss.elastic.co/t/solved-how-to-do-this-query-aggs/57624 "2016-08-09T19:49:11Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![rodrigoalviani](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/rodrigoalviani/32/11288_2.png) [@rodrigoalviani](https://discuss.elastic.co/u/rodrigoalviani)\
**Post date:** [August 9, 2016, 7:49pm UTC](https://discuss.elastic.co/t/solved-how-to-do-this-query-aggs/57624/1 "2016-08-09T19:49:11Z")

</div>

My documents have this format:

`{_id: 1, make: {_id: 12, name: "fiat"}, model: {_id: 121, name: 'strada'}}, {_id: 2, make: {_id: 12, name: "fiat"}, model: {_id: 122, name: 'palio'}}, {_id: 3, make: {_id: 12, name: "fiat"}, model: {_id: 123, name: 'ka'}}, {_id: 4, make: {_id: 12, name: "fiat"}, model: {_id: 124, name: 'uno'}}, {_id: 5, make: {_id: 12, name: "fiat"}, model: {_id: 121, name: 'strada'}}, {_id: 6, make: {_id: 12, name: "fiat"}, model: {_id: 122, name: 'palio'}}, {_id: 7, make: {_id: 13, name: "ford"}, model: {_id: 125, name: 'escort'}}, {_id: 8, make: {_id: 13, name: "ford"}, model: {_id: 126, name: 'fiesta'}}, {_id: 9, make: {_id: 14, name: "gm"}, model: {_id: 127, name: 'astra'}}`

And I want something like this:  
`{ 'make': [{ _id: 12, name: 'fiat', count: 6, models: [ {_id: 121, name: 'strada', count: 2}, {_id: 122, name: 'palio', count: 2}, {_id: 123, name: 'ka', count: 1}, {_id: 124, name: 'uno', count: 1}] }, { _id: 13, name: 'ford', count: 2, models: [{_id: 125, name: 'escort', count: 1}, {_id: 126, name: 'fiesta', count: 1}] }, { _id: 14, name: 'gm', count: 1, models: [{_id: 127, name: 'astra', count: 1}] } ] }`

How to do this query?

---

<div class="post-metadata">

**Author:** ![mikemccand](https://avatars.discourse-cdn.com/v4/letter/m/f04885/32.png) [@mikemccand](https://discuss.elastic.co/u/mikemccand)\
**Post date:** [August 9, 2016, 8:31pm UTC](https://discuss.elastic.co/t/solved-how-to-do-this-query-aggs/57624/2 "2016-08-09T20:31:31Z")

</div>

Maybe a `terms` aggregation on `make` with a `top_hits` sub-aggregation?

---

<div class="post-metadata">

**Author:** ![rodrigoalviani](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/rodrigoalviani/32/11288_2.png) [@rodrigoalviani](https://discuss.elastic.co/u/rodrigoalviani)\
**Post date:** [August 9, 2016, 8:34pm UTC](https://discuss.elastic.co/t/solved-how-to-do-this-query-aggs/57624/3 "2016-08-09T20:34:25Z")

</div>

Can you write a simple example? I am new in ES and I'm experiencing some difficulties with this query

---

<div class="post-metadata">

**Author:** ![jpountz](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/jpountz/32/45836_2.png) [@jpountz](https://discuss.elastic.co/u/jpountz)\
**Post date:** [August 9, 2016, 8:51pm UTC](https://discuss.elastic.co/t/solved-how-to-do-this-query-aggs/57624/4 "2016-08-09T20:51:13Z")

</div>

It would look something like this:

```auto
{
  "aggs": {
    "by_make": {
      "terms": {
        "field": "make"
      },
      "aggs": {
        "top_models": {
          "top_hits": {}
        }
      }
    }
  }
}

```

---

<div class="post-metadata">

**Author:** ![rodrigoalviani](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/rodrigoalviani/32/11288_2.png) [@rodrigoalviani](https://discuss.elastic.co/u/rodrigoalviani)\
**Post date:** [August 10, 2016, 1:59pm UTC](https://discuss.elastic.co/t/solved-how-to-do-this-query-aggs/57624/5 "2016-08-10T13:59:23Z")

</div>

This works:

> <https://gist.github.com/rodrigoalviani/e9ad8b5f90bae57e9e8c68c574409e1f>

But if a model have a compound name (like "new fiesta"), this is grouped as 2 different keys.  
How to use model as a string?

---

<div class="post-metadata">

**Author:** ![rodrigoalviani](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/rodrigoalviani/32/11288_2.png) [@rodrigoalviani](https://discuss.elastic.co/u/rodrigoalviani)\
**Post date:** [August 10, 2016, 7:00pm UTC](https://discuss.elastic.co/t/solved-how-to-do-this-query-aggs/57624/6 "2016-08-10T19:00:55Z")

</div>

To solve, I used new mapping to this field ("index": "not\_analyzed")

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [July 5, 2017, 10:28pm UTC](https://discuss.elastic.co/t/solved-how-to-do-this-query-aggs/57624/7 "2017-07-05T22:28:41Z")

</div>


