Elasticsearch C++ क्लाइंट: उच्च-प्रदर्शन खोज के लिए शक्तिशाली उपकरण
Elasticsearch Apache Lucene पर आधारित एक वितरित खोज प्रणाली है, जिसका व्यापक रूप से पूर्ण-पाठ खोज, लॉग विश्लेषण और बड़े डेटा वॉल्यूम के प्रसंस्करण के लिए उपयोग किया जाता है। हालाँकि C++ के लिए कोई आधिकारिक क्लाइंट नहीं है, डेवलपर्स elasticlient लाइब्रेरी के माध्यम से REST API का उपयोग करके Elasticsearch के साथ प्रभावी ढंग से बातचीत कर सकते हैं - यह एक हल्का C++ क्लाइंट है जो विशेष रूप से Elasticsearch के साथ काम करने के लिए बनाया गया है।
elasticlient लाइब्रेरी सभी बुनियादी संचालन करने के लिए एक सुविधाजनक इंटरफ़ेस प्रदान करती है: दस्तावेज़ इंडेक्सिंग, खोज, अद्यतन, हटाना और क्लस्टर प्रबंधन। यह HTTP अनुरोधों के लिए libcurl लाइब्रेरी और JSON के साथ काम करने के लिए nlohmann/json के ऊपर बनाया गया है, जो उच्च प्रदर्शन और आधुनिक C++17/20 मानकों के साथ संगतता सुनिश्चित करता है।
elasticlient की मुख्य विशेषताएं
- Elasticsearch REST API (संस्करण 6.x, 7.x और 8.x) का पूर्ण समर्थन
- एसिंक्रोनस और सिंक्रोनस अनुरोध
- nlohmann/json के माध्यम से स्वचालित JSON सीरियलाइज़ेशन/डीसीरियलाइज़ेशन
- डेटा के बल्क लोडिंग के लिए बल्क-ऑपरेशन का समर्थन
- इंडेक्स प्रबंधन (निर्माण, हटाना, मैपिंग कॉन्फ़िगरेशन)
- खोज क्वेरी के साथ काम करना (match, term, range, bool और अन्य)
- त्रुटि प्रबंधन और कनेक्शन पुनः प्रयास
स्थापना और कॉन्फ़िगरेशन
elasticlient स्थापित करने के लिए CMake और vcpkg का उपयोग किया जा सकता है या मैन्युअल रूप से बनाया जा सकता है। vcpkg के माध्यम से अनुशंसित तरीका:
# vcpkg के माध्यम से स्थापनाvcpkg install elasticlient
# CMakeLists.txt में कनेक्शनfind_package(elasticlient REQUIRED)target_link_libraries(my_app PRIVATE elasticlient::elasticlient)इसके अलावा निर्भरताओं की आवश्यकता होगी:
- libcurl (HTTPS समर्थन के साथ)
- nlohmann/json (संस्करण 3.9+)
- C++17 समर्थन वाला C++ कंपाइलर (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" में ID "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