0

我有存儲在ES產品,我想通過自己的規模聚集他們。我想設計下面的行爲。即使在查詢之外的每個術語都會根據查詢接收術語計數。全球長期聚集 - Elasticsearch 5

所以查詢大小[ 「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" 
     } 
     } 
    } 
} 

回答

0

您可以使用過濾器。

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

這似乎並不在elasticsearch 5 https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-filtered-query.html –

+0

@JosefRousek我的工作編輯了我的答案。現在在ES5中再試一次 – skal88

+0

謝謝你的努力,但這也行不通。在發佈之前我已經做了相當長時間的研究,所以它只是我描述問題的問題。 –