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 También en la biblioteca
Tokens JWT en Go (Golang): creación y verificación con ejemplos
Configuración de aplicaciones PHP: bibliotecas y herramientas para gestionar ajustes
Internacionalización (i18n) en Go (Golang): Guía completa
Trabajo con fechas en C# (.NET): revisión de bibliotecas y herramientas integradas