عميل Elasticsearch لـ TypeScript: @elastic/elasticsearch

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

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

ابدأ الدورة

عميل Elasticsearch لـ TypeScript: @elastic/elasticsearch



مكتبة @elastic/elasticsearch هي العميل الرسمي والأكثر شمولاً للتفاعل مع محرك البحث Elasticsearch من تطبيقات TypeScript و JavaScript. توفر واجهة برمجة تطبيقات ملائمة لتنفيذ جميع العمليات الأساسية: الفهرسة، البحث، التحديث، حذف البيانات، بالإضافة إلى إدارة المجموعة وتنفيذ التجميعات المعقدة. بفضل الدعم الكامل لـ TypeScript، يحصل المطورون على كتابة صارمة، وإكمال تلقائي في بيئة التطوير المتكاملة، وعدد أقل من الأخطاء في مرحلة التجميع.



التثبيت

لتثبيت العميل، قم بتنفيذ الأمر التالي في الطرفية:

npm install @elastic/elasticsearch

يوصى أيضًا بتثبيت أنواع Node.js إذا كنت تعمل في بيئة Node:

npm install -D @types/node


الإعداد الأساسي للاتصال

قم بإنشاء مثيل للعميل مع تحديد عنوان URL لخادم Elasticsearch الخاص بك. المنفذ الافتراضي هو 9200.

import { Client } from '@elastic/elasticsearch';

const client = new Client({ node: 'http://localhost:9200', // للمجموعات السحابية استخدم: cloud: { id: '...' } // auth: { apiKey: '...' } أو { username: '...', password: '...' }});


كتابة الاستجابات

إحدى المزايا الرئيسية لـ TypeScript هي إمكانية كتابة المستندات. يدعم العميل الأدوية (Generics)، مما يسمح بتحديد بنية البيانات بدقة:

interface Book {  title: string;  author: string;  year: number;  isbn: string;  rating?: number; // حقل اختياري}

// الآن جميع العمليات على الفهرس 'books' ستكون مكتوبةasync function addBook(book: Book) { const result = await client.index<Book>({ index: 'books', document: book, }); return result;}


عمليات CRUD

إنشاء/فهرسة مستند

const book: Book = {  title: 'الحرب والسلام',  author: 'ليو تولستوي',  year: 1869,  isbn: '978-5-17-123456-7',};

const response = await client.index({ index: 'books', id: '1', // اختياري، يمكن تركه لـ Elasticsearch لإنشاء ID document: book,});console.log('تم فهرسة المستند:', response._id);


الحصول على مستند بواسطة ID

const getResponse = await client.get({  index: 'books',  id: '1',});console.log('تم العثور على المستند:', getResponse._source); // مكتوب كـ Book


تحديث مستند

await client.update({  index: 'books',  id: '1',  doc: {    rating: 4.8, // تحديث جزئي  },});


حذف مستند

await client.delete({  index: 'books',  id: '1',});


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

الطريقة الرئيسية للبحث النصي الكامل هي search. تقبل Query DSL (لغة خاصة بالمجال) الخاصة بـ Elasticsearch.

interface SearchResult {  hits: {    total: { value: number };    hits: Array<{ _source: Book }>;  };}

async function searchBooks(query: string) { const result = await client.search<SearchResult>({ index: 'books', query: { multi_match: { query: query, fields: ['title', 'author'], // بحث عبر عدة حقول }, }, });

const books = result.hits.hits.map(hit => hit._source); return books;}

// الاستخدامconst books = await searchBooks('تولستوي');console.log(books); // مصفوفة من كائنات Book


التجميعات

تسمح التجميعات بالحصول على بيانات إحصائية عن الفهرس، على سبيل المثال، عدد الكتب حسب السنة.

async function getBooksByYear() {  const result = await client.search({    index: 'books',    size: 0, // لا نعيد المستندات نفسها، فقط التجميعات    aggs: {      books_per_year: {        terms: { field: 'year' },      },    },                    

توصيات