عميل Elasticsearch للغة Go (Golang): دليل شامل للعمل مع ES

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

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

ابدأ الدورة

عميل Elasticsearch للغة Go (Golang): أداة قوية للعمل مع البحث

\n\n

Elasticsearch هو نظام بحث وتحليل موزع يعتمد على Apache Lucene، يتيح إجراء البحث النصي الكامل، التجميعات والتحليلات في الوقت الفعلي. للتفاعل مع Elasticsearch من لغة Go (Golang)، يوجد عميل رسمي — go-elasticsearch. هذه مكتبة تم تطويرها ودعمها من قبل فريق Elastic، وتوفر مجموعة كاملة من الأدوات للعمل مع REST API الخاص بـ Elasticsearch.

\n\n

إمكانيات ومزايا go-elasticsearch

\n\n

تقدم مكتبة go-elasticsearch للمطورين بلغة Go الإمكانيات التالية:

\n\n
    \n
  • دعم كامل لـ Elasticsearch API — جميع إصدارات API، بما في ذلك الفهرسة، البحث، التجميعات، إدارة الكتلة والإعدادات.
  • \n
  • وظائف مساعدة بنمط محدد الأنواع — تبسط إنشاء الاستعلامات ومعالجة الردود.
  • \n
  • دعم عمليات bulk — الإدراج الجماعي، التحديث والحذف للمستندات.
  • \n
  • إدارة تلقائية للاتصالات — تجمع الاتصالات، إعادة المحاولة عند الأخطاء وموازنة التحميل.
  • \n
  • التوافق مع وحدات Go — تثبيت وتحديث سهل عبر go get.
  • \n
  • دعم السياقات (context) — إلغاء الاستعلامات وتعيين المهلات الزمنية.
  • \n
  • قابلية التوسع — إمكانية إنشاء وسائط نقل و middleware مخصصة.
  • \n
\n\n

التثبيت والإعداد

\n\n

لتثبيت المكتبة، نفذ الأمر التالي:

\n\n
go get github.com/elastic/go-elasticsearch/v8
\n\n

بعد التثبيت، يمكنك إنشاء عميل بالإعدادات الأساسية:

\n\n
package main\n\nimport (\n    "log"\n    "github.com/elastic/go-elasticsearch/v8"\n)\n\nfunc main() {\n    cfg := elasticsearch.Config{\n        Addresses: []string{\n            "http://localhost:9200",\n        },\n    }\n    es, err := elasticsearch.NewClient(cfg)\n    if err != nil {\n        log.Fatalf("خطأ في إنشاء العميل: %s", err)\n    }\n    log.Println("تم إنشاء عميل Elasticsearch بنجاح")\n}
\n\n

للاتصال بكتلة مع مصادقة، حدد اسم المستخدم وكلمة المرور:

\n\n
cfg := elasticsearch.Config{\n    Addresses: []string{"https://your-cluster-url:9200"},\n    Username:  "elastic",\n    Password:  "your_password",\n}
\n\n

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

\n\n

إنشاء فهرس

\n\n
res, err := es.Indices.Create("my_index")\nif err != nil {\n    log.Fatalf("خطأ في إنشاء الفهرس: %s", err)\n}\ndefer res.Body.Close()\nlog.Println(res.String())
\n\n

فهرسة مستند

\n\n

لإضافة مستند، استخدم طريقة Index:

\n\n
package main\n\nimport (\n    "bytes"\n    "encoding/json"\n    "log"\n    "github.com/elastic/go-elasticsearch/v8"\n)\n\ntype Book struct {\n    Title  string `json:"title"`\n    Author string `json:"author"`\n    Year   int    `json:"year"`\n}\n\nfunc main() {\n    es, _ := elasticsearch.NewClient(elasticsearch.Config{\n        Addresses: []string{"http://localhost:9200"},\n    })\n\n    book := Book{\n        Title:  "الحرب والسلام",\n        Author: "ليو تولستوي",\n        Year:   1869,\n    }\n\n    data, _ := json.Marshal(book)\n    res, err := es.Index("books", bytes.NewReader(data))\n    if err != nil {\n        log.Fatalf("خطأ في الفهرسة: %s", err)\n    }\n    defer res.Body.Close()\n    log.Println(res.String())\n}
\n\n

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

\n\n

يتم البحث عبر طريقة Search مع نص الاستعلام بصيغة JSON:

\n\n
query := `{\n    "query": {\n        "match": {\n            "author": "تولستوي"\n        }\n    }\n}`\n\nres, err := es.Search(\n    es.Search.WithIndex("books"),\n    es.Search.WithBody(bytes.NewReader([]byte(query))),\n    es.Search.WithPretty(),\n)\nif err                    

توصيات