使用Elasticsearch过滤聚合结果,其中计数大于x。

6
我有以下的Elasticsearch查询,目的是按市场ID分组获取最高的总毫秒数。
    {
  "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"
               }
            }
         }
      }
   }
}

这个查询返回了多个只有一个结果的桶,这些结果在我的数据中是异常值,所以我不想将它们包含在内。是否可以过滤掉任何计数少于5的桶?这相当于SQL的'HAVING'子句在ElasticSearch中的等价操作。

1个回答

19

是的,您可以使用min_doc_count设置

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接