عميل Elasticsearch لـ Node.js: @elastic/elasticsearch

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

عميل Elasticsearch لجافا سكريبت (Node.js) — @elastic/elasticsearch

\n\n

Elasticsearch هو نظام بحث وتحليل موزع وقوي، مبني على قاعدة Apache Lucene. يتيح إجراء البحث النصي الكامل، تجميع البيانات وتحليل السجلات في الوقت الفعلي. للتفاعل مع Elasticsearch من تطبيقات Node.js، يوجد عميل رسمي — @elastic/elasticsearch. يوفر واجهة برمجة تطبيقات (API) مريحة لجميع العمليات: من الاتصال بالمجموعة إلى استعلامات البحث المعقدة.

\n\n

المكتبة تدعم بشكل كامل جميع إصدارات Elasticsearch 7.x و 8.x، وتعمل بشكل غير متزامن باستخدام الـ Promises، وهي مثالية لبناء خدمات بحث وتحليل ومراقبة عالية التحميل. في هذه المقالة، سنستعرض التثبيت، الإعداد الأساسي، والعمليات الرئيسية على البيانات باستخدام Node.js.

\n\n

التثبيت والاتصال

\n\n

يتم تثبيت العميل عبر مدير الحزم npm:

\n\n
npm install @elastic/elasticsearch
\n\n

بعد التثبيت، يجب إنشاء نسخة من العميل مع تحديد عنوان خادم Elasticsearch، وإذا لزم الأمر، معلمات المصادقة:

\n\n
const { Client } = require('@elastic/elasticsearch');\n\nconst client = new Client({\n  node: 'http://localhost:9200',\n  auth: {\n    username: 'elastic',\n    password: 'changeme'\n  }\n});
\n\n

للعمل مع خدمة Elastic Cloud السحابية، يُستخدم المعامل cloud.id و auth.apiKey.

\n\n

العمل مع الفهارس

\n\n

الفهرس في Elasticsearch هو ما يعادل قاعدة البيانات في أنظمة إدارة قواعد البيانات العلائقية. دعنا نستعرض العمليات الأساسية.

\n\n

إنشاء فهرس

\n\n
async function createIndex() {\n  const response = await client.indices.create({\n    index: 'products',\n    body: {\n      settings: {\n        number_of_shards: 1,\n        number_of_replicas: 1\n      },\n      mappings: {\n        properties: {\n          title: { type: 'text' },\n          description: { type: 'text' },\n          price: { type: 'float' },\n          created_at: { type: 'date' }\n        }\n      }\n    }\n  });\n  console.log('تم إنشاء الفهرس:', response);\n}
\n\n

حذف فهرس

\n\n
async function deleteIndex() {\n  await client.indices.delete({ index: 'products' });\n  console.log('تم حذف الفهرس');\n}
\n\n

إضافة وتحديث المستندات

\n\n

المستند هو وحدة البيانات الأساسية في Elasticsearch. دعنا نضيف بعض السجلات إلى الفهرس products:

\n\n
async function addDocuments() {\n  const doc1 = {\n    title: 'لابتوب Apple MacBook Pro',\n    description: 'لابتوب قوي للمطورين والمصممين',\n    price: 2499.99,\n    created_at: new Date()\n  };\n\n  const doc2 = {\n    title: 'لوحة مفاتيح ميكانيكية Logitech',\n    description: 'لوحة مفاتيح لاسلكية مع إضاءة خلفية',\n    price: 149.99,\n    created_at: new Date()\n  };\n\n  // إضافة مع تحديد المعرف\n  await client.index({\n    index: 'products',\n    id: '1',\n    body: doc1\n  });\n\n  // إضافة بدون معرف (توليد تلقائي)\n  await client.index({\n    index: 'products',\n    body: doc2\n  });\n\n  // الكتابة الإجبارية على القرص\n  await client.indices.refresh({ index: 'products' });\n}
\n\n

للتحديث الجزئي، يُستخدم الأسلوب update:

\n\n
await client.update({\n  index: 'products',\n  id: '1',\n  body: {\n    doc: {\n      price: 2399.99\n    }\n  }\n});
\n\n

البحث عن البيانات

\n\n

يوفر Elasticsearch لغة DSL قوية لبناء الاستعلامات. دعنا نستعرض بعض الأمثلة.

\n\n

البحث النصي الكامل

\n\n
async function searchProducts(query) {\n  const response = await client.search({\n    index: 'products',\n    body: {\n      query: {\n        match: {\n          description: query\n        }\n      }\n    }\n  });\n\n  console.log('عدد المستندات التي تم العثور عليها:', response.hits.total.value);\n  response.hits.hits.forEach                    

توصيات