Search code examples
elasticsearchaggregation

elastic search sort after aggregation


I have an elastic search query showing distinct value for [Have CVID], for each CONTACT_ID, and I want to sort by [Have CVID] count after aggregation. Where can I add the sort by here?

POST /dashboard/_search?size=0
{
  "query": {
    "bool": {
      "must_not": [
       {
          "match": {
            "Have CVID": ""
          }
        }
      ]
    }
  },
  "aggs": {
        "CVID": {
          "terms": {
            "field": "CONTACT_ID.keyword"
          },
      "aggs": {
        "type_count": {
          "cardinality": {
            "field": "Have CVID.keyword"
          }
        }
      }
   }}
}

Solution

  • You can add order to your terms aggregation and specify a sub-aggregation to order by, like this:

    POST /dashboard/_search?size=0
    {
      "query": {
        "bool": {
          "must_not": [{
            "match": {
              "Have CVID": ""
            }
          }]
        }
      },
      "aggs": {
        "CVID": {
          "terms": {
            "field": "CONTACT_ID.keyword",
            "order": {
              "type_count": "desc"
            }
          },
          "aggs": {
            "type_count": {
              "cardinality": {
                "field": "Have CVID.keyword"
              }
            }
          }
        }
      }
    }
    

    ElasticSearch documentation