cardinality aggregation 可以用来统计documents去重后的个数。一般写法如:

“aggs”: {
    “type_count”: {
        “cardinality”: {
            “field”: “type”
        } 
    }
 }

返回的结果:

{
    ...
    “aggregations”: {
        “type_count“:{
            “value”: 3
        }
    }
}

精度控制:
在field同级添加 precision_threshold参数可以控制返回documents的精度。默认为3000,最大值为40000,超过这个值,返回的documents value就可能是一个近似值,不够精确。

上面是单个字段的distinct值, 多个字段的distinct值可以用script参数替换掉field字段。

{
   “aggs”: { 
       “cardinality”: {
          “script”: doc[‘field1’] + doc[‘field2’]
        }
    }
}

需要注意的是,上面script字段中的field字段默认为字符串类型。如果field字段有int类型,DSL SQL就会报错。因为“+” 连接符连接string 和 int 类型的字符串时会报错。如果要distinct的field中有int类型的字段,需要用 String.valueOf(doc[‘field1’]) + String.valueOf(doc[‘field2’])处理。