Elasticsearch-Client für Swift (iOS/macOS) – vollständige Anleitung

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Elasticsearch-Client für Swift (iOS/macOS)

\n\n

Elasticsearch ist ein leistungsstarkes, verteiltes Such- und Analysesystem, das auf Apache Lucene basiert. Für die Integration mit mobilen und Desktop-Anwendungen in Swift (iOS/macOS) gibt es den spezialisierten Client Elasticsearch Swift. Diese Bibliothek bietet eine praktische API für Suchanfragen, Datenindizierung, Aggregationen und Cluster-Verwaltung direkt aus Apple-Anwendungen.

\n\n

Hauptfunktionen der Bibliothek

\n\n
    \n
  • Volltextsuche – Unterstützung aller Elasticsearch-Abfragetypen (match, term, bool, fuzzy usw.)
  • \n
  • CRUD-Operationen – Erstellen, Lesen, Aktualisieren und Löschen von Dokumenten in Indizes
  • \n
  • Aggregationen – Erstellung komplexer Analyseberichte (terms, range, date_histogram usw.)
  • \n
  • Stapelverarbeitung – Bulk-Operationen für die Massendatenverarbeitung
  • \n
  • Asynchrone Unterstützung – Arbeit mit async/await und Combine
  • \n
  • SSL/TLS und Authentifizierung – Sichere Verbindung zum Cluster
  • \n
\n\n

Installation

\n\n

Fügen Sie die Bibliothek über den Swift Package Manager hinzu. Wählen Sie in Xcode File → Add Packages und geben Sie die Repository-URL ein:

\n\n
https://github.com/elastic/elasticsearch-swift.git
\n\n

Oder fügen Sie die Abhängigkeit in Package.swift hinzu:

\n\n
dependencies: [\n    .package(url: "https://github.com/elastic/elasticsearch-swift.git", from: "1.0.0")\n]
\n\n

Client-Initialisierung

\n\n

Erstellen Sie eine Instanz von ElasticsearchClient mit Angabe des Elasticsearch-Hosts und -Ports:

\n\n
import Elasticsearch\n\nlet client = ElasticsearchClient(\n    host: "http://localhost:9200",\n    username: "elastic",\n    password: "changeme"\n)
\n\n

Für die Verbindung zur Elastic Cloud verwenden Sie den Konstruktor mit URL und API-Schlüssel:

\n\n
let client = ElasticsearchClient(\n    cloudID: "my-cluster:dXM...",\n    apiKey: "base64EncodedApiKey"\n)
\n\n

Dokumentenindizierung

\n\n

Erstellen wir ein einfaches Benutzermodell und indizieren es:

\n\n
struct User: Codable {\n    let name: String\n    let email: String\n    let age: Int\n}\n\nlet user = User(name: "Алексей", email: "alex@example.com", age: 30)\n\nTask {\n    let response = try await client.index(\n        index: "users",\n        id: "1",\n        body: user\n    )\n    print("Dokument erstellt: \\(response.result)")\n}
\n\n

Dokumentensuche

\n\n

Suche nach Benutzern anhand des Namens mit einer match-Abfrage:

\n\n
let searchQuery: [String: Any] = [\n    "query": [\n        "match": [\n            "name": "Алексей"\n        ]\n    ]\n]\n\nTask {\n    let response = try await client.search(\n        index: "users",\n        body: searchQuery\n    )\n    \n    if let hits = response.hits?.hits {\n        for hit in hits {\n            if let source = hit.source as? [String: Any] {\n                print("Gefunden: \\(source["name"] ?? "")")\n            }\n        }\n    }\n}
\n\n

Aggregationen

\n\n

Erstellen wir ein Histogramm nach Benutzeralter:

\n\n
let aggregationQuery: [String: Any] = [\n    "size": 0,\n    "aggs": [\n        "age_ranges": [\n            "range": [\n                "field": "age",\n                "ranges": [\n                    ["to": 20],\n                    ["from": 20, "to": 40],\n                    ["from": 40]\n                ]\n            ]\n        ]\n    ]\n]\n\nTask {\n    let response = try await client.search(\n        index: "users",\n        body: aggregationQuery\n    )\n    \n    if let buckets = response.aggregations?["age_ranges"] as? [String: Any] {\n        print("Aggregationsergebnisse: \\(buckets)")\n    }\n}
\n\n

Aktualisierung und Löschung

\n\n

Aktualisierung des Alters von

Empfehlungen