具有过滤计数的全局术语聚合 - Elasticsearch 5

时间:2016-11-30 13:43:35

标签: elasticsearch elasticsearch-aggregation elasticsearch-5

我有存储在ES中的产品,我正在尝试按其大小聚合它们。我想设计以下行为。对于每个术语,甚至在查询之外,根据查询接收术语计数。

所以查询尺寸[“S”,“M”]我想收到:

S:1
M:1
L:0

这有可能吗?

这是我的设置,我得到以下结果:

S:1
M:1

但是L完全失踪了。

PUT demo
{
    "mappings": {
        "product": {
            "properties": {
                "size": { 
                  "type": "keyword"
                }
            }
        }
    }
}

PUT demo/product/1
{
    "size": "S"  
}

PUT demo/product/2
{
    "size": "M"  
}

PUT demo/product/3
{
    "size": "L"  
}

GET demo/_search
{
   "size": 0,
   "query": {
      "bool": {
         "must": [
            {
               "terms": {
                  "size": [
                     "S",
                     "M"
                  ]
               }
            }
         ]
      }
   },
   "aggs": {
      "size": {
         "terms": {
            "field": "size"
         }
      }
   }
}

1 个答案:

答案 0 :(得分:0)

您可以使用过滤器。

{
    "size": 0,
    "query": {
        "bool": {
            "must": [
                { "terms": { "field": "size" } }
            ],
            "filter": { 
                "terms": { "size": [ "S", "M"] } 
            }
        }
    },
    "aggs": {
        "size": {
            "terms": { "field": "size" }
        }
    }
}