Cliente java REST de alto nivel de elasticsearch RestHighLevelClient

0
689

 

  1. Introducción
  2. Entorno
  3. Inicialización de elasticsearch
  4. Creación del cliente
  5. Creación de índices
  6. Inserción de datos
  7. Búsqueda de datos
  8. Conclusiones
  9. Bibliografía

Introducción

En la versión 6 de elasticsearch se puede leer en sus cambios «This Java High Level REST Client is designed to replace the TransportClient in a near future.» y en los cambios de la versión 7 se puede leer «the transport client will be removed in the future», por lo tanto, es importante empezar a migrar el cliente de transporte al nuevo cliente oficial de elasticsearch y no tener problemas cuando queramos subir la versión de nuestro cluster.

Hay que saber que con el nuevo cliente podemos hacer todas las peticiones disponibles en la API de elasticsearch y, por lo tanto, nos abstrae de todo el tedioso trabajo de hacer peticiones usando un cliente REST java hecho por nosotros.

Entorno

  • Hardware: Portátil MacBook Pro 15′ (2.5 GHz Intel Core i7, 16GB DDR3)
  • Sistema Operativo: MacOS Mojave 10.14.2
  • Docker Desktop 2.0.0.2 para generar un nodo de elasticsearch con la versión 6.5.4
  • Jdk 11.0.1

Inicialización de elasticsearch

Es necesario tener levantado un elasticsearch al que hacer peticiones para probar el cliente, en mi caso, lo levantaré con docker-compose, aunque podremos tenerlo instalado de cualquier otra manera.

Si queremos usar docker-compose, tendremos que tener instalado docker en nuestra máquina y ejecutar el comando:

Para que funcione este comando debemos tener un archivo con el nombre docker-compose.yml en el directorio que lo lancemos o usar la opción -f para especificar el nombre del fichero. La opción -p se usa para elegir el nombre del proyecto y así identificar fácilmente las redes, volumenes y contenedores que genera docker-compose.

Nuestro docker-compose.yml tendrá la siguiente forma:

Para comprobar que el cluster está levantado podemos lanzar una petición con cualquier navegador o postman para ver las estadísticas del cluster. Teniendo en cuenta que tenemos elasticsearch levantado el localhost exponiendo el puerto 9200.

La respuesta tendrá que ser del tipo:

Llegado a este punto, empezamos con el objetivo de este tutorial, ver cómo funciona el cliente de elasticsearch.

Creación del cliente

En primer lugar, necesitamos importar la dependencia de maven o gradle al proyecto.

Para maven, necesitamos importar la dependencia en el pom.xml

En caso de gradle, tendremos que añadir nuestra dependencia en el fichero build.gradle

Una vez importada la dependencia, ya podemos usar el cliente dentro de nuestro proyecto y podremos inicializarlo. Con el cluster que tengo inicializado en docker, podría crearlo con la siguiente línea:

De esta forma ya podemos empezar a hacer peticiones con este cliente. Siempre hay que tener en cuenta que el cliente de elasticsearch va a tener una respuesta diferente para cada petición y, por lo tanto, la petición como la respuesta, van a estar definidas por una clase java concreta.

Vamos con nuestro primer código java, consultar la información básica del cluster y obtener una respuesta del tipo «MainResponse».

si ejecutamos el código anterior y vemos el resultado por pantalla, obtendremos:

En esta sección hemos visto cómo crear el cliente de elasticsearch y una petición para consultar la información básica del cluster. A continuación, veremos una serie de ejemplos sencillos que nos puede ilustrar la facilidad de uso de este cliente.

Creación de índices

Para crear un índice, usaremos una petición «CreateIndexRequest» y obtendremos una respuesta del tipo «CreateIndexResponse», he elegido crear un índice con un «mapping» sencillo y sin «settings» para que quede un ejemplo más fácil y claro, pero se puede ver en la documentación de elasticsearch cómo añadir estas opciones a la petición.

Vamos a crear el índice «temas» con el tipo «tema». Este tipo tendrá un solo campo «message» de tipo texto.

Para este ejemplo usaremos el siguiente código:

Y veremos que por consola se imprime:

Es posible que en este punto veamos un WARNING del cliente, es algo normal, nos avisa de los futuros cambios en nuevas versiones. Una funcionalidad que puede ayudar a los programadores a anticiparse a futuros fallos cuando subamos de versión.

Pero una vez creado el índice, nos interesaría rellenarlo con una serie de datos, para ello usaremos la Bulk API de elasticsearch con la que podemos crear, editar o eliminar documentos de cualquier índice de forma masiva.

Inserción de datos

Aunque se pueden añadir documentos uno a uno a elasticsearch con peticiones PUT sobre un índice usando el cliente, para este ejemplo, usaremos la Bulk API. Usando la Bulk API con una sola petición http podemos añadir miles de documentos a un índice.

En el tutorial añadiremos 8 temas con diferentes mensajes.

Para atacar la Bulk API usaremos el siguiente código:

el resultado obtenido de esta parte es:

Vemos que el bulk no ha fallado y que todos los documentos deberían estar insertados en nuestro índice «temas». Hay que recordar que aunque la Bulk API de fallos, esto no significa que no se ha insertado ningún documento, con que solo un documento de fallo, la Bulk API contiene errores, pero el resto de documentos se insertarían. En el siguiente punto vamos a ver cómo comprobar esto.

Búsqueda de datos

Como ocurre en elasticsearch cada cosa la podemos hacer de varias maneras, en este tutorial, usaremos la Search API y haremos una query para encontrar todos los documentos del índice «temas», aunque, de forma parecida, usando QueryBuilders del cliente, se pueden realizar todo tipo de búsquedas.

ejecutando este código anterior veremos por pantalla:

Con esta llamada hemos podido comprobar que el código de la Bulk API funcionaba como esperábamos y además hemos aprendido una de las formas más sencillas de realizar una petición a elasticsearch.

En realidad, las líneas:

no son necesarias, ya que por defecto haremos una búsqueda que encuentre todos los documentos de un índice, pero con este pequeño ejemplo hemos visto la facilidad de añadir una query a la petición de búsqueda.

Conclusiones

En este tutorial hemos visto la facilidad de usar el cliente de elasticsearch. Con estos ejemplos también vemos que es muy fácil leer el código y entender lo que hace el cliente, pero esto no sucede al desarrollar.

Cuando estamos desarrollando deberíamos apoyarnos constantemente de la documentación oficial del cliente ya que tiene muchísimas clases y cada una sirve para hacer una petición concreta.

Además de esto, hay que estar atentos a los WARNING que saca el cliente de elasticsearch ya que puede hacer que nos anticipemos a los futuros problemas que puedan surgir cuando subamos la versión de elasticsearch. Puede darnos información sobre funcionalidad deprecada y cambios de configuración de futuras versiones.

Por último, hay que tener en cuenta que si estamos usando el cliente Java de Transporte hay que prever que debemos cambiarlo por el cliente REST de alto nivel porque éste lo sustituirá y en un futuro no podremos usar el cliente de Transporte para comunicarnos con futuras versiones de elasticsearch.

Bibliografía

Cliente Java High REST Client versión 6.5.4

Dejar respuesta

Please enter your comment!
Please enter your name here