Aggregations হলো Elasticsearch-এর একটি শক্তিশালী ফিচার, যা ডেটা বিশ্লেষণ এবং সারাংশ তৈরি করতে ব্যবহৃত হয়। এটি বড় আকারের ডেটা সেট থেকে গুরুত্বপূর্ণ তথ্য বের করতে এবং ডেটা বিশ্লেষণ করতে সহায়ক। Aggregations-এর মাধ্যমে সংখ্যা গণনা, গড় বের করা, সর্বোচ্চ ও সর্বনিম্ন মান বের করা, এবং ডেটাকে গ্রুপ করা যায়। Aggregations ব্যবহার করে Elasticsearch-এ ডেটা বিশ্লেষণ এবং রিপোর্টিং অত্যন্ত কার্যকরভাবে করা যায়।
Elasticsearch-এ Aggregations সাধারণত দুটি প্রধান ক্যাটেগরিতে বিভক্ত:
এছাড়াও Pipeline Aggregations এবং Matrix Aggregations রয়েছে, যা আরও জটিল এবং চেইন অপারেশনের জন্য ব্যবহৃত হয়। নিচে প্রতিটি প্রকারভেদের বিস্তারিত আলোচনা করা হলো।
Bucket Aggregations ডেটাকে গ্রুপ বা বাকেটে বিভক্ত করে এবং সেই বাকেটে থাকা ডকুমেন্টগুলোর সংখ্যা গণনা করে। এটি মূলত ডেটাকে গ্রুপ বা ক্যাটেগরিতে ভাগ করতে সহায়ক।
GET /sales/_search
{
"size": 0,
"aggs": {
"products_per_category": {
"terms": {
"field": "category.keyword"
}
}
}
}
"category.keyword"
ফিল্ডের ভিত্তিতে প্রোডাক্টগুলোকে গ্রুপ করা হয়েছে এবং প্রতিটি ক্যাটেগরিতে কতগুলো প্রোডাক্ট আছে তা গণনা করা হয়েছে।GET /sales/_search
{
"size": 0,
"aggs": {
"sales_over_time": {
"date_histogram": {
"field": "sale_date",
"calendar_interval": "month"
}
}
}
}
"sale_date"
ফিল্ডের উপর ভিত্তি করে মাস অনুযায়ী সেল গ্রুপ করা হয়েছে।Metric Aggregations ডেটার উপর গাণিতিক পরিমাপ বা অপারেশন করে, যেমন গড় (average), সর্বোচ্চ (max), সর্বনিম্ন (min), যোগফল (sum), বা ডকুমেন্টের সংখ্যা (count) বের করা।
GET /employees/_search
{
"size": 0,
"aggs": {
"average_salary": {
"avg": {
"field": "salary"
}
}
}
}
"salary"
ফিল্ডের গড় মান বের করা হয়েছে।GET /employees/_search
{
"size": 0,
"aggs": {
"salary_stats": {
"stats": {
"field": "salary"
}
}
}
}
"salary"
ফিল্ডের সর্বোচ্চ, সর্বনিম্ন, গড় এবং যোগফল প্রদান করা হয়েছে।Pipeline Aggregations একটি আগের Aggregation-এর উপর ভিত্তি করে কাজ করে এবং সেই Aggregation-এর আউটপুট ব্যবহার করে নতুন মান নির্ধারণ করে। এটি একাধিক Aggregation চেইন করার জন্য উপযুক্ত।
GET /sales/_search
{
"size": 0,
"aggs": {
"sales_over_time": {
"date_histogram": {
"field": "sale_date",
"calendar_interval": "month"
},
"aggs": {
"monthly_sales": {
"sum": {
"field": "amount"
}
},
"moving_avg_sales": {
"moving_avg": {
"buckets_path": "monthly_sales"
}
}
}
}
}
}
Matrix Aggregations ডেটার উপর গাণিতিক অপারেশন পরিচালনা করে এবং একাধিক ফিল্ড ব্যবহার করে মেট্রিক নির্ধারণ করে। এটি বিশেষত সংখ্যামূলক বা পরিসংখ্যানিক বিশ্লেষণের জন্য উপযোগী।
GET /financial_data/_search
{
"size": 0,
"aggs": {
"matrix_stats": {
"matrix_stats": {
"fields": ["revenue", "profit"]
}
}
}
}
"revenue"
এবং "profit"
ফিল্ডের উপর ভিত্তি করে পরিসংখ্যানিক মান বের করা হয়েছে।Elasticsearch-এর Aggregations-এর মাধ্যমে বড় আকারের ডেটা থেকে গুরুত্বপূর্ণ ইনসাইট বের করা যায়। নিচে কিছু সাধারণ ব্যবহারের উদাহরণ দেওয়া হলো:
GET /ecommerce/_search
{
"size": 0,
"aggs": {
"products_by_category": {
"terms": {
"field": "category.keyword"
}
}
}
}
GET /sales/_search
{
"size": 0,
"aggs": {
"total_revenue": {
"sum": {
"field": "revenue"
}
}
}
}
GET /website_traffic/_search
{
"size": 0,
"aggs": {
"visits_per_day": {
"date_histogram": {
"field": "visit_date",
"calendar_interval": "day"
}
}
}
}
Elasticsearch-এর Aggregations ডেটা বিশ্লেষণ এবং ট্রেন্ড নির্ধারণ করার জন্য অত্যন্ত শক্ত
Aggregation হলো Elasticsearch-এ ডেটা বিশ্লেষণ এবং সারাংশ তৈরি করার একটি শক্তিশালী টুল। এটি ডেটার উপর বিভিন্ন গাণিতিক এবং পরিসংখ্যানিক অপারেশন পরিচালনা করে গুরুত্বপূর্ণ ইনসাইট বের করতে এবং বড় ডেটা সেটকে সহজে বিশ্লেষণ করতে সহায়ক। Aggregation-এর মাধ্যমে সংখ্যা গণনা, গড় বের করা, সর্বোচ্চ ও সর্বনিম্ন মান নির্ধারণ করা, ডেটাকে গ্রুপ করা, এবং সময়ের ভিত্তিতে ডেটা বিশ্লেষণ করা যায়।
Aggregation ডেটা বিশ্লেষণ এবং অ্যানালাইসিসে সহায়ক, এবং Elasticsearch-এ Aggregation-এর প্রয়োজনীয়তা নিম্নলিখিত কয়েকটি কারণের জন্য গুরুত্বপূর্ণ:
GET /ecommerce/_search
{
"size": 0,
"aggs": {
"sales_by_category": {
"terms": {
"field": "category.keyword"
}
}
}
}
GET /sales/_search
{
"size": 0,
"aggs": {
"monthly_sales": {
"date_histogram": {
"field": "sale_date",
"calendar_interval": "month"
}
}
}
}
GET /products/_search
{
"size": 0,
"aggs": {
"average_price": {
"avg": {
"field": "price"
}
}
}
}
GET /employees/_search
{
"size": 0,
"aggs": {
"employees_per_department": {
"terms": {
"field": "department.keyword"
}
}
}
}
GET /logs/_search
{
"size": 0,
"aggs": {
"errors_over_time": {
"date_histogram": {
"field": "timestamp",
"calendar_interval": "hour"
},
"aggs": {
"error_count": {
"terms": {
"field": "error_type.keyword"
}
}
}
}
}
}
Aggregation-এর বিভিন্ন ধরণ রয়েছে, যা ভিন্ন ভিন্ন ধরনের ডেটা বিশ্লেষণ এবং ইনসাইট বের করতে ব্যবহৃত হয়:
Bucket Aggregations: ডেটাকে গ্রুপ বা বাকেটে বিভক্ত করে, যেমন:
Metric Aggregations: গাণিতিক অপারেশন পরিচালনা করে, যেমন:
Pipeline Aggregations: একাধিক Aggregation-এর আউটপুট ব্যবহার করে নতুন মান নির্ধারণ করা।
Aggregation Elasticsearch-এর একটি গুরুত্বপূর্ণ ফিচার, যা ডেটা বিশ্লেষণ এবং অ্যানালাইসিস সহজ করে তোলে। এটি বড় ডেটা সেট থেকে ইনসাইট বের করতে, রিয়েল-টাইম অ্যানালাইসিস করতে এবং ডেটা গ্রুপ করে রিপোর্টিং করতে সহায়ক। Aggregation সঠিকভাবে ব্যবহার করে Elasticsearch-কে ডেটা অ্যানালাইসিসের জন্য একটি শক্তিশালী টুল হিসেবে ব্যবহার করা যায়।
Elasticsearch এ Metric Aggregation এবং Bucket Aggregation হল দুটি প্রধান ধরনের অ্যাগ্রিগেশন যা ডেটা বিশ্লেষণ এবং উপস্থাপন করতে ব্যবহৃত হয়। এগুলো Elasticsearch এর অ্যাগ্রিগেশন API এর অংশ এবং ডেটা গ্রুপিং ও মেট্রিক ক্যালকুলেশনের মাধ্যমে ডেটা বিশ্লেষণ সহজ করে। নিচে Metric এবং Bucket Aggregation এর বেসিক ধারণা এবং তাদের ব্যবহারের উদাহরণ নিয়ে আলোচনা করা হলো:
Metric Aggregation সাধারণত সংখ্যাগত ডেটা থেকে মেট্রিক্স (গড়, সর্বনিম্ন, সর্বোচ্চ, সংখ্যা, যোগফল ইত্যাদি) ক্যালকুলেট করে। এটি ডেটার উপরে নির্দিষ্ট গণনা বা পরিমাপ করে এবং একটি নির্দিষ্ট ভ্যালু প্রদান করে।
GET /sales/_search
{
"size": 0,
"aggs": {
"average_price": {
"avg": {
"field": "price"
}
}
}
}
উপরের উদাহরণে, sales
ইনডেক্সে price
ফিল্ডের উপর ভিত্তি করে গড় (average) বের করা হচ্ছে। size
0
দেওয়া হয়েছে কারণ আমরা শুধু অ্যাগ্রিগেশন রেজাল্ট পেতে চাই, ডকুমেন্ট নয়।
Bucket Aggregation ডেটা কে গ্রুপ বা bucket আকারে বিভক্ত করে, যেখানে প্রতিটি bucket কিছু নির্দিষ্ট ক্রাইটেরিয়া পূরণ করে। এক একটি bucket এ পড়া ডকুমেন্টগুলোকে একত্রিত করে পরবর্তী বিশ্লেষণ করা যায়। এটি সাধারণত ডেটাকে গ্রুপ করার জন্য ব্যবহৃত হয় এবং প্রতিটি bucket এর মধ্যে আরও সাব-অ্যাগ্রিগেশন প্রয়োগ করা যেতে পারে।
GET /sales/_search
{
"size": 0,
"aggs": {
"sales_by_category": {
"terms": {
"field": "category.keyword"
},
"aggs": {
"average_price_per_category": {
"avg": {
"field": "price"
}
}
}
}
}
}
এই উদাহরণে:
category.keyword
ফিল্ডে বিভিন্ন ইউনিক ক্যাটাগরি দ্বারা ডেটাকে গ্রুপ করছে।Elasticsearch এ অনেক সময় Metric এবং Bucket Aggregation একসাথে ব্যবহার করা হয়। প্রথমে ডেটা কে গ্রুপ (bucket) করে এবং প্রতিটি bucket এর উপরে মেট্রিক অ্যাগ্রিগেশন প্রয়োগ করে ডেটা বিশ্লেষণ করা যায়।
GET /sales/_search
{
"size": 0,
"aggs": {
"sales_over_time": {
"date_histogram": {
"field": "sale_date",
"calendar_interval": "month"
},
"aggs": {
"total_sales": {
"sum": {
"field": "amount"
}
}
}
}
}
}
এই উদাহরণে:
sale_date
ফিল্ডের উপর ভিত্তি করে প্রতি মাসের জন্য একটি bucket তৈরি করছে।Elasticsearch এর অ্যাগ্রিগেশন সিস্টেম ডেটা বিশ্লেষণ ও উপস্থাপনে অত্যন্ত কার্যকর, এবং এর মাধ্যমে ডেটা থেকে অনেক গুরুত্বপূর্ণ ইনসাইট পাওয়া সম্ভব।
Kibana হলো Elasticsearch এর জন্য একটি ওপেন-সোর্স ডেটা ভিজ্যুয়ালাইজেশন এবং এক্সপ্লোরেশন টুল যা Elastic Stack (ELK Stack) এর অংশ। Kibana এর মাধ্যমে Elasticsearch এর ডেটা ভিজ্যুয়ালাইজ করা, বিশ্লেষণ করা এবং রিপোর্ট তৈরি করা সম্ভব। এটি সহজেই ডেটা ভিজ্যুয়ালাইজেশন এবং ড্যাশবোর্ড তৈরি করার জন্য ব্যবহৃত হয়। নিচে Kibana এবং Data Visualization এর বেসিক ধারণা, সেটআপ, এবং ব্যবহারের পদ্ধতি নিয়ে আলোচনা করা হলো:
Kibana আপনাকে Elasticsearch এর ইনডেক্স করা ডেটা এক্সপ্লোর করার এবং ভিজ্যুয়ালাইজেশন তৈরি করার সুযোগ দেয়। এটি বিভিন্ন ধরনের চার্ট, ম্যাপ, এবং কাস্টমাইজড ড্যাশবোর্ড তৈরি করতে সক্ষম। Kibana এর মাধ্যমে ডেটা ফিল্টার করা, ডেটার ট্রেন্ড বিশ্লেষণ করা এবং রিয়েল-টাইম রিপোর্ট তৈরি করা সহজ হয়।
Kibana Elasticsearch এর সাথে কানেক্টেড থাকতে হবে যাতে এটি ইনডেক্স করা ডেটা এক্সেস করতে পারে। নিচে Kibana সেটআপ এবং কনফিগারেশনের বেসিক ধাপগুলো উল্লেখ করা হলো:
Kibana ইনস্টলেশন:
kibana.yml
) Elasticsearch এর URL সেট করতে হবে।server.port: 5601
elasticsearch.hosts: ["http://localhost:9200"]
Kibana রান করা:
./bin/kibana
Kibana অ্যাক্সেস:
http://localhost:5601
এ অ্যাক্সেস করা যায়।Kibana এ বিভিন্ন ধরনের ভিজ্যুয়াল তৈরি করা যায়। নিচে কিছু সাধারণ ভিজ্যুয়াল এবং সেগুলো কিভাবে তৈরি করা যায়, তা আলোচনা করা হলো:
Discover:
Visualizations:
Visualize ট্যাব থেকে আপনি নতুন ভিজ্যুয়াল তৈরি করতে পারেন। বিভিন্ন ধরনের ভিজ্যুয়াল (যেমন, বার চার্ট, পাই চার্ট, লাইন চার্ট, টেবিল, ম্যাপ ইত্যাদি) বেছে নিয়ে Elasticsearch এর ডেটা থেকে ইনসাইট বের করা যায়।
বার চার্ট তৈরি করার উদাহরণ:
category.keyword
) এবং Y-axis এ Count নির্বাচন করুন।পাই চার্ট তৈরি করার উদাহরণ:
status.keyword
) এবং Count ব্যবহার করে ডেটা ভাগ করুন।Dashboards:
Timelion এবং TSVB (Time Series Visual Builder):
Kibana এর Canvas ফিচার ব্যবহার করে, আপনি প্রেজেন্টেশন-স্টাইলের ভিজ্যুয়ালাইজেশন তৈরি করতে পারেন। এটি আপনার ডেটা এবং ভিজ্যুয়ালাইজেশন কাস্টমাইজ করতে এবং আরও ইন্টারেক্টিভ ড্যাশবোর্ড তৈরি করতে সাহায্য করে।
Kibana Elasticsearch এর সাথে ইন্টিগ্রেটেড একটি শক্তিশালী টুল যা ডেটা ভিজ্যুয়ালাইজেশন এবং বিশ্লেষণে বিশাল ভূমিকা পালন করে। আপনি সহজেই বার, পাই, লাইন চার্ট বা টেবিল তৈরি করতে পারেন এবং বিভিন্ন ড্যাশবোর্ড একত্রিত করে ডেটার ইনসাইটস সংগ্রহ করতে পারেন। Kibana ব্যবহার করে আপনি আপনার ডেটাকে আরও ইন্টারেক্টিভ এবং বিশ্লেষণধর্মী ভিজ্যুয়ালাইজেশন দিয়ে তুলে ধরতে পারবেন।
Elasticsearch-এ Complex Data Analysis বলতে এমন ধরনের বিশ্লেষণকে বোঝায়, যেখানে একাধিক Aggregation এবং ফিল্টারিং ব্যবহার করে ডেটা থেকে গভীরতর ইনসাইট বের করা হয়। এই ধরনের বিশ্লেষণে সাধারণত Nested Aggregations, Pipeline Aggregations, এবং বিভিন্ন ফিল্টার ও প্যারামিটার ব্যবহার করা হয়, যাতে ডেটাকে বিভিন্ন স্তরে বিশ্লেষণ করে ফলাফল নির্ধারণ করা যায়।
নিচে Elasticsearch-এ Complex Data Analysis-এর কয়েকটি উদাহরণ দেওয়া হলো:
ধরা যাক, আমাদের একটি ই-কমার্স সাইট আছে, যেখানে মাসিক সেলস ডেটা রয়েছে। আমরা দেখতে চাই প্রতিটি মাসে কতটি বিক্রয় হয়েছে এবং সেই বিক্রয় থেকে একটি মুভিং এভারেজ বের করতে চাই, যাতে বিক্রয় ট্রেন্ড বিশ্লেষণ করা যায়।
GET /sales/_search
{
"size": 0,
"aggs": {
"monthly_sales": {
"date_histogram": {
"field": "sale_date",
"calendar_interval": "month"
},
"aggs": {
"total_sales": {
"sum": {
"field": "amount"
}
},
"moving_avg_sales": {
"moving_avg": {
"buckets_path": "total_sales"
}
}
}
}
}
}
ধরা যাক, আমাদের একটি কর্মচারী ডেটাবেস রয়েছে এবং আমরা প্রতিটি ডিপার্টমেন্টের গড় বেতন এবং ডিপার্টমেন্টভিত্তিক সর্বোচ্চ ও সর্বনিম্ন বেতন নির্ধারণ করতে চাই।
GET /employees/_search
{
"size": 0,
"aggs": {
"department_groups": {
"terms": {
"field": "department.keyword"
},
"aggs": {
"average_salary": {
"avg": {
"field": "salary"
}
},
"max_salary": {
"max": {
"field": "salary"
}
},
"min_salary": {
"min": {
"field": "salary"
}
}
}
}
}
}
ধরা যাক, আমাদের একটি লোকেশনভিত্তিক সেলস ডেটা রয়েছে এবং আমরা প্রতিটি অঞ্চলের বিক্রয় বিশ্লেষণ করতে চাই। আমরা নির্ধারণ করতে চাই প্রতিটি অঞ্চলে কতগুলো সেল হয়েছে এবং সেই অঞ্চলে গড় বিক্রয়ের পরিমাণ।
GET /sales/_search
{
"size": 0,
"aggs": {
"sales_by_location": {
"geo_distance": {
"field": "location",
"origin": "40.7128, -74.0060",
"ranges": [
{ "to": 10 },
{ "from": 10, "to": 50 },
{ "from": 50, "to": 100 }
]
},
"aggs": {
"average_sales_amount": {
"avg": {
"field": "amount"
}
},
"total_sales_count": {
"value_count": {
"field": "amount"
}
}
}
}
}
}
ধরা যাক, আমাদের একটি প্রোডাক্ট রিভিউ সিস্টেম রয়েছে এবং আমরা প্রতিটি প্রোডাক্টের রিভিউ বিশ্লেষণ করতে চাই, যেমন গড় রেটিং, সর্বোচ্চ রেটিং, এবং কতগুলো রিভিউ হয়েছে।
GET /reviews/_search
{
"size": 0,
"aggs": {
"products": {
"terms": {
"field": "product_id.keyword"
},
"aggs": {
"average_rating": {
"avg": {
"field": "rating"
}
},
"max_rating": {
"max": {
"field": "rating"
}
},
"review_count": {
"value_count": {
"field": "rating"
}
}
}
}
}
}
ধরা যাক, আমাদের একটি লগ ফাইল রয়েছে যেখানে প্রতি ঘন্টায় কতগুলো লগ এন্ট্রি হয়েছে তা বিশ্লেষণ করতে হবে। আমরা এক ঘন্টার ভিত্তিতে লগ এন্ট্রিগুলো গ্রুপ করে একটি মুভিং এভারেজ বের করতে চাই।
GET /logs/_search
{
"size": 0,
"aggs": {
"logs_per_hour": {
"date_histogram": {
"field": "timestamp",
"calendar_interval": "hour"
},
"aggs": {
"log_count": {
"value_count": {
"field": "log_id"
}
},
"moving_avg_logs": {
"moving_avg": {
"buckets_path": "log_count"
}
}
}
}
}
}
Elasticsearch-এ Complex Data Analysis করার জন্য বিভিন্ন ধরণের Aggregation এবং ফিল্টার একত্রে ব্যবহার করে গভীরতর ইনসাইট এবং ট্রেন্ড নির্ধারণ করা যায়। Nested Aggregations, Pipeline Aggregations, এবং Geo Aggregations ব্যবহার করে বড় ডেটা সেট থেকে ডেটার সারাংশ এবং প্যাটার্ন নির্ধারণ করা যায়, যা রিপোর্টিং এবং সিদ্ধান্ত নেওয়ার জন্য অত্যন্ত কার্যকরী।