Rust के लिए Elasticsearch क्लाइंट: आधिकारिक लाइब्रेरी elasticsearch-rs

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Rust के लिए Elasticsearch क्लाइंट: elasticsearch-rs



elasticsearch-rs Rust इकोसिस्टम से Elasticsearch के साथ इंटरैक्ट करने के लिए आधिकारिक एसिंक्रोनस क्लाइंट है। यह लाइब्रेरी सर्च इंजन के साथ काम करने के लिए टूल का एक पूरा सेट प्रदान करती है: सरल CRUD ऑपरेशन से लेकर जटिल एग्रीगेशन और bulk-रिक्वेस्ट तक। इसे Elastic टीम द्वारा विकसित और रखरखाव किया जाता है, जो API की अद्यतितता और Elasticsearch के नवीनतम संस्करणों के साथ अनुकूलता सुनिश्चित करता है।



मुख्य विशेषताएं



  • Elasticsearch API का पूर्ण समर्थन — इंडेक्सिंग, सर्च, एग्रीगेशन, इंडेक्स प्रबंधन, मैपिंग और क्लस्टर सेटिंग्स।
  • एसिंक्रोनस — tokio और reqwest पर आधारित, जो थ्रेड्स को ब्लॉक किए बिना हजारों रिक्वेस्ट को प्रोसेस करने की अनुमति देता है।
  • टाइप-सेफ्टी — सभी रिक्वेस्ट और रिस्पॉन्स सख्ती से टाइप किए गए हैं, वैलिडेशन त्रुटियां कंपाइलेशन चरण में पकड़ी जाती हैं।
  • bulk-ऑपरेशन का समर्थन — स्वचालित त्रुटि हैंडलिंग के साथ बल्क डॉक्यूमेंट लोडिंग और अपडेट।
  • SSL/TLS और प्रमाणीकरण — HTTPS, Basic Auth, API-कुंजी और टोकन के लिए अंतर्निहित समर्थन।
  • serde के माध्यम से सीरियलाइजेशन — डॉक्यूमेंट स्वचालित रूप से serde क्रेट का उपयोग करके JSON में/से रूपांतरित होते हैं।


इंस्टॉलेशन और कॉन्फ़िगरेशन



Cargo.toml में डिपेंडेंसी जोड़ें:



[dependencies]elasticsearch = "8.14.0"serde = { version = "1.0", features = ["derive"] }serde_json = "1.0"tokio = { version = "1.0", features = ["full"] }


लोकल Elasticsearch इंस्टेंस से बेसिक कनेक्शन:



use elasticsearch::{Elasticsearch, Error};use url::Url;

#[tokio::main]async fn main() -> Result<(), Error> { let client = Elasticsearch::new( elasticsearch::http::transport::Transport::single_node( Url::parse("http://localhost:9200")? )? ); // कनेक्शन जांच let response = client.ping().send().await?; println!("Elasticsearch उपलब्ध: {}", response.status_code()); Ok(())}


डॉक्यूमेंट के साथ काम करना



डॉक्यूमेंट इंडेक्सिंग



सीरियलाइजेशन के लिए स्ट्रक्चर परिभाषित करें:



use serde::{Serialize, Deserialize};

#[derive(Debug, Serialize, Deserialize)]struct Book { title: String, author: String, year: u16, isbn: String,}


नए डॉक्यूमेंट की इंडेक्सिंग:



use elasticsearch::{IndexParts, SearchParts};use serde_json::json;

async fn index_book(client: &Elasticsearch, book: &Book) -> Result<(), Error> { let response = client .index(IndexParts::IndexId("books", &book.isbn)) .body(book) .send() .await?; println!("डॉक्यूमेंट इंडेक्स किया गया: {:?}", response); Ok(())}


इंडेक्स में सर्च



फुल-टेक्स्ट सर्च का उदाहरण:



async fn search_books(client: &Elasticsearch, query: &str) -> Result, Error> {    let response = client        .search(SearchParts::Index(&["books"]))        .body(json!({            "query": {                "multi_match": {                    "query": query,                    "fields": ["title^2", "author"]                }            }        }))        .send()        .await?;        let response_body = response.json::().await?;    let hits = response_body["hits"]["hits"]        .as_array()        .unwrap_or(&vec![]);        let books: Vec = hits        .iter()        .filter_map(|hit| {            let source = hit["_source"].clone();            serde_json::from_value(source).ok()        })        .collect();        Ok(books)}


बल्क लोडिंग के लिए Bulk-ऑपरेशन



हजारों डॉक्यूमेंट की कुशल लोडिंग:



use elasticsear                    

अनुशंसाएँ