နားလည်ထားရမယ့် အချက်
Lesson 11 က aggregation basics (metric + bucket) ကို intro လုပ်ခဲ့ပေမယ့် ဒီ project မှာတော့ aggregation များစွာကို nested/combined အနေနဲ့ တစ်ခုတည်း request ထဲ ပေါင်းစပ်ပြီး real analytics dashboard တစ်ခုကို ဆောက်ကြည့်ပါမယ်—`date_histogram` bucket aggregation (time-based bucket, ဥပမာ "day တစ်ခုစီမှာ event ဘယ်နှစ်ခုဖြစ်ခဲ့လဲ") ကို `terms` aggregation ထဲမှာ nest ထည့်ရင် "topic တစ်ခုစီအတွက် day တစ်ခုစီမှာ view count ဘယ်လောက်ရှိလဲ" ဆိုတဲ့ two-dimensional analytics ကို query တစ်ခုတည်းနဲ့ ရနိုင်ပါတယ်—SQL ဆိုရင် `GROUP BY topic, date_trunc('day', occurred_at)` နှစ်ထပ် group by နဲ့ ရည်ရွယ်ချက်တူပါတယ်။ Kibana ကို Lesson 7 မှာ Dev Tools console အနေနဲ့ intro လုပ်ခဲ့ပေမယ့် Kibana ရဲ့ core purpose ကတော့ visualization ဖြစ်ပါတယ်—Elasticsearch aggregation query တွေကို JSON response အဖြစ် manually parse ပြီး chart ဆွဲမယ့်အစား Kibana ရဲ့ "Lens"/"Visualize" UI က index pattern တစ်ခုကို point ချရုံနဲ့ bar chart, line chart, data table စတာတွေကို drag-and-drop ဖြင့် interactively ဆောက်နိုင်ပါတယ်—underlying aggregation query ကို Kibana ကိုယ်တိုင်က auto-generate ပေးပါတယ်။ Analytics dashboard တစ်ခုကို production-grade ဆောက်ချင်ရင် raw event data (ဥပမာ user ရဲ့ lesson-view event တစ်ခုစီ) ကို separate time-series index (Lesson 16 ရဲ့ ILM concept ကို ဒီနေရာမှာ apply လို့ရ) ထဲ သိမ်းသင့်ပြီး `tutorials` catalog index နဲ့ ရောစပ်ဖို့ မသင့်ပါ—analytics data ရဲ့ growth pattern (daily events) နှင့် catalog data ရဲ့ growth pattern (occasional edits) က လွန်စွာကွာခြားလို့ index/lifecycle strategy သီးခြားစီ လိုအပ်ပါတယ်။
လက်တွေ့ scenario နဲ့ ချိတ်ကြည့်မယ်
Tutorial Platform ရဲ့ `lesson-views` event index (`{ tutorialId, tags, occurredAt }` documents, Lesson 16 style ILM policy ပါ) ကနေ "topic (tags) တစ်ခုစီအတွက် week တစ်ခုစီမှာ view count ဘယ်လောက်ရှိလဲ" ဆိုတဲ့ nested aggregation query ရေးမယ်—`terms` aggregation (`tags` ပေါ်) ထဲမှာ `date_histogram` (weekly interval) ကို nest ထည့်မယ်။ ဒီ query ကို Kibana Dev Tools ထဲမှာ prototype လုပ်ပြီးမှ Kibana Lens ထဲကို ပြောင်းပြီး "most-viewed topics this month" bar chart နှင့် "weekly completion trend" line chart ကို drag-and-drop ဖြင့် ဆောက်မယ်—dashboard တစ်ခုအဖြစ် pin ထားပြီး admin team ကို share ပေးမယ်။
အတူတူ စမ်းရေးကြည့်မယ်
GET /lesson-views/_search
{
"size": 0,
"aggs": {
"by_topic": {
"terms": { "field": "tags", "size": 10 },
"aggs": {
"by_week": {
"date_histogram": { "field": "occurredAt", "calendar_interval": "week" }
}
}
}
}
}Tag တစ်ခုစီအောက်မှာ week တစ်ခုစီအတွက် view count nested buckets ရမည်—Kibana Lens ထဲမှာ chart အဖြစ် ဆွဲနိုင်မည်။၅ မိနစ် စမ်းကြည့်
"difficulty level တစ်ခုစီအတွက် average views" ဆိုတဲ့ query တစ်ခုကို `terms` (difficulty) aggregation ထဲမှာ `avg` metric aggregation nest ထည့်ပြီး ရေးပါ—ရလဒ်ကို Kibana bar chart တစ်ခုအဖြစ် ဘယ်လို configure လုပ်မလဲ ရေးချပါ။
သတိလေးတစ်ချက်
High-volume analytics event data (daily user activity logs) ကို `tutorials` catalog index ထဲပဲ တွဲသိမ်းခြင်း—catalog index ရဲ့ size/growth pattern ကို analytics data ကနေ ဖျက်ဆီးပြီး search performance ကိုပါ ထိခိုက်နိုင်ပါတယ်။
Nested aggregation ထဲက outer `terms` aggregation ရဲ့ `size` parameter ကို default (10) အတိုင်း ချန်ထားခြင်း—topic count 10 ထက်များနေရင် bucket အချို့ silently ချန်ထားခံရနိုင်ပြီး chart ထဲ data မပြည့်စုံတော့ပါ။
Kibana Guide — Create a Visualization — Elastic