Cliente Elasticsearch para Swift (iOS/macOS) — guia completo

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Cliente Elasticsearch para Swift (iOS/macOS)

\n\n

Elasticsearch é um poderoso sistema de busca e análise distribuído, construído sobre o Apache Lucene. Para integração com aplicativos móveis e desktop em Swift (iOS/macOS), existe um cliente especializado Elasticsearch Swift. Esta biblioteca fornece uma API conveniente para executar consultas de pesquisa, indexação de dados, agregações e gerenciamento de cluster diretamente de aplicativos Apple.

\n\n

Principais recursos da biblioteca

\n\n
    \n
  • Pesquisa de texto completo — suporte a todos os tipos de consultas do Elasticsearch (match, term, bool, fuzzy, etc.)
  • \n
  • Operações CRUD — criação, leitura, atualização e exclusão de documentos em índices
  • \n
  • Agregações — construção de relatórios analíticos complexos (terms, range, date_histogram, etc.)
  • \n
  • Processamento em lote — operações bulk para carregamento massivo de dados
  • \n
  • Suporte a assincronia — funcionamento com async/await e Combine
  • \n
  • SSL/TLS e autenticação — conexão segura ao cluster
  • \n
\n\n

Instalação

\n\n

Adicione a biblioteca via Swift Package Manager. No Xcode, selecione File → Add Packages e insira a URL do repositório:

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

Ou adicione a dependência no Package.swift:

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

Inicialização do cliente

\n\n

Crie uma instância de ElasticsearchClient especificando o host e a porta do Elasticsearch:

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

Para conectar ao Elastic Cloud, use o construtor com URL e chave de API:

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

Indexação de documentos

\n\n

Vamos criar um modelo simples de usuário e indexá-lo:

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

Pesquisa de documentos

\n\n

Pesquisar usuários pelo nome usando uma 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

Agregações

\n\n

Vamos construir um histograma por idade dos usuários:

\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 da agregação: \\(buckets)")\n    }\n}
\n\n

Atualização e exclusão

\n\n

Atualização da idade do

Recommendations