0

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

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

小号:1
米:1
大号:0

这有可能吗?

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

小号:1
米: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"
         }
      }
   }
}
4

1 回答 1

0

您可以使用过滤器。

{
    "size": 0,
    "query": {
        "bool": {
            "must": [
                { "terms": { "field": "size" } }
            ],
            "filter": { 
                "terms": { "size": [ "S", "M"] } 
            }
        }
    },
    "aggs": {
        "size": {
            "terms": { "field": "size" }
        }
    }
}
于 2016-11-30T14:04:19.013 回答