Cliente Elasticsearch para Java: guía completa
\n\nElasticsearch 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\nElasticsearch 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
Instalación y configuración
\n\nPara conectar el cliente a un proyecto Maven, agregue la siguiente dependencia en pom.xml:
<dependency>\n <groupId>co.elastic.clients</groupId>\n <artifactId>elasticsearch-java</artifactId>\n <version>8.15.0</version>\n</dependency>\n\nPara Gradle (build.gradle):
\n\nimplementation 'co.elastic.clients:elasticsearch-java:8.15.0'\n\nTambié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\nCreación del cliente y conexión
\n\nPara crear el cliente, es necesario especificar el host y el puerto de Elasticsearch. Ejemplo de configuración básica:
\n\nimport 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\nTrabajo con índices
\n\nAntes de comenzar, es necesario crear un índice. Veamos un ejemplo de creación de índice con mapeo:
\n\npublic 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 También en la biblioteca
ESLint + Plugins de TypeScript para TypeScript: guía completa con ejemplos
Event Bus y el patrón Observer en Kotlin: implementación y ejemplos
Envío de SMS en JavaScript (Node.js): API, bibliotecas y ejemplos de código
Trabajo con Excel en PHP: bibliotecas PhpSpreadsheet y OpenSpout
Bibliotecas WebSocket de Kotlin para crear tiempo real en aplicaciones web