Cliente Elasticsearch para Java: guía completa para trabajar con Java Client

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 Elasticsearch para Java: guía completa

\n\n

Elasticsearch es un potente sistema de búsqueda y análisis distribuido basado en Apache Lucene. Para integrarlo desde aplicaciones Java, la empresa Elastic proporciona el oficial Elasticsearch Java Client (anteriormente conocido como High-Level REST Client). En este artículo, analizaremos en detalle cómo usar este cliente para realizar operaciones básicas: conexión, indexación de documentos, operaciones CRUD y búsqueda de texto completo.

\n\n

¿Qué es Elasticsearch Java Client?

\n\n

Elasticsearch Java Client es una API moderna y tiposegura para interactuar con Elasticsearch desde Java. Está construido sobre un cliente HTTP asíncrono y admite todas las versiones de Elasticsearch desde la 7.x. Principales ventajas:

\n\n
    \n
  • Soporte completo de todas las API de Elasticsearch (indexación, búsqueda, agregaciones, gestión del clúster).
  • \n
  • Asincronía y reactividad — soporte integrado para CompletableFuture y flujos reactivos.
  • \n
  • Consultas DSL tiposeguras — minimización de errores en tiempo de compilación.
  • \n
  • Configuración sencilla — cantidad mínima de dependencias.
  • \n
\n\n

Instalación y configuración

\n\n

Para conectar el cliente a un proyecto Maven, agregue la siguiente dependencia en pom.xml:

\n\n
<dependency>\n    <groupId>co.elastic.clients</groupId>\n    <artifactId>elasticsearch-java</artifactId>\n    <version>8.15.0</version>\n</dependency>
\n\n

Para Gradle (build.gradle):

\n\n
implementation 'co.elastic.clients:elasticsearch-java:8.15.0'
\n\n

También se requiere Jackson para la serialización/deserialización JSON:

\n\n
<dependency>\n    <groupId>com.fasterxml.jackson.core</groupId>\n    <artifactId>jackson-databind</artifactId>\n    <version>2.17.0</version>\n</dependency>
\n\n

Creación del cliente y conexión

\n\n

Para crear el cliente, es necesario especificar el host y el puerto de Elasticsearch. Ejemplo de configuración básica:

\n\n
import co.elastic.clients.elasticsearch.ElasticsearchClient;\nimport co.elastic.clients.json.jackson.JacksonJsonpMapper;\nimport co.elastic.clients.transport.rest_client.RestClientTransport;\nimport org.apache.http.Header;\nimport org.apache.http.message.BasicHeader;\nimport org.elasticsearch.client.RestClient;\n\npublic class ElasticsearchExample {\n\n    public static ElasticsearchClient createClient() {\n        // Creamos el cliente REST de bajo nivel\n        RestClient restClient = RestClient.builder(\n                new HttpHost("localhost", 9200, "http")\n        ).setDefaultHeaders(new Header[]{\n                new BasicHeader("Content-Type", "application/json")\n        }).build();\n\n        // Transporte con mapeador Jackson\n        RestClientTransport transport = new RestClientTransport(restClient, new JacksonJsonpMapper());\n\n        // Cliente de alto nivel\n        return new ElasticsearchClient(transport);\n    }\n\n    public static void main(String[] args) throws IOException {\n        ElasticsearchClient client = createClient();\n        System.out.println("¡Cliente creado exitosamente!");\n        client.close();\n    }\n}
\n\n

Trabajo con índices

\n\n

Antes de comenzar, es necesario crear un índice. Veamos un ejemplo de creación de índice con mapeo:

\n\n
public static void createIndex(ElasticsearchClient client, String indexName) throws IOException {\n    client.indices().create(c -> c\n            .index(indexName)\n            .mappings(m -> m\n                    .properties("title", p -> p.text(t -> t))\n                    .properties("content", p -> p.text(t -> t))\n                    .properties("price", p -> p.double_(d -> d))\n                    .properties("createdAt", p -> p.date(d -> d))\n                    

Recommendations