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

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

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

ابدأ الدورة

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



مكتبة @elastic/elasticsearch هي عميل HTTP رسمي عالي الأداء للتفاعل مع Elasticsearch من بيئة Node.js. توفر واجهة برمجة تطبيقات (API) مريحة لتنفيذ جميع العمليات: من فهرسة المستندات البسيطة إلى استعلامات البحث المعقدة والتجميعات. تدعم المكتبة بالكامل جميع إصدارات Elasticsearch 7.x و 8.x، بما في ذلك العمل مع المجموعات (clusters)، المصادقة، وضغط البيانات.



التثبيت

للتثبيت، استخدم npm أو yarn:

npm install @elastic/elasticsearch# أوyarn add @elastic/elasticsearch


الاتصال الأساسي

أنشئ مثيلاً للعميل مع تحديد عنوان خادم Elasticsearch. بالنسبة للإصدار 8.x، يلزم إعداد TLS ومفتاح API أو اسم مستخدم/كلمة مرور.

const { Client } = require('@elastic/elasticsearch');

// الاتصال بالخادم المحلي (Elasticsearch 7.x)const client = new Client({ node: 'http://localhost:9200' });

// الاتصال بخادم Elastic Cloud (8.x)const cloudClient = new Client({ cloud: { id: 'my-cloud-id' }, auth: { apiKey: 'base64EncodedApiKey' }});


العمليات الأساسية



1. فهرسة (إضافة) مستند

طريقة index تضيف أو تستبدل مستنداً في الفهرس المحدد.

async function indexDocument() {  const result = await client.index({    index: 'articles',    id: '1',    body: {      title: 'عميل Elasticsearch لـ Node.js',      content: 'وصف تفصيلي للمكتبة...',      tags: ['elasticsearch', 'node.js'],      published: true,      views: 150    }  });  console.log('تمت فهرسة المستند:', result.result);}indexDocument();


2. البحث عن المستندات

طريقة search تنفذ بحثاً نصياً كاملاً باستخدام Query DSL.

async function searchDocuments() {  const { body } = await client.search({    index: 'articles',    body: {      query: {        bool: {          must: [            { match: { title: 'Elasticsearch' } },            { term: { published: true } }          ],          filter: [            { range: { views: { gte: 100 } } }          ]        }      }    }  });

console.log('عدد المستندات التي تم العثور عليها:', body.hits.total.value); body.hits.hits.forEach(hit => { console.log(`- ${hit._source.title} (الصلة: ${hit._score})`); });}searchDocuments();


3. الحصول على مستند بواسطة المعرف (ID)

async function getDocument() {  try {    const { body } = await client.get({      index: 'articles',      id: '1'    });    console.log('المستند:', body._source);  } catch (error) {    if (error.meta.statusCode === 404) {      console.log('المستند غير موجود');    } else {      console.error('خطأ:', error);    }  }}getDocument();


4. تحديث مستند (جزئي)

async function updateDocument() {  const { body } = await client.update({    index: 'articles',    id: '1',    body: {      doc: {        views: 151,        updated_at: new Date().toISOString()      }    }  });  console.log('تم تحديث المستند، الإصدار:', body._version);}updateDocument();


5. حذف مستند

async function deleteDocument() {  const { body } = await client.delete({    index: 'articles',    id: '1'  });  console.log('نتيجة الحذف:', body.result);}deleteDocument();


العمل مع التجميعات (Aggregations)

تسمح التجميعات بالحصول على بيانات إحصائية بناءً على نتائج البحث.

async function aggregateByTags() {  const { body } = await client.search({    index: 'articles',    body: {      size: 0, // عدم إرجاع المستندات نفسها      aggs: {        popular_tags: {          terms: { field: 'tags.keywor                    

توصيات