Cliente Elasticsearch para Swift (iOS/macOS) — guía completa

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Cliente Elasticsearch para Swift (iOS/macOS)

\n\n

Elasticsearch es un potente sistema de búsqueda y análisis distribuido construido sobre Apache Lucene. Para la integración con aplicaciones móviles y de escritorio en Swift (iOS/macOS), existe un cliente especializado Elasticsearch Swift. Esta biblioteca proporciona una API conveniente para realizar consultas de búsqueda, indexación de datos, agregaciones y gestión del clúster directamente desde aplicaciones Apple.

\n\n

Características principales de la biblioteca

\n\n
    \n
  • Búsqueda de texto completo — soporte para todos los tipos de consultas de Elasticsearch (match, term, bool, fuzzy, etc.)
  • \n
  • Operaciones CRUD — creación, lectura, actualización y eliminación de documentos en índices
  • \n
  • Agregaciones — construcción de informes analíticos complejos (terms, range, date_histogram, etc.)
  • \n
  • Procesamiento por lotes — operaciones bulk para carga masiva de datos
  • \n
  • Soporte de asincronía — trabajo mediante async/await y Combine
  • \n
  • SSL/TLS y autenticación — conexión segura al clúster
  • \n
\n\n

Instalación

\n\n

Agregue la biblioteca a través de Swift Package Manager. En Xcode seleccione File → Add Packages e ingrese la URL del repositorio:

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

O agregue la dependencia en Package.swift:

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

Inicialización del cliente

\n\n

Cree una instancia de ElasticsearchClient especificando el host y puerto de Elasticsearch:

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

Para conectarse a Elastic Cloud use el constructor con URL y clave API:

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

Indexación de documentos

\n\n

Creemos un modelo simple de usuario e indexémoslo:

\n\n
struct User: Codable {\n    let name: String\n    let email: String\n    let age: Int\n}\n\nlet user = User(name: "Alexey", 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("Documento creado: \\(response.result)")\n}
\n\n

Búsqueda de documentos

\n\n

Búsqueda de usuarios por nombre usando una consulta match:

\n\n
let searchQuery: [String: Any] = [\n    "query": [\n        "match": [\n            "name": "Alexey"\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("Encontrado: \\(source["name"] ?? "")")\n            }\n        }\n    }\n}
\n\n

Agregaciones

\n\n

Construyamos un histograma por edad de los usuarios:

\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("Resultados de agregación: \\(buckets)")\n    }\n}
\n\n

Actualización y eliminación

\n\n

Actualización de la edad del usuario

Recommendations