Rust के लिए Elasticsearch क्लाइंट: elasticsearch-rs
Elasticsearch एक शक्तिशाली वितरित सर्च और एनालिटिक्स सिस्टम है, जो Apache Lucene पर बना है। Rust एप्लिकेशन से इसके साथ इंटरैक्ट करने के लिए आधिकारिक क्लाइंट elasticsearch-rs उपलब्ध है। यह लाइब्रेरी Elasticsearch के REST API के साथ काम करने के लिए पूर्ण टूलसेट प्रदान करती है, जिसमें इंडेक्सिंग, सर्च, एग्रीगेशन और क्लस्टर मैनेजमेंट शामिल है। इस लेख में हम elasticsearch-rs की इंस्टॉलेशन, कॉन्फ़िगरेशन और मुख्य सुविधाओं को कोड उदाहरणों के साथ विस्तार से समझेंगे।
elasticsearch-rs क्या है?
elasticsearch-rs Elastic कंपनी द्वारा विकसित Rust भाषा के लिए आधिकारिक एसिंक्रोनस Elasticsearch क्लाइंट है। यह लोकप्रिय एसिंक्रोनस HTTP क्लाइंट लाइब्रेरी reqwest पर आधारित है और Elasticsearch के सभी एंडपॉइंट के लिए टाइप-सेफ API प्रदान करता है। मुख्य लाभ:
- Elasticsearch 7.x और 8.x का पूर्ण समर्थन — सभी मुख्य ऑपरेशन: CRUD, सर्च, एग्रीगेशन, इंडेक्स मैनेजमेंट।
- एसिंक्रोनस — async/await का उपयोग करता है, जिससे कई रिक्वेस्ट को कुशलतापूर्वक हैंडल किया जा सकता है।
- टाइप-सेफ्टी — रिक्वेस्ट और रिस्पॉन्स स्ट्रक्चर सख्ती से टाइप किए गए हैं, जिससे रनटाइम एरर कम होते हैं।
- ऑटोमैटिक सीरियलाइज़ेशन/डीसीरियलाइज़ेशन —
serdeऔरserde_jsonके माध्यम से। - प्रमाणीकरण समर्थन — Basic Auth, API कीज़, SSL/TLS।
इंस्टॉलेशन
Cargo.toml में डिपेंडेंसी जोड़ें:
[dependencies]
elasticsearch = "8.14.0"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
tokio = { version = "1", features = ["full"] }
बेसिक कनेक्शन
लोकल Elasticsearch इंस्टेंस से कनेक्ट करने के लिए क्लाइंट बनाएं:
use elasticsearch::Elasticsearch;
use elasticsearch::http::transport::Transport;
use serde_json::json;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let transport = Transport::single_node("http://localhost:9200")?;
let client = Elasticsearch::new(transport);
// कनेक्शन जांचें
let response = client.ping().send().await?;
println!("Elasticsearch उपलब्ध है: {}", response.status_code());
Ok(())
}
मुख्य ऑपरेशन: CRUD
1. डॉक्यूमेंट इंडेक्स करना
books इंडेक्स में एक किताब का डॉक्यूमेंट जोड़ें:
#[derive(Serialize, Deserialize, Debug)]
struct Book {
title: String,
author: String,
year: u16,
isbn: String,
}
let book = Book {
title: "Rust इन एक्शन".into(),
author: "टिम मैकनामारा".into(),
year: 2023,
isbn: "978-5-4461-2345-6".into(),
};
let response = client
.index(IndexParts::IndexId("books", "1"))
.body(json!(book))
.send()
.await?;
println!("डॉक्यूमेंट इंडेक्स हो गया: {:?}", response.body());
2. डॉक्यूमेंट प्राप्त करना
let response = client
.get(GetParts::IndexId("books", "1"))
.send()
.await?;
if response.status_code().is_success() {
let book: Book = response.json().await?;
println!("डॉक्यूमेंट मिला: {:?}", book);
}
3. डॉक्यूमेंट अपडेट करना
let response = client
.update(UpdateParts::IndexId("books", "1"))
.body(json!({
"doc": { "year": 2024 }
}))
.send()
.await?;
println!("अपडेट हो गया: {:?}", response.body());
4. डॉक्यूमेंट हटाना
let response = client
.delete(DeleteParts::IndexId("books", "1"))
.send()
.await?;
println!("हटा दिया गया: {:?}", response.body());
Query DSL के साथ सर्च
title फील्ड में फुल-टेक्स्ट सर्च करें:
use elasticsearch::SearchParts;
let response = client
.search(SearchParts::Index(&["books"]))
.body(json!({
"que पुस्तकालय में भी
Rust पर SMS भेजना: RustSMS — SMS गेटवे के लिए API लाइब्रेरी
कोटलिन में डेटाबेस माइग्रेशन: उपकरणों और दृष्टिकोणों का अवलोकन
iOS और macOS के लिए Swift में PDF रिपोर्ट जनरेशन - PDFKit और Core Graphics