Cliente REST de Elasticsearch para Kotlin: guía de uso

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 de Elasticsearch para Kotlin: potente herramienta para búsqueda y análisis



Elasticsearch es un sistema de búsqueda y análisis distribuido basado en Apache Lucene, que permite realizar búsquedas de texto completo, agregaciones y análisis de grandes volúmenes de datos de forma rápida. Para trabajar con Elasticsearch desde aplicaciones Kotlin, existen varios clientes, pero el más moderno y recomendado es el Cliente Java de Elasticsearch (a partir de la versión 7.16) con soporte completo para Kotlin. En este artículo, veremos su instalación, configuración y operaciones principales.



Instalación y configuración



Para comenzar, agregue la dependencia en su 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>


Creación del cliente



La biblioteca utiliza el patrón Builder para la configuración. A continuación, se muestra un ejemplo de creación de un cliente con conexión a una instancia local de 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 { // Creamos el cliente HTTP (sin autenticación) val restClient = RestClient.builder( HttpHost("localhost", 9200, "http") ).build()

// Creamos el transporte con el mapeador JSON Jackson val transport: ElasticsearchTransport = RestClientTransport( restClient, JacksonJsonpMapper() )

// Y devolvemos el cliente listo return ElasticsearchClient(transport)}


Para entornos de producción, se recomienda usar autenticación y 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()


Trabajo con índices



Antes de realizar operaciones con documentos, es necesario crear un índice (si no existe). Ejemplo de creación de un índice con mapeo:



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 creado: ${response.acknowledged}")}


Operaciones CRUD con documentos



Creación/actualización de documento (API Index)



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

suspend fun indexDocument(client: E

Recommendations