聚合索引
当数据量比较大时,kinbana展板因数据量庞大导致加载失败。
为了解决这个问题,可是使用聚合索引去计算需要的数据,并存储到另外的索引中,这样新的索引中只包含了所需数据,查询数据量大大降低。
以下是将drm-cau索引中唯一requestId每天的数量进行统计,并将结果存储到drm-cau-daily-count3索引中,便于后续快速查询每日的请求唯一性指标。
Transform Job 配置
PUT _transform/drm-cau-daily-count3
{
"source": {
"index": "drm-cau",
"query": {
"range": {
"@timestamp": {
"gte": "now-30d/d"
}
}
}
},
"dest": {
"index": "drm-cau-daily-count3"
},
"pivot": {
"group_by": {
"date": {
"date_histogram": {
"field": "@timestamp",
"calendar_interval": "1d",
"time_zone": "+08:00"
}
}
},
"aggregations": {
"unique_request_count": {
"cardinality": {
"field": "requestId.keyword",
"precision_threshold": 40000
}
}
}
},
"frequency": "1h",
"sync": {
"time": {
"field": "@timestamp",
"delay": "60s"
}
},
"settings": {
"max_page_search_size": 10000
},
"description": "Daily unique count of requestId in drm-cau index"
}
说明:
- source.index:指定源索引为 drm-cau。
- dest.index:目标索引为 drm-cau-daily-count3,存储聚合结果。
- pivot.group_by:使用 date_histogram 按 @timestamp 字段以 1 天粒度分组。
- aggregations:value_count 统计 requestId.keyword 的出现次数。
- frequency:Job 每小时检查一次新数据,可根据需要调整(例如 5m 或 1d)。
- sync.time:增量同步基于 @timestamp 字段,delay 确保数据写入后被处理。
启动
POST _transform/drm-cau-daily-count3/_start
查看状态
GET _transform/drm-cau-daily-count3/_stats
查询
GET drm-cau-daily-count3/_search
{
"query": {
"range": {
"date": {
"gte": "now-3d/d",
"lte": "now/d"
}
}
},
"sort": [
{ "date": { "order": "asc" } }
],
"script_fields": {
"shanghai_date": {
"script": {
"source": "doc['date'].value.withZoneSameInstant(ZoneId.of('Asia/Shanghai')).toString()",
"lang": "painless"
}
}
},
"fields": [
{ "field": "unique_request_count" }
],
"size": 10
}
评论区