عميل Elasticsearch لـ C# (.NET): NEST و Elastic.Clients.Elasticsearch
Elasticsearch هو نظام بحث وتحليلات موزع وقوي يعتمد على Apache Lucene. للعمل معه من تطبيقات C# (.NET)، توجد عدة عملاء رسميين وجانبين. في هذه المقالة، سنستعرض بالتفصيل المكتبتين الرئيسيتين: NEST (عميل عالي المستوى) و Elastic.Clients.Elasticsearch (العميل الرسمي الجديد من Elastic). ستتعلم كيفية تثبيتهما، تكوينهما، واستخدامهما للفهرسة، البحث، وإدارة البيانات.
1. NEST — عميل عالي المستوى (موصى به للمشاريع المعقدة)
NEST هو عميل قديم ولكنه موثوق، يوفر واجهة برمجة تطبيقات (API) مقيدة بشدة باستخدام فئات POCO. يقوم تلقائيًا بتسلسل/إلغاء تسلسل JSON إلى كائنات C# ويدعم بناء الجملة السلس (fluent-syntax) لبناء الاستعلامات.
التثبيت
dotnet add package NESTمثال على استخدام NEST
using Nest;using System;
// فئة POCO للمستندpublic class Article{ public int Id { get; set; } public string Title { get; set; } public string Content { get; set; } public DateTime PublishDate { get; set; }}
class Program{ static async Task Main(string[] args) { // إعداد الاتصال var settings = new ConnectionSettings(new Uri("http://localhost:9200")) .DefaultIndex("articles") .EnableDebugMode(); // تفعيل تسجيل الاستعلامات
var client = new ElasticClient(settings);
// 1. فهرسة مستند var article = new Article { Id = 1, Title = "Elasticsearch في C#", Content = "دليل مفصل للعمل مع Elasticsearch من .NET", PublishDate = DateTime.UtcNow };
var indexResponse = await client.IndexDocumentAsync(article); Console.WriteLine($"الفهرسة: {indexResponse.IsValid}");
// 2. البحث var searchResponse = await client.SearchAsync<Article>(s => s .Query(q => q .Match(m => m .Field(f => f.Title) .Query("Elasticsearch") ) ) );
foreach (var hit in searchResponse.Hits) { Console.WriteLine($"تم العثور على: {hit.Source.Title}"); } }}2. Elastic.Clients.Elasticsearch — العميل الرسمي الجديد
بدءًا من الإصدار 8.x، أصدرت Elastic عميلًا جديدًا Elastic.Clients.Elasticsearch (المعروف أيضًا باسم Elasticsearch.Net). إنه أخف وزنًا، غير متزامن، ويتوافق مع أحدث إصدارات Elasticsearch. على عكس NEST، لا يتطلب استخدامًا إلزاميًا لفئات POCO، على الرغم من أنه يدعمها.
التثبيت
dotnet add package Elastic.Clients.Elasticsearchمثال على استخدام العميل الجديد
using Elastic.Clients.Elasticsearch;using Elastic.Clients.Elasticsearch.QueryDsl;using System;
class Program{ static async Task Main(string[] args) { // إعداد الاتصال var settings = new ElasticsearchClientSettings(new Uri("http://localhost:9200")) .DefaultIndex("articles");
var client = new ElasticsearchClient(settings);
// 1. الفهرسة باستخدام POCO var article = new Article { Id = 2, Title = "عميل Elasticsearch الجديد", Content = "نظرة عامة على إمكانيات Elastic.Clients.Elasticsearch", PublishDate = DateTime.UtcNow };
var indexResponse = await client.IndexAsync(article, idx => idx.Index("articles")); Console.WriteLine($"الفهرسة: {indexResponse.IsValidResponse}");
// 2. البحث باستخدام بناء الجملة اللامدا (lambda-syntax) var se