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

API وثائق Elasticsearch

يقدم Elasticsearch واجهة API للوثيقة الواحدة وواجهة API للمستندات المتعددة، حيث يتم استدعاء API لكل مستند ومستندات متعددة.

API للترميز

عند طلب من مؤشر يحتوي على خريطة معينة، يساعد ذلك في إضافة أو تحديث مستند JSON في المؤشر. على سبيل المثال، الطلب التالي سيضيف جسم JSON إلى مجال "مدراس" تحت خريطة "مدراس" -

PUT schools/_doc/5
{
   name":"City 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"
}

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

{
   "_index": "schools",
   "_type": "_doc",
   "_id": "5",
   "_version": 1,
   "result": "created",
   "_shards": {
      "total": 2,
      "successful": 1,
      "failed": 0
   },
   "_seq_no" : 2,
   "_primary_term": 1
}

إنشاء مؤشر تلقائي

عندما يتم طلب إضافة جسم JSON إلى مجال معين، إذا لم يكن المجال موجودًا، فإن هذا API سيقوم بإنشاء المجال والخريطة الأساسية للجسم JSON التابع له تلقائيًا. يمكن تعطيل هذه الميزة عن طريق تعديل قيمة المعامل التالية في ملف elasticsearch.yml إلى false.

action.auto_create_index:false
index.mapper.dynamic:false

يمكنك أيضًا تقييد إنشاء المؤشرات التلقائية من خلال تغيير قيمة المعامل التالية، مما يسمح فقط باستخدام أسماء المؤشرات التي تحتوي على نمط معين -

action.auto_create_index:+acc*,-bank*

ملاحظة:: + يعني السماح، و - يعني عدم السماح.

تحكم بال نسخة

Elasticsearch يقدمُ أدواتًا للتحكم بال نسخة. نستطيع استخدام معامل البحث بال نسخة لتحديد نسخة معينة من الوثيقة.

PUT schools/_doc/5?version=7&version_type=external
{
   "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": "_doc",
   "_id": "5",
   "_version": 7,
   "result": "updated",
   "_shards": {
      "total": 2,
      "successful": 1,
      "failed": 0
   },
   "_seq_no": 3,
   "_primary_term": 1
}

تحكم الإصدار هو عملية حية وليس يتأثر عمليات البحث الحية.

هناك نوعان من أنواع التحكم في الإصدار الأكثر أهمية-

التحكم في الإصدار الداخلي

التحكم في الإصدار الداخلي هو الإصدار الافتراضي، يبدأ من 1 ويزداد مع كل تحديث (بما في ذلك الحذف).

التحكم في الإصدار الخارجي

عندما يتم تخزين التحكم في الإصدار للمستند في نظام خارجي (مثل نظام التحكم في الإصدار الثالثي) يتم استخدام هذه الميزة. لتمكين هذه الميزة، يجب ضبط type_version على external. هنا، سيقوم Elasticsearch بتخزين رقم الإصدار المحدد من النظام الخارجي ولن يتم تدرجه تلقائيًا.

نوع العملية

يستخدم نوع العملية لتنفيذ عملية إنشاء قسريًا، مما يساعد في تجنب تغطية المستندات الموجودة.

PUT chapter/_doc/1?op_type=create
{
   "Text": "هذا هو الفصل الأول"
}

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

{
   "_index": "chapter",
   "_type": "_doc",
   "_id": "1",
   "_version": 1,
   "result": "created",
   "_shards": {
      "total": 2,
      "successful": 1,
      "failed": 0
   },
   "_seq_no": 0,
   "_primary_term": 1
}

إنشاء ID تلقائي

إذا لم يتم تحديد ID في عملية إدراج الإدخال، فإن Elasticsearch سيقوم بإنشاء ID للمستند تلقائيًا.

POST chapter/_doc/
{
   "user": "tpoint",
   "post_date": "2018-12-25T14:12:12",
   "message": "دليل Elasticsearch"
}

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

{
   "_index": "chapter",
   "_type": "_doc",
   "_id": "PVghWGoB7LiDTeV6LSGu",
   "_version": 1,
   "result": "created",
   "_shards": {
      "total": 2,
      "successful": 1,
      "failed": 0
   },
   "_seq_no": 1,
   "_primary_term": 1
}

الحصول على API

يقدم API باستخدام طلب get لاستخراج نوع JSON للمستند المحدد.

pre class="prettyprint notranslate" > GET schools/_doc/5

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

{
   "_index": "schools",
   "_type": "_doc",
   "_id": "5",
   "_version": 7,
   "_seq_no": 3,
   "_primary_term": 1,
   "found": true,
   "_source": {
      "name": "مدرسة مركزية",
      "description": "تسمية CBSE",
      "street": "Nagan",
      "city": "paprola",
      "state": "HP",
      "zip": "176115",
      "location": [
         31.8955385,
         76.8380405
      ],
      "fees": 2200,
      "tags": [
         "ثانوية عامة"
         "campus_beautiful"
      ],
      "rating": "3.3"
   }
}
  • هذه العملية حية وليست معتمدة على معدل تحديث الإدخال.

  • يمكنك أيضًا تحديد الإصدار، وسيعتمد Elasticsearch على الحصول على إصدار المستند فقط.

  • يمكنك أيضًا تحديد _all في الطلب، بحيث يمكن لـ Elasticsearch البحث عن ID المستندات لكل نوع، وسيقوم بإرجاع المستند الذي يتطابق أولاً.

  • يمكنك أيضًا تحديد الحقول المطلوبة في نتائج المستندات المحددة.

GET schools/_doc/5?_source_includes=name,fees

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

{
   "_index": "schools",
   "_type": "_doc",
   "_id": "5",
   "_version": 7,
   "_seq_no": 3,
   "_primary_term": 1,
   "found": true,
   "_source": {
      "fees": 2200,
      "name": "مدرسة مركزية"
   }
}

يمكنك أيضًا الحصول على جزء المصدر في النتائج عن طريق إضافة جزء _source في طلب الحصول على البيانات.

GET schools/_doc/5?_source

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

{
   "_index": "schools",
   "_type": "_doc",
   "_id": "5",
   "_version": 7,
   "_seq_no": 3,
   "_primary_term": 1,
   "found": true,
   "_source": {
      "name": "مدرسة مركزية",
      "description": "تسمية CBSE",
      "street": "Nagan",
      "city": "paprola",
      "state": "HP",
      "zip": "176115",
      "location": [
         31.8955385,
         76.8380405
      ],
      "fees": 2200,
      "tags": [
         "ثانوية عامة"
         "campus_beautiful"
      ],
      "rating": "3.3"
   }
}

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

حذف API

يمكنك حذف مؤشر معين أو خريطة أو مستند باستخدام طلب HTTP DELETE إلى Elasticsearch.

DELETE schools/_doc/4

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

{
   "found":true, "_index":"schools", "_type":"school", "_id":"4", "_version":2,
   "_shards":{"total":2, "successful":1, "failed":0}
}

يمكنك تحديد إصدار المستند لاستئصال الإصدار المحدد. يمكنك تحديد معاملات المسار لإزالة المستند الخاص بالموظف المحدد، وإذا لم يكن المستند ينتمي إلى الموظف المحدد، فإن العملية ستفشل. في هذه العملية، يمكنك تحديد خيارات التحديث والتحقق الزمني مثل GET API.

تحديث API

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

POST schools/_update/4
{
   "script": {
      "source": "ctx._source.name = params.sname",
      "lang": "painless",
      "params": {
         "sname": "مدينة المدرسة الذكية"
      }
   }
 }

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

{
   "_index": "schools",
   "_type": "_doc",
   "_id": "4",
   "_version": 3,
   "result": "updated",
   "_shards": {
      "total": 2,
      "successful": 1,
      "failed": 0
   },
   "_seq_no": 4,
   "_primary_term": 2
}

يمكنك التحقق من التحديثات عن طريق إرسال طلب الحصول على الوثائق المعدة