2016-08-12 131 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" 
       } 
      } 
     } 
     } 
    } 
}