Client Elasticsearch pour Swift (iOS/macOS) : intégration et exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Client Elasticsearch pour Swift (iOS/macOS)

Elasticsearch est un puissant système de recherche distribué construit sur Apache Lucene. Pour les développeurs iOS et macOS, le client officiel elasticsearch-swift est disponible, offrant une interface pratique pour travailler avec Elasticsearch depuis des applications Swift. La bibliothèque prend entièrement en charge l'API REST d'Elasticsearch, y compris l'indexation, la recherche, les agrégations et la gestion du cluster.



Installation et configuration

Le client est distribué via Swift Package Manager (SPM). Pour l'ajouter à un projet :

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

Ou via Xcode : File → Add Packages → saisissez l'URL du dépôt. Après l'installation, importez la bibliothèque :

import Elasticsearch


Fonctionnalités principales

  • Indexation de documents — ajout, mise à jour et suppression d'enregistrements dans les index.
  • Recherche — plein texte, par champs, avec filtres et tri.
  • Agrégations — calculs statistiques, regroupements, histogrammes.
  • Gestion du cluster — création/suppression d'index, configuration des shards et des répliques.
  • Prise en charge d'async/await — requêtes asynchrones utilisant le modèle moderne Swift Concurrency.


Exemple d'utilisation : connexion et indexation

Créons un client et indexons quelques documents :

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("Indexed: \\(response.result)")}


Recherche avec Query DSL

Elasticsearch prend en charge un langage de requête puissant. Exemple de recherche plein texte :

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("Found: \\(book.title) by \\(book.author)") } }}


Agrégations pour l'analyse

Exemple de comptage du nombre de livres par année :

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) books") }}


Gestion des index

Création et suppression d'un index avec paramètres :

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

Recommendations