versh23
versh23

Reputation: 149

elasticsearch composite aggs with nested object

I have an object with nested field.

  "parameters": {
        "type": "nested",
        "properties": {
          "id": {
            "type": "integer"
          },
          "values": {
            "type": "keyword"
          }
        }
      }

I am trying aggregate operation:

GET places/place/_search?size=0
{
  "query": {
    "match_all": {}
  },
  "aggs": {
    "parameters": {
      "nested": {
        "path": "parameters"
      },
      "aggs": {
        "parameters_cnt_i": {
          "terms": {
            "field": "parameters.id",
            "size": 100
          },
          "aggs": {
            "parameters_cnt_v": {
              "terms": {
                "field": "parameters.values",
                "size": 100
              }
            }
          }
        }
      }
    }
  }
}

but it is not good, because i set a "size" too large. in docs says

If you want to retrieve all terms or all combinations of terms in a nested terms aggregation you should use the Composite aggregation

but i cant understand how to use a Composite aggregation with nested object.. its real?

Upvotes: 3

Views: 6224

Answers (2)

Mao Ying
Mao Ying

Reputation: 21

my solution

{
  "size": 0, 
  "aggs" : {
     "parameters" : {
        "nested" : {
            "path" : "parameters"
        },
        "aggs": {
          "group":{
            "composite" : {
              "size": 100, // your size 
              "sources" : [
                { "id": { "terms" : { "field": "parameters.id"} }}
              ]
            }
          }
        }
    }
  }
}

Upvotes: 2

tjchecketts
tjchecketts

Reputation: 110

Try dropping your 3rd "aggs", like this:

{
    "aggs": {
        "parameters": {
            "nested": {
                "path": "parameters"
            },
            "aggs": {
                "count_item_one": {
                    "terms" : { 
                        "field": "parameters.item_one",
                        "size": 100
                    }
                },
                "count_item_two": {
                    "terms" : { 
                        "field": "parameters.item_two",
                        "size": 100
                    }
                }
            }
        }
    }
}

If you're 2nd item is nested again, you may have to set up your nested params again as you did with your 1st "aggs".

Upvotes: -1

Related Questions