Search code examples
elasticsearchelasticsearch-aggregationelasticsearch-dsl

Elasticsearch aggregation for dynamic attiribute


In ES, I need aggs for dynamic attribute fields.

My ES document structure

"_source": {
        "id": 80682,
                ....,
        "product_characters": [
            {
                "id": 128024,
                "value_id": 14194,
                "characters": {
                    "id": 749,
                    "slug": "rang",
                                        ...                 
                },
                "product_id": 80682,
                "character_id": 749
            },
                        ...
                 ]
}

There product document structure, and product_characters for attributes of product. And value_id for value of product, character_id for attribute type.

I need to get aggs of, all character_id types with count, and inside value_id's count.

"aggs":[
    {
      "key":121,
      "count":3000,
      "value_id":[
          {
            "key":1402,
            "count":12,
          },
           ...
      ]

}
]

I have tried nested and filters, but not get disired result.


Solution

  • I think Terms Aggs and Nested Aggs resolve your problem.

    Ex:

    {
      "size": 0,
      "aggs": {
        "agg_value": {
          "nested": {
            "path": "product_characters"
          },
          "aggs": {
            "agg_value_id": {
              "terms": {
                "field": "product_characters.value_id",
                "size": 10
              }
            },
             "agg_character_id": {
              "terms": {
                "field": "product_characters.character_id",
                "size": 10
              }
            }
          }
        }
      }
    }