get set(不同值列表)满足条件

时间:2016-12-08 15:02:03

标签: elasticsearch

我收到了产品文件。产品看起来像:

{
   "_index": "1",
   "_type": "product", 
   "_id": "1",
   "_source": {
      "group": "g1"
      "exist": true 
   }
}

我正在尝试获取(所有产品的)组列表 - 但只有这些如何满足"exist" == true(至少有一个现有产品的组)

我试过了:

{
   "size": 0,
   "aggs" : {
       "_source" : {
           "terms" : { 
             "field" : "group"
            }
       }
   }
}

返回带有计数的组列表(这也是多余的,可能需要花费额外的时间来计算),但我正在尝试添加"exist"=true的条件/查询。

  1. 我怎样才能做到这一点?
  2. 我真的需要聚合吗? (有更有效的方法吗?)
  3. 注意:我正在使用弹性搜索1.4

1 个答案:

答案 0 :(得分:1)

Filtered aggregation添加到术语聚合将确保仅显示存在true的组。 为了提高性能,请确保" group"字段未经过分析"

示例:

{
   "size": 0,
   "aggs": {
      "exist_group": {
         "filter": {
            "term": {
               "exist": "true"
            }
         },
         "aggs": {
            "groups": {
               "terms": {
                  "field": "group"
               }
            }
         }
      }
   }
}