弹性搜索得到桶数

时间:2016-10-16 07:46:25

标签: elasticsearch

我有以下查询:

GET images/_search
{
   "query":{
      "bool":{
         "must":[
            {
               "term":{
                  "appID.raw":"myApp"
               }
            }
         ]
      }
   },
   "size":0,
   "aggs":{
      "perDeviceAggregation":{
         "terms":{
            "field":"deviceID",
            "min_doc_count":50000
         }
      }
   }
}

此查询返回“buckets”数组,但我想只返回数组的长度,而不是数组本身。

说明:此查询的目的是计算属于应用程序“myApp”的设备数量,具有超过50,000个图像。我不需要查询来返回这些设备,只是知道有多少设备。

1 个答案:

答案 0 :(得分:0)

terms aggregation返回存储桶 - 每个字段的唯一字词为1个存储区 - 其中每个存储区包含包含该字词的文档的计数

听起来您想知道唯一字词数而不是每个字词的文档计数。这个概念称为cardinality

有一个different aggregation来确定基数。您的查询将如下所示:

GET images/_search
{
   "query":{
      "bool":{
         "must":[
            {
               "term":{
                  "appID.raw":"myApp"
               }
            }
         ]
      }
   },
   "size":0,
   "aggs":{
      "deviceIdCardinality":{
         "cardinality":{
            "field":"deviceID"
         }
      }
   }
}

注意:基数计数是近似值。您可以使用聚合的precision_threshold参数配置准确性。有关详细信息,请参阅文档。