English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

الجمع في Elasticsearch

جمع البيانات الأساسية يجمع جميع البيانات التي يتم اختيارها في استعلام البحث، ويتم تشكيله من العديد من المكونات، مما يساعد في بناء تلخيص معقد للبيانات. بنية التجميع الأساسية مثلما يظهر أدناه-

"aggregations" : {
   "" : {
      "" : {
      }
 
      ["meta" : { [] } ]?
      ["aggregations" : { []+ } ]?
   }
   ["" : { ... }]*
}

تتميز التجميعات بأنواع متعددة، وكل نوع منها له غرضه الخاص. سنتحدث عن هذه المسائل بشكل مفصل في هذا الفصل.

تجميع المؤشرات

تساعد هذه التجميعات في حساب التمثيل البياني بناءً على قيم المجالات في مستند التجميع، ويمكن أن يتم إنشاء بعض القيم من السكربت أيضًا.

التمثيل البياني يمكن أن يكون قيمة واحدة (مثل تجميع متوسط) أو قيم متعددة (مثل البيانات الإحصائية).

تجميع متوسط

هذا التجميع يستخدم للحصول على متوسط أي مجال عددى موجود في مستند التجميع. على سبيل المثال،

POST /schools/_search
{
   "aggs":{
      "avg_fees":{"avg":{"field":"fees"}}
   }
}

عند تشغيل الشيفرة المذكورة أعلاه، نحصل على النتيجة التالية-

{
   "took": 41,
   "timed_out": false,
   "_shards": {
      "total": 1,
      "successful" : 1,
      "skipped" : 0,
      "failed" : 0
   },
   "hits" : {
      "total" : {
         "value" : 2,
         "relation" : "eq"
      },
      "max_score": 1.0,
      "hits": [
         {
            "_index": "schools",
            "_type": "school",
            "_id": "5",
            "_score": 1.0,
            "_source": {
               "name": "Central School",
               "description": "CBSE Affiliation",
               "street": "Nagan",
               "city": "paprola",
               "state": "HP",
               "zip": "176115",
               "location": [
                  31.8955385,
                  76.8380405
               ],
            "fees": 2200,
            "tags": [
               "Senior Secondary",
               "beautiful campus"
            ],
            "rating": "3.3"
         }
      },
      {
         "_index": "schools",
         "_type": "school",
         "_id": "4",
         "_score": 1.0,
         "_source": {
            "name": "City Best School",
            "description": "ICSE",
            "street": "West End",
            "city": "Meerut",
            "state": "UP",
            "zip": "250002",
            "location": [
               28.9926174,
               77.692485
            ],
            "fees": 3500,
            "tags": [
               "fully computerized"
            ],
            "rating": "4.5"
         }
      }
   ]
 },
   "aggregations" : {
      "avg_fees": {
         "value" : 2850.0
      }
   }
}

تجميع القاعدة

يقدم هذا التجميع عدد القيم المختلفة الخاصة بمجال معين.

POST /schools/_search?size=0
{
   "aggs":{
      "distinct_name_count":{"cardinality":{"field":"fees"}}
   }
}

عند تشغيل الشيفرة المذكورة أعلاه، نحصل على النتيجة التالية-

{
   "took": 2,
   "timed_out": false,
   "_shards": {
      "total": 1,
      "successful" : 1,
      "skipped" : 0,
      "failed" : 0
   },
   "hits" : {
      "total" : {
         "value" : 2,
         "relation" : "eq"
      },
      "max_score" : null,
      "hits" : [ ]
   },
   "aggregations" : {
      "distinct_name_count": {
         "value": 2
      }
   }
}

ملاحظة قيمة القاعدة هي 2، لأن الرسوم تحتوي على قيمتين مختلفتين.

تجميع البيانات الموسعة

هذا التجميع سينتج عنه جميع الإحصائيات المتعلقة بمجال الرقم المحدد في مستند التجميع.

POST /schools/_search?size=0
{
   "aggs": {
      "fees_stats": {  "extended_stats": {  "field": "fees" } } }
   }
}

عند تشغيل الشيفرة المذكورة أعلاه، نحصل على النتيجة التالية-

{
   "took": 8,
   "timed_out": false,
   "_shards": {
      "total": 1,
      "successful" : 1,
      "skipped" : 0,
      "failed" : 0
   },
   "hits" : {
      "total" : {
         "value" : 2,
         "relation" : "eq"
      },
      "max_score" : null,
      "hits" : [ ]
   },
   "aggregations" : {
      "fees_stats": {
         "count": 2,
         "min": 2200.0,
         "max": 3500.0,
         "avg": 2850.0,
         "sum": 5700.0,
         "sum_of_squares": 1.709E7,
         "variance": 422500.0
         "std_deviation": 650.0,
         "std_deviation_bounds": {
            "upper": 4150.0,
            "lower": 1550.0
         }
      }
   }
}

جمع الأعلى

يبحث هذا الجمع عن أعلى قيمة في الحقل الرقمي المحدد في مستندات الجمع.

POST /schools/_search?size=0
{
   "aggs": {
   "max_fees": { "max": { "field": "fees" } } }
   }
}

عند تشغيل الشيفرة المذكورة أعلاه، نحصل على النتيجة التالية-

{
   "took": 16,
   "timed_out": false,
   "_shards": {
      "total": 1,
      "successful" : 1,
      "skipped" : 0,
      "failed" : 0
   },
  "hits" : {
      "total" : {
         "value" : 2,
         "relation" : "eq"
      },
      "max_score" : null,
      "hits" : [ ]
   },
   "aggregations" : {
      "max_fees": {
         "value": 3500.0
      }
   }
}

جمع الأدنى

يبحث هذا الجمع عن أقل قيمة في الحقل الرقمي المحدد في مستندات الجمع.

POST /schools/_search?size=0
{
   "aggs": {
      "min_fees": { "min": { "field": "fees" } }
   }
}

عند تشغيل الشيفرة المذكورة أعلاه، نحصل على النتيجة التالية-

{
   "took": 2,
   "timed_out": false,
   "_shards": {
      "total": 1,
      "successful" : 1,
      "skipped" : 0,
      "failed" : 0
   },
   "hits" : {
      "total" : {
         "value" : 2,
         "relation" : "eq"
      },
      "max_score" : null,
      "hits" : [ ]
   },
  "aggregations" : {
      "min_fees" : {
         "value": 2200.0
      }
   }
}

جمع التجميع

يحسب هذا الجمع مجموع قيمة الحقل المحدد في مستندات الجمع.

POST /schools/_search?size=0
{
   "aggs": {
      "total_fees": { "sum": { "field": "fees" } } }
   }
}

عند تشغيل الشيفرة المذكورة أعلاه، نحصل على النتيجة التالية-

{
   "took": 8,
   "timed_out": false,
   "_shards": {
      "total": 1,
      "successful" : 1,
      "skipped" : 0,
      "failed" : 0
   },
   "hits" : {
      "total" : {
         "value" : 2,
         "relation" : "eq"
      },
      "max_score" : null,
      "hits" : [ ]
   },
   "aggregations" : {
      "total_fees": {
         "value": 5700.0
      }
   }
}

في بعض الحالات، هناك مقياسات جمع إضافية مثل الجمع الجغرافي والجمع الجغرافي المركزي لتحقيق المواقع الجغرافية.

جمع الإحصاء

مقياس جمع متعدد القيم يمكن حساب معلومات الإحصاء بناءً على القيم المستخرجة من مستندات الجمع.

POST /schools/_search?size=0
{
   "aggs": {
      "grades_stats": { "stats": { "field": "fees" } } }
   }
}

عند تشغيل الشيفرة المذكورة أعلاه، نحصل على النتيجة التالية-

{
   "took": 2,
   "timed_out": false,
   "_shards": {
      "total": 1,
      "successful" : 1,
      "skipped" : 0,
      "failed" : 0
   },
   "hits" : {
      "total" : {
         "value" : 2,
         "relation" : "eq"
      },
      "max_score" : null,
      "hits" : [ ]
   },
   "aggregations" : {
      "grades_stats": {
         "count": 2,
         "min": 2200.0,
         "max": 3500.0,
         "avg": 2850.0,
         "sum": 5700.0
      }
   }
}

بيانات الجمع

يمكنك إضافة بعض البيانات المتعلقة بالجمع باستخدام علامة meta عند إرسال الطلب، ويمكنك الحصول عليها كرد فعل.

POST /schools/_search?size=0
{
   "aggs": {
      "min_fees": { "avg": { "field": "fees" } },
         "meta": {
            "dsc": "Lowest Fees This Year"
         }
      }
   }
}

عند تشغيل الشيفرة المذكورة أعلاه، نحصل على النتيجة التالية-

{
   "took": 0,
   "timed_out": false,
   "_shards": {
      "total": 1,
      "successful" : 1,
      "skipped" : 0,
      "failed" : 0
   },
   "hits" : {
      "total" : {
         "value" : 2,
         "relation" : "eq"
      },
      "max_score" : null,
      "hits" : [ ]
   },
   "aggregations" : {
      "min_fees" : {
         "meta" : {
            "dsc" : "أقل تكاليف هذا العام"
         },
         "value" : 2850.0
      }
   }
}