2016-08-12 134 views
0

我已經得到以下彈性搜索查詢,以便從彈性搜索中獲得最高總計ms,並按市場ID進行分組。Elasticsearch過濾聚合結果,其中計數大於x

{ 
    "from": 0, 
    "size": 0, 
    "query": { 
    "filtered": { 
    "filter": { 
     "and": [ 
     { 
      "term": { 
      "@type": "tradelog" 
      } 
     }, 
     { 
      "range": { 
      "@timestamp": { 
       "gte": "now-7d", 
       "lt": "now" 
      } 
      } 
     }, 
     { 
      "range": { 
      "TotalMs": { 
       "gte": 200, 
       "lt": 2000 
      } 
      } 
     } 
     ] 
    } 
    } 

}, 
"aggregations": { 
     "the_name": { 
     "terms": { 
      "field": "Market", 
      "order" : { "totalms_avg" : "desc" } 
     }, 
     "aggregations": { 
      "totalms_avg": { 
       "avg": { 
        "field": "TotalMs" 
       } 
      } 
     } 
     } 
    } 
} 

該查詢返回幾個桶,只有1個結果是我的數據中的異常值,所以我不希望它們包含在內。是否有可能篩選出小於5的桶?彈性搜索等價於SQL的HAVING條款。

回答

3

是的,你可以使用min_doc_count setting

... 
"aggregations": { 
     "the_name": { 
     "terms": { 
      "field": "Market", 
      "order" : { "totalms_avg" : "desc" }, 
      "min_doc_count": 5 
     }, 
     "aggregations": { 
      "totalms_avg": { 
       "avg": { 
        "field": "TotalMs" 
       } 
      } 
     } 
     } 
    } 
}