En esta sección instalarás la biblioteca cliente Elasticsearch para Python y la usarás para conectarte al servicio Elasticsearch.
Instalación
La biblioteca cliente Elasticsearch es un paquete en Python que se instala con pip. Cerciórate de que el entorno virtual que creaste antes esté activado y luego ejecuta el siguiente comando para instalar el cliente:
Para evitar posibles incompatibilidades, cerciórate de que la versión de la biblioteca cliente de Elasticsearch que instales coincida con la versión de la pila Elasticsearch que estás empleando.
Siempre se recomienda mantener un archivo requirements.txt actualizado con todas tus dependencias, así que este es un buen momento para actualizar este archivo e incluir el paquete recién instalado. Ejecuta el siguiente comando desde tu terminal:
Conecta a Elasticsearch
Para crear una conexión con tu servicio Elasticsearch, debe crear un objeto Elasticsearch con las opciones de conexión adecuadas.
Crea un nuevo archivo de search.py en tu editor de código, ubicado en el directorio search-tutorial . El archivo search.py será donde se definirán todas las funciones de búsqueda. La idea de tener un archivo separado para la funcionalidad de búsqueda es que así te será fácil extraer ese archivo y agregarlo a tus propios proyectos más adelante.
Introduce el siguiente código en search.py para agregar una clase Search :
Hay mucho que analizar aquí. La función load_dotenv() que se llama justo luego de las importaciones viene del paquete python-dotenv . Este paquete sabe cómo trabajar con .env que se emplean para almacenar variables de configuración como contraseñas y claves. La función load_dotenv() lee las variables que se almacenan en el archivo .env y los importa al proceso de Python como variables de entorno.
La clase Search tiene un constructor que crea una instancia de la clase cliente Elasticsearch . Aquí es donde reside toda la lógica del cliente para comunicar con el servicio Elasticsearch. Ten en cuenta que esta línea está actualmente incompleta, ya que deben incluir opciones de conexión adecuadas para tu servicio. A continuación descubrirás qué opciones se aplican en tu caso. Una vez creado, el objeto Elasticsearch se almacena en una variable de instancia llamada self.es.
Para cerciorar que el objeto cliente pueda comunicar con tu despliegue de Elastic Cloud, se invoca el método info() . Este método llama al servicio aplicar información básica. Si esta llamada tiene éxito, entonces puedes asumir que tienes una conexión válida con el servicio.
El método imprime entonces un mensaje de estado que indica que la conexión fue establecida, y emplea la función pprint de Python para mostrar la información que el servicio devolvió en un formato fácil de leer.
NOTA: Quizá notaste que el paquete json de la biblioteca estándar de Python se importa en este archivo, pero no se usa. No elimines esta importación, ya que este paquete se usará más adelante.
Para completar el constructor de la clase Search , el objeto Elasticsearch necesita disponer de opciones de conexión adecuadas. Las siguientes subsecciones te indicarán qué opciones necesitas para los métodos de instalación de Elastic Cloud y Docker.
Conectarse a un despliegue de Elastic Cloud
Si seguiste las instrucciones para crear un despliegue de Elastic Cloud, necesitarás conocer el ID de la nube del despliegue y tu clave de API. Dado que estos son valores sensibles, no es buena idea incluirlos directamente en el código de la aplicación. En su lugar, crea un .env (pronunciado dot-env) en el que estos secretos pueden almacenar de forma segura.
Abre tu editor de código favorito y crea un nuevo archivo en el directorio de proyecto search-tutorial con el nombre .env (no olvides el punto inicial). Introduce el siguiente contenido en este archivo:
NOTA: Si planeas comprometer este proyecto en un repositorio de control de versiones, debes cerciorarte de no incluir tu archivo .env para evitar que las credenciales de tu cuenta Elastic se vean comprometidas.
Si usas git, agrega la siguiente línea al final de tu .gitignore (o crear un archivo nuevo si aún no lo hay):
Luego de introducir tus credenciales en el archivo .env Archivo, vuelve al constructor de Search clase en search.py y edita la primera línea de la siguiente manera:
Los valores de los argumentos cloud_id y api_key se extraen del entorno, que Python mantiene en el diccionario os.environ . Estas variables se leen desde el archivo .env archivo y almacenado en este diccionario por la función load_dotenv() .
Conectarse a un contenedor Docker de Elasticsearch autoalojado
Si optas por ejecutar un servicio Elasticsearch alojado localmente usando Docker, entonces la única opción de conexión necesaria es el punto final de conexión. Edita la primera línea del constructor de clases Search en search.py de la siguiente manera:
En esta versión del constructor, el objeto Elasticsearch se instancia con la URL al extremo superior del servicio Elasticsearch, que normalmente se http://localhost:9200. Recuerda que las instrucciones de Docker desactivan explícitamente el cifrado y la autenticación, por lo que por eso no es necesario proporcionar ninguna credencial.
Prueba la conexión
En este punto estás listo para conectar con tu servicio Elasticsearch. Para ello, cerciórate de que tu entorno virtual en Python esté activado y luego escribe python para iniciar una sesión interactiva en Python. Deberías ver el típico prompt de >>> , en el que puedes introducir sentencias en Python.
Importa la clase Search de la siguiente manera:
A continuación, instaurar la nueva clase:
Deberías ver un mensaje conectado, seguido de la información que devuelve el método info() del cliente. Excepto por diferencias en identificadores y números de versión, la salida debería ser la siguiente:
Si recibes errores, cerciórate de introducir las credenciales correctas en el archivo .env si estás usando un despliegue de Elastic Cloud, o en el caso de un despliegue autoalojado, que estás ejecutando el contenedor Elasticsearch Docker en tu computadora según las instrucciones.
Integrar Elasticsearch con la aplicación Flask
El paso final de esta sección es integrar el trabajo realizado hasta ahora en la pequeña aplicación Flask que instalaste antes. El objetivo es que la aplicación cree automáticamente una conexión con Elasticsearch al iniciar.
Para lograrlo, abre app.py en tu editor de código. Agrega una declaración de importación para el módulo de search.py debajo de las únicas importaciones existentes:
Luego encuentra la línea en la que se crea la variable app y justo después crea la instancia de la nueva clase Search :
¡Eso es todo! Ahora la aplicación tiene un objeto es para usar cuando sea necesario. Si sigues ejecutando la aplicación Flask en un terminal, deberías ver cómo la aplicación se recarga en cuanto almacenes el archivo. Como resultado de la recarga, la información de conexión impresa por el constructor de clase Search debería aparecer, y seguirá apareciendo cada vez que la aplicación se resetear a partir de ahora.
Si no estabas usando la aplicación Flask, ahora es un buen momento para empezarla. Cambia al directorio del proyecto en una ventana de terminal, activa el entorno virtual de Python y luego inicia la aplicación con:
Para ayudarte a solucionar problemas en caso de que recibas errores, aquí tienes una copia completa de app.py con el cliente integrado de Elasticsearch:
Previamente
Búsquedas de textoPróximo
Crear un índice