Elasticsearch Swift क्लाइंट (iOS/macOS)
Elasticsearch एक शक्तिशाली वितरित सर्च और एनालिटिक्स सिस्टम है, जो Apache Lucene पर आधारित है। Swift (iOS/macOS) में मोबाइल और डेस्कटॉप ऐप्स के लिए Elasticsearch Swift क्लाइंट उपलब्ध है। यह लाइब्रेरी Apple ऐप्स से सीधे सर्च क्वेरी, डेटा इंडेक्सिंग, एग्रीगेशन और क्लस्टर मैनेजमेंट के लिए आसान API प्रदान करती है।
लाइब्रेरी की मुख्य विशेषताएं
- फुल-टेक्स्ट सर्च — Elasticsearch के सभी क्वेरी प्रकारों का समर्थन (match, term, bool, fuzzy आदि)
- CRUD ऑपरेशन — इंडेक्स में डॉक्यूमेंट बनाना, पढ़ना, अपडेट करना और हटाना
- एग्रीगेशन — जटिल एनालिटिकल रिपोर्ट बनाना (terms, range, date_histogram आदि)
- बल्क प्रोसेसिंग — बड़े डेटा लोड के लिए bulk ऑपरेशन
- एसिंक्रोनस सपोर्ट — async/await और Combine के साथ काम करें
- SSL/TLS और ऑथेंटिकेशन — क्लस्टर से सुरक्षित कनेक्शन
इंस्टॉलेशन
Swift Package Manager के ज़रिए लाइब्रेरी जोड़ें। Xcode में File → Add Packages चुनें और रिपॉजिटरी URL डालें:
https://github.com/elastic/elasticsearch-swift.git
या Package.swift में डिपेंडेंसी जोड़ें:
dependencies: [
.package(url: "https://github.com/elastic/elasticsearch-swift.git", from: "1.0.0")
]
क्लाइंट इनिशियलाइज़ेशन
Elasticsearch होस्ट और पोर्ट के साथ ElasticsearchClient का इंस्टेंस बनाएं:
import Elasticsearch
let client = ElasticsearchClient(
host: "http://localhost:9200",
username: "elastic",
password: "changeme"
)
Elastic Cloud से कनेक्ट करने के लिए URL और API-की का उपयोग करें:
let client = ElasticsearchClient(
cloudID: "my-cluster:dXM...",
apiKey: "base64EncodedApiKey"
)
डॉक्यूमेंट इंडेक्सिंग
एक सरल User मॉडल बनाएं और इसे इंडेक्स करें:
struct User: Codable {
let name: String
let email: String
let age: Int
}
let user = User(name: "राहुल", email: "rahul@example.com", age: 30)
Task {
let response = try await client.index(
index: "users",
id: "1",
body: user
)
print("डॉक्यूमेंट बन गया: \(response.result)")
}
डॉक्यूमेंट सर्च
match क्वेरी से नाम के आधार पर यूज़र खोजें:
let searchQuery: [String: Any] = [
"query": [
"match": [
"name": "राहुल"
]
]
]
Task {
let response = try await client.search(
index: "users",
body: searchQuery
)
if let hits = response.hits?.hits {
for hit in hits {
if let source = hit.source as? [String: Any] {
print("मिला: \(source["name"] ?? "")")
}
}
}
}
एग्रीगेशन
यूज़र की उम्र के अनुसार हिस्टोग्राम बनाएं:
let aggregationQuery: [String: Any] = [
"size": 0,
"aggs": [
"age_ranges": [
"range": [
"field": "age",
"ranges": [
["to": 20],
["from": 20, "to": 40],
["from": 40]
]
]
]
]
]
Task {
let response = try await client.search(
index: "users",
body: aggregationQuery
)
if let buckets = response.aggregations?["age_ranges"] as? [String: Any] {
print("एग्रीगेशन परिणाम: \(buckets)")
}
}
अपडेट और डिलीट
यूज़र की उम्र अपडेट करें:
let updateBody: [String: Any] = [
"doc": [
"age": 31
]
]
Task {
let response = try