Cliente REST Elasticsearch para Kotlin: guia de uso

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 Kotlin: ferramenta poderosa para pesquisa e análise



Elasticsearch é um sistema de pesquisa e análise distribuído baseado no Apache Lucene, que permite realizar rapidamente pesquisa de texto completo, agregações e análise de grandes volumes de dados. Para trabalhar com Elasticsearch a partir de aplicações Kotlin, existem vários clientes, mas o mais moderno e recomendado é o Elasticsearch Java Client (a partir da versão 7.16) com suporte total para Kotlin. Neste artigo, abordaremos sua instalação, configuração e operações principais.



Instalação e conexão



Para começar, adicione a dependência ao seu build.gradle.kts:



dependencies {    implementation("co.elastic.clients:elasticsearch-java:8.15.0")    implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.17.0")    implementation("jakarta.json:jakarta.json-api:2.1.3")}


Para Maven (pom.xml):



<dependency>    <groupId>co.elastic.clients</groupId>    <artifactId>elasticsearch-java</artifactId>    <version>8.15.0</version></dependency><dependency>    <groupId>com.fasterxml.jackson.module</groupId>    <artifactId>jackson-module-kotlin</artifactId>    <version>2.17.0</version></dependency>


Criação do cliente



A biblioteca usa o padrão Builder para configuração. Abaixo está um exemplo de criação de cliente com conexão a uma instância local do Elasticsearch:



import co.elastic.clients.elasticsearch.ElasticsearchClientimport co.elastic.clients.json.jackson.JacksonJsonpMapperimport co.elastic.clients.transport.ElasticsearchTransportimport co.elastic.clients.transport.rest_client.RestClientTransportimport org.apache.http.HttpHostimport org.elasticsearch.client.RestClient

fun createElasticsearchClient(): ElasticsearchClient { // Cria o cliente HTTP (sem autenticação) val restClient = RestClient.builder( HttpHost("localhost", 9200, "http") ).build()

// Cria o transporte com o mapeador JSON Jackson val transport: ElasticsearchTransport = RestClientTransport( restClient, JacksonJsonpMapper() )

// E retorna o cliente pronto return ElasticsearchClient(transport)}


Para ambientes de produção, recomenda-se usar autenticação e HTTPS:



val credentialsProvider = BasicCredentialsProvider()credentialsProvider.setCredentials(    AuthScope.ANY,    UsernamePasswordCredentials("elastic", "your_password"))

val restClient = RestClient.builder( HttpHost("your-cluster.com", 9243, "https")).setHttpClientConfigCallback { httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider)}.build()


Trabalhando com índices



Antes de realizar operações com documentos, é necessário criar um índice (se ele não existir). Exemplo de criação de índice com mapeamento:



suspend fun createIndex(client: ElasticsearchClient, indexName: String) {    val response = client.indices().create { createBuilder ->        createBuilder            .index(indexName)            .mappings { mappings ->                mappings                    .properties("title") { prop -> prop.text { it } }                    .properties("content") { prop -> prop.text { it } }                    .properties("timestamp") { prop -> prop.date { it } }            }    }    println("Índice criado: ${response.acknowledged}")}


Operações CRUD com documentos



Criação/atualização de documento (Index API)



data class Article(    val title: String,    val content: String,    val timestamp: String = java.time.Instant.now().toString())

suspend fun indexDocument(client: E

Recommendations