Experimenta con Elasticsearch: Sumérgete en nuestros cuadernos de muestra, inicia una prueba gratuita del cloud o prueba Elastic en tu máquina local ahora.
Esta es la segunda parte de nuestro serial Elasticsearch en JavaScript. En la primera parte, aprendimos a configurar correctamente nuestro entorno, configurar el cliente Node.js, indexar datos y buscar. En esta segunda parte, aprenderemos a implementar las mejores prácticas de producción y a ejecutar el cliente de Node.js Elasticsearch en entornos sin servidor.
Revisaremos:
Puedes consultar el código fuente con los ejemplos aquí.
Mejores prácticas de producción
Manejo de errores en Elasticsearch
Una característica útil del cliente Elasticsearch en Node.js es que expone objetos para los posibles errores en Elasticsearch, de modo que puedes validarlos y manejarlos de diferentes maneras.
Para verlos todos, pon esto:
Volvamos al ejemplo de búsqueda y tratemos algunos de los posibles errores:
ResponseError en individuo, ocurrirá cuando la respuesta sea 4xx o 5xx, lo que significa que la solicitud es incorrecta o el servidor no está disponible.
Podemos probar este tipo de error generando consultas erróneas, como intentar hacer una consulta de términos en un campo de tipo texto:
Error por defecto:
Error personalizado:
También podemos capturar y manejar cada tipo de error de una manera determinada. Por ejemplo, podemos agregar lógica de reintentos en un TimeoutError.
Pruebas
Las pruebas son clave para garantizar la estabilidad de la aplicación. Para probar el código de forma aislada de Elasticsearch, podemos usar la biblioteca elasticsearch-js-mock al crear nuestro clúster.
Esta biblioteca nos permite instanciar un cliente muy similar al real, pero que responderá a nuestra configuración reemplazando solo la capa HTTP del cliente por una mock, manteniendo el resto igual que el original.
Instalaremos la biblioteca de simulacros y AVA para los exámenes automatizados.
npm install @elastic/elasticsearch-mock
npm install --save-dev ava
Configuraremos el archivo package.json para ejecutar las pruebas. Cerciórate de que se vea así:
Ahora creemos un archivo test.js e instalemos nuestro cliente simulado:
Ahora, agrega un simulacro para la búsqueda semántica:
Ahora podemos crear una prueba para nuestro código, cerciorándonos de que la parte de Elasticsearch siempre devolverá los mismos resultados:
Hagamos las pruebas.
npm run test

¡Hecho! A partir de ahora, podemos probar nuestra app centrándonos al 100% en el código y no en factores externos.
Entornos sin servidor
Cómo ejecutar el cliente en Elastic Serverless
Cubrimos la ejecución de Elasticsearch en la nube o local; sin embargo, el cliente Node.js también soporta conexiones a Elastic Cloud Serverless.
Elastic Cloud Serverless te permite crear un proyecto donde no tienes que preocuparte por la infraestructura, ya que Elastic se encarga de eso internamente, y solo tienes que preocuparte por los datos que quieres indexar y cuánto tiempo quieres tener acceso a ellos.
Desde la perspectiva del uso, los servidores sin servidor desacoplan el cálculo del almacenamiento, proporcionando funciones de escalado automático tanto para búsqueda como para indexación. Esto te permite solo hacer crecer los recursos que realmente necesitas.
El cliente realiza las siguientes adaptaciones para conectarse a Serverless:
- Apaga el olfateo e ignora cualquier opción relacionada con el olfateo
- Ignora todos los nodos que pasan en la configuración excepto el primero, e ignora cualquier filtrado de nodos y seleccionando opciones
- Activa la compresión y el 'TLSv1_2_method' (igual que cuando se configura para Elastic Cloud)
- Agrega un encabezado HTTP 'elastic-api-version' a todas las solicitudes
- Emplea 'CloudConnectionPool' por defecto en lugar de 'WeightedConnectionPool'
- Desactiva los encabezados 'content-type' y 'accept' que venden en favor de los tipos MIME estándar
Para conectar tu proyecto serverless, necesitas usar el parámetro serverMode: serverless.
Cómo ejecutar el cliente en un entorno de función como servicio
En el ejemplo, usamos un servidor Node.js, pero también puedes conectarte usando un entorno de función como servicio con funciones como AWS Lambda, GCP Run, etc.
Otro ejemplo es conectarse a servicios como Vercel, que también es sin servidor. Puedes consultar este ejemplo completo de cómo hacerlo, pero la parte más relevante del endpoint de búsqueda es la siguiente:
Este endpoint reside en la carpeta /api y se ejecuta desde el lado del servidor, de modo que el cliente solo tiene control sobre el parámetro "texto" que corresponde al término de búsqueda.
La participación de usar función como servicio es que, a diferencia de un servidor que funciona 24/7, las funciones solo activan la máquina que ejecuta la función y, una vez terminada, la máquina entra en modo reposo para consumir menos recursos.
Esta configuración puede ser conveniente si la aplicación no recibe demasiadas solicitudes; De lo contrario, los costos pueden ser elevados. También tienes que considerar el ciclo de vida de las funciones y los tiempos de ejecución (que en algunos casos pueden ser solo segundos).
Conclusión
En este artículo, aprendimos a manejar errores, algo crucial en entornos de producción. También cubrimos pruebas de nuestra aplicación simulando el servicio Elasticsearch, que proporciona pruebas fiables independientemente del estado del clúster y nos permite centrarnos en nuestro código.
Finalmente, demostramos cómo crear una pila totalmente serverless aprovisionando tanto Elastic Cloud Serverless como una aplicación Vercel.




