Cliente Elasticsearch para Swift (iOS/macOS)
\n\nElasticsearch 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\nCaracterí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
Instalación
\n\nAgregue la biblioteca a través de Swift Package Manager. En Xcode seleccione File → Add Packages e ingrese la URL del repositorio:
https://github.com/elastic/elasticsearch-swift.git\n\nO agregue la dependencia en Package.swift:
dependencies: [\n .package(url: "https://github.com/elastic/elasticsearch-swift.git", from: "1.0.0")\n]\n\nInicialización del cliente
\n\nCree una instancia de ElasticsearchClient especificando el host y puerto de Elasticsearch:
import Elasticsearch\n\nlet client = ElasticsearchClient(\n host: "http://localhost:9200",\n username: "elastic",\n password: "changeme"\n)\n\nPara conectarse a Elastic Cloud use el constructor con URL y clave API:
\n\nlet client = ElasticsearchClient(\n cloudID: "my-cluster:dXM...",\n apiKey: "base64EncodedApiKey"\n)\n\nIndexación de documentos
\n\nCreemos un modelo simple de usuario e indexémoslo:
\n\nstruct 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\nBúsqueda de documentos
\n\nBúsqueda de usuarios por nombre usando una consulta match:
\n\nlet 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\nAgregaciones
\n\nConstruyamos un histograma por edad de los usuarios:
\n\nlet 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\nActualización y eliminación
\n\nActualización de la edad del usuario
También en la biblioteca
Envío de email en Kotlin: bibliotecas, ejemplos y configuración SMTP
Criptografía en Java: cifrado y hash – guía práctica
Trabajo con Kafka en Go (Golang): biblioteca segmentio/kafka-go