Elasticsearch-Client für Swift (iOS/macOS): Integration und Beispiele

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)

Elasticsearch ist ein leistungsstarkes, verteiltes Suchsystem, das auf Apache Lucene basiert. Für Entwickler unter iOS und macOS steht der offizielle Client elasticsearch-swift zur Verfügung, der eine benutzerfreundliche Schnittstelle für die Arbeit mit Elasticsearch aus Swift-Anwendungen bietet. Die Bibliothek unterstützt vollständig die REST API von Elasticsearch, einschließlich Indizierung, Suche, Aggregationen und Cluster-Verwaltung.



Installation und Konfiguration

Der Client wird über den Swift Package Manager (SPM) verteilt. So fügen Sie ihn zu Ihrem Projekt hinzu:

// In Package.swiftdependencies: [    .package(url: "https://github.com/elastic/elasticsearch-swift.git", from: "8.10.0")]

Oder über Xcode: File → Add Packages → geben Sie die Repository-URL ein. Nach der Installation importieren Sie die Bibliothek:

import Elasticsearch


Hauptfunktionen

  • Dokumentenindizierung — Hinzufügen, Aktualisieren und Löschen von Einträgen in Indizes.
  • Suche — Volltextsuche, feldspezifische Suche, mit Filtern und Sortierung.
  • Aggregationen — statistische Berechnungen, Gruppierungen, Histogramme.
  • Cluster-Verwaltung — Erstellen/Löschen von Indizes, Konfiguration von Shards und Replicas.
  • Unterstützung für async/await — asynchrone Anfragen mit dem modernen Swift Concurrency-Modell.


Anwendungsbeispiel: Verbindung und Indizierung

Wir erstellen einen Client und indizieren einige Dokumente:

import Elasticsearch

let client = ElasticsearchClient( host: "https://your-cluster-url:9200", apiKey: "your-api-key")

struct Book: Codable { let id: String let title: String let author: String let year: Int}

let books = [ Book(id: "1", title: "Swift Programming", author: "John Doe", year: 2023), Book(id: "2", title: "iOS Development", author: "Jane Smith", year: 2024)]

for book in books { let response = try await client.index( index: "books", id: book.id, body: book ) print("Indiziert: \\(response.result)")}


Suche mit Query DSL

Elasticsearch unterstützt eine leistungsstarke Abfragesprache. Beispiel einer Volltextsuche:

import Elasticsearch

let query: [String: Any] = [ "query": [ "bool": [ "must": [ ["match": ["title": "Swift"]] ], "filter": [ ["range": ["year": ["gte": 2023]]] ] ] ]]

let searchResponse = try await client.search( index: "books", body: query)

if let hits = searchResponse.hits?.hits { for hit in hits { if let source = hit.source { let book = try JSONDecoder().decode(Book.self, from: source) print("Gefunden: \\(book.title) von \\(book.author)") } }}


Aggregationen für Analysen

Beispiel zur Zählung der Bücher nach Jahren:

let aggregationQuery: [String: Any] = [    "size": 0,    "aggs": [        "by_year": [            "terms": ["field": "year", "size": 10]        ]    ]]

let aggResponse = try await client.search( index: "books", body: aggregationQuery)

if let buckets = aggResponse.aggregations?["by_year"] as? [String: Any], let bucketList = buckets["buckets"] as? [[String: Any]] { for bucket in bucketList { let year = bucket["key"] as? Int ?? 0 let count = bucket["doc_count"] as? Int ?? 0 print("\\(year): \\(count) Bücher") }}


Indexverwaltung

Erstellen und Löschen eines Index mit Einstellungen:

let settings: [String: Any] = [    "settings": [        "number_of_shards": 2,        "number_of_replicas": 1    ],    "mappings": [        "pro                    

Empfehlungen