عميل Elasticsearch لـ C# (.NET): NEST و Elastic.Clients.Elasticsearch

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

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

ابدأ الدورة

عميل Elasticsearch لـ C# (.NET): NEST و Elastic.Clients.Elasticsearch

\n\n

Elasticsearch هو نظام بحث وتحليل موزع قوي يُستخدم على نطاق واسع للبحث النصي الكامل، وتسجيل السجلات، والمراقبة، وتحليل البيانات. للعمل مع Elasticsearch من تطبيقات C# (.NET)، يوجد عميلان رسميان رئيسيان: NEST (عالي المستوى، مع واجهة fluent API) و Elastic.Clients.Elasticsearch (جديد، منخفض المستوى، ظهر مع الإصدار 8.x). في هذه المقالة، سنستعرض كلا النهجين بالتفصيل، بالإضافة إلى التثبيت، والعمليات الأساسية، وأمثلة الكود.

\n\n

1. ما هو عميل Elasticsearch لـ .NET؟

\n\n

يوفر Elasticsearch واجهة RESTful API، لكن العمل المباشر مع طلبات HTTP في C# غير مريح. يحل العملاء الرسميون هذه المشكلة:

\n
    \n
  • NEST — عميل قديم لكنه موثوق وعالي المستوى. يوفر استعلامات مقيدة بشدة، وربط فئات POCO، وواجهة fluent. يُوصى به للمشاريع على .NET Framework و .NET Core 3.1.
  • \n
  • Elastic.Clients.Elasticsearch — عميل جديد (بدءًا من Elasticsearch 8.x). خفيف الوزن، غير متزامن، ويدعم .NET 6+. يستخدم System.Text.Json ولا يتطلب تبعيات إضافية.
  • \n
\n\n

2. تثبيت المكتبات

\n\n

يتم التثبيت عبر NuGet. لـ NEST:

\n
dotnet add package NEST
\n

للعميل الجديد:

\n
dotnet add package Elastic.Clients.Elasticsearch
\n\n

3. الاتصال بـ Elasticsearch

\n\n

مثال على الاتصال باستخدام NEST:

\n
var settings = new ConnectionSettings(new Uri("http://localhost:9200"))\n    .DefaultIndex("my_index");\nvar client = new ElasticClient(settings);
\n\n

مثال على الاتصال باستخدام Elastic.Clients.Elasticsearch:

\n
var settings = new ElasticsearchClientSettings(new Uri("http://localhost:9200"));\nvar client = new ElasticsearchClient(settings);
\n\n

4. تعريف نموذج البيانات

\n\n

للعمل مع المستندات، سننشئ فئة POCO:

\n
public class Product\n{\n    public int Id { get; set; }\n    public string Name { get; set; }\n    public string Description { get; set; }\n    public decimal Price { get; set; }\n    public DateTime CreatedAt { get; set; }\n}
\n\n

5. عمليات CRUD (إنشاء، قراءة، تحديث، حذف)

\n\n

5.1. فهرسة المستند (إنشاء/تحديث)

\n

NEST:

\n
var product = new Product { Id = 1, Name = "لابتوب", Price = 75000 };\nvar response = await client.IndexAsync(product, idx => idx.Index("products"));
\n\n

Elastic.Clients.Elasticsearch:

\n
var product = new Product { Id = 1, Name = "لابتوب", Price = 75000 };\nvar response = await client.IndexAsync(product, "products", 1);
\n\n

5.2. الحصول على مستند بواسطة المعرف

\n

NEST:

\n
var response = await client.GetAsync<Product>(1, g => g.Index("products"));\nvar product = response.Source;
\n\n

Elastic.Clients.Elasticsearch:

\n
var response = await client.GetAsync<Product>("products", 1);\nvar product = response.Source;
\n\n

5.3. تحديث المستند

\n

NEST:

\n
var response = await client.UpdateAsync<Product>(1, u => u\n    .Index("products")\n    .Doc(new Product { Name = "لابتوب HP", Price = 80000 }));
\n\n

Elastic.Clients.Elasticsearch:

\n
var response = await client.UpdateAsync<Product>("products", 1, u => u\n    .Doc(new Product { Name = "لابتوب HP", Price = 80000 }));
\n\n

5.4. حذف المستند

\n

NEST:

\n
var response = await client.DeleteAsync<Product>(1, d => d.Index("products"));
\n\n

Elastic.Clients.Elasticsearch:

توصيات