عميل 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' }, }, },