Client Elasticsearch pour Swift (iOS/macOS) — guide complet

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)

\n\n

Elasticsearch est un puissant système de recherche et d'analyse distribué, construit sur Apache Lucene. Pour l'intégration avec les applications mobiles et de bureau en Swift (iOS/macOS), il existe un client spécialisé Elasticsearch Swift. Cette bibliothèque fournit une API pratique pour exécuter des requêtes de recherche, indexer des données, effectuer des agrégations et gérer le cluster directement depuis les applications Apple.

\n\n

Fonctionnalités principales de la bibliothèque

\n\n
    \n
  • Recherche en texte intégral — prise en charge de tous les types de requêtes Elasticsearch (match, term, bool, fuzzy, etc.)
  • \n
  • Opérations CRUD — création, lecture, mise à jour et suppression de documents dans les index
  • \n
  • Agrégations — construction de rapports analytiques complexes (terms, range, date_histogram, etc.)
  • \n
  • Traitement par lots — opérations bulk pour le chargement massif de données
  • \n
  • Prise en charge de l'asynchrone — fonctionnement via async/await et Combine
  • \n
  • SSL/TLS et authentification — connexion sécurisée au cluster
  • \n
\n\n

Installation

\n\n

Ajoutez la bibliothèque via Swift Package Manager. Dans Xcode, sélectionnez File → Add Packages et saisissez l'URL du dépôt :

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

Ou ajoutez la dépendance dans Package.swift :

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

Initialisation du client

\n\n

Créez une instance de ElasticsearchClient en spécifiant l'hôte et le port d'Elasticsearch :

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

Pour vous connecter à Elastic Cloud, utilisez le constructeur avec l'URL et la clé API :

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

Indexation de documents

\n\n

Créons un modèle utilisateur simple et indexons-le :

\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("Document créé : \\(response.result)")\n}
\n\n

Recherche de documents

\n\n

Recherche d'utilisateurs par nom à l'aide d'une requête match :

\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("Trouvé : \\(source["name"] ?? "")")\n            }\n        }\n    }\n}
\n\n

Agrégations

\n\n

Construisons un histogramme par âge des utilisateurs :

\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("Résultats de l'agrégation : \\(buckets)")\n    }\n}
\n\n

Mise à jour et suppression

\n\n

Mise à jour de l'âge de l'utilisateur

Recommendations