عميل Elasticsearch بلغة C++: دليل شامل للعمل مع محرك البحث

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

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

ابدأ الدورة

عميل Elasticsearch بلغة C++: أداة قوية للبحث عالي الأداء



Elasticsearch هو نظام بحث موزع يعتمد على Apache Lucene، ويستخدم على نطاق واسع للبحث النصي الكامل، تحليل السجلات، ومعالجة كميات كبيرة من البيانات. على الرغم من عدم وجود عميل رسمي للغة C++، يمكن للمطورين التفاعل بكفاءة مع Elasticsearch عبر REST API باستخدام مكتبة elasticlient - وهي عميل C++ خفيف الوزن مصمم خصيصًا للعمل مع Elasticsearch.



توفر مكتبة elasticlient واجهة سهلة لتنفيذ جميع العمليات الأساسية: فهرسة المستندات، البحث، التحديث، الحذف، وإدارة الكتلة. تم بناؤها فوق مكتبة libcurl لطلبات HTTP و nlohmann/json للعمل مع JSON، مما يضمن أداءً عاليًا وتوافقًا مع معايير C++17/20 الحديثة.



الميزات الرئيسية لـ elasticlient

  • دعم كامل لـ REST API الخاص بـ Elasticsearch (الإصدارات 6.x و 7.x و 8.x)
  • طلبات غير متزامنة ومتزامنة
  • تسلسل/إلغاء تسلسل JSON تلقائي عبر nlohmann/json
  • دعم عمليات bulk للتحميل الجماعي للبيانات
  • إدارة الفهارس (إنشاء، حذف، إعداد mapping)
  • العمل مع استعلامات البحث (match، term، range، bool وغيرها)
  • معالجة الأخطاء وإعادة محاولات الاتصال


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

لتثبيت elasticlient، يمكن استخدام CMake و vcpkg أو التجميع يدويًا. الطريقة الموصى بها عبر vcpkg:

# التثبيت عبر vcpkgvcpkg install elasticlient

# الإضافة في CMakeLists.txtfind_package(elasticlient REQUIRED)target_link_libraries(my_app PRIVATE elasticlient::elasticlient)


ستحتاج أيضًا إلى التبعيات التالية:

  • libcurl (مع دعم HTTPS)
  • nlohmann/json (الإصدار 3.9+)
  • مترجم C++ يدعم C++17 (GCC 8+، Clang 7+، MSVC 2019+)


أمثلة أساسية للاستخدام



الاتصال بـ Elasticsearch

#include <elasticlient/client.h>

int main() { // إنشاء عميل متصل بنسخة محلية elasticlient::Client client("http://localhost:9200"); // التحقق من الاتصال auto status = client.get("/"); if (status.statusCode() == 200) { std::cout << "Connected to Elasticsearch!" << std::endl; } return 0;}


فهرسة مستند

#include <elasticlient/client.h>#include <nlohmann/json.hpp>

using json = nlohmann::json;

int main() { elasticlient::Client client("http://localhost:9200"); // إنشاء مستند json document = { {"title", "مقدمة في C++"}, {"author", "إيفان بيتروف"}, {"year", 2023}, {"tags", {"برمجة", "C++", "كتاب تعليمي"}} }; // الفهرسة في الفهرس "books" بالمعرف "1" auto response = client.index("books", "_doc", "1", document.dump()); if (response.statusCode() == 201) { std::cout << "Document indexed successfully!" << std::endl; } return 0;}


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

#include <elasticlient/client.h>#include <iostream>

int main() { elasticlient::Client client("http://localhost:9200"); // استعلام بحث json query = { {"query", { {"match", { {"title", "C++"} }} }} }; auto response = client.search("books", "_search", query.dump()); if (response.statusCode() == 200) { auto results = json::parse(response.body()); for (const auto& hit : results["hits"]["hits"]) { std::cout << "Found: " << hit["_source"]["title"] << std::endl; } } retu

توصيات