我希望在聚合中得到结果,其中buckets.length(桶的数量/数量)具有最小计数,类似于在SQL中使用HAVING。
(在此特定场景中至少访问了5天的网站访问者。)
我的一部分查询:
"aggs": {
"site_visitors": {
"aggs": {
"users": {
"terms": {
"field": "user_id",
"size": 0
},
"aggs": {
"daily_counts": {
"date_histogram": {
"field": "timestamp",
"interval": "1d"
}
}
}
}
}
}
}
这里我们有一个包含5个结果的桶(buckets.length)。大多数存储桶不会有5个或更多结果,我不想要所有这些。
{
"key": 123456,
"doc_count": 10,
"days_count": {
"buckets": [
{
"key_as_string": "2017-04-05T00:00:00.000Z",
"key": 1491350400000,
"doc_count": 2
},
{
"key_as_string": "2017-04-22T00:00:00.000Z",
"key": 1492819200000,
"doc_count": 1
},
{
"key_as_string": "2017-04-25T00:00:00.000Z",
"key": 1493078400000,
"doc_count": 4
},
{
"key_as_string": "2017-04-30T00:00:00.000Z",
"key": 1493510400000,
"doc_count": 2
},
{
"key_as_string": "2017-05-04T00:00:00.000Z",
"key": 1493856000000,
"doc_count": 1
}
]
}
}
我希望每个存储桶中只有至少5个结果或更多(例如:gte)的结果 - 不是doc_count,而是buckets.length。
有办法做到这一点吗?
答案 0 :(得分:1)
您可以在"min_doc_count": 5
聚合中添加date_histogram
参数。
"aggs": {
"site_visitors": {
"aggs": {
"users": {
"terms": {
"field": "user_id",
"size": 0
},
"aggs": {
"daily_counts": {
"date_histogram": {
"field": "timestamp",
"interval": "1d"
}
},
"min_5_buckets_selector": {
"bucket_selector": {
"buckets_path": {
"count": "daily_counts._bucket_count"
},
"script": {
"inline": "params.count >= 5"
}
}
}
}
}
}
}
}