عميل Elasticsearch للغة Go (Golang): أداة قوية للعمل مع البحث
\n\nElasticsearch هو نظام بحث وتحليل موزع يعتمد على 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\ngo get github.com/elastic/go-elasticsearch/v8\n\nبعد التثبيت، يمكنك إنشاء عميل بالإعدادات الأساسية:
\n\npackage 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\ncfg := elasticsearch.Config{\n Addresses: []string{"https://your-cluster-url:9200"},\n Username: "elastic",\n Password: "your_password",\n}\n\nالعمليات الأساسية مع البيانات
\n\nإنشاء فهرس
\n\nres, 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:
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:
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