Configuration du client Elasticsearch Python

Dans cette section, vous allez installer la bibliothèque client Elasticsearch pour Python et l'utiliser pour vous connecter au service Elasticsearch.

Installation

La bibliothèque client Elasticsearch est un paquetage Python qui est installé avec pip. Assurez-vous que l'environnement virtuel que vous avez créé précédemment est activé, puis exécutez la commande suivante pour installer le client :

Pour éviter toute incompatibilité potentielle, assurez-vous que la version de la bibliothèque client Elasticsearch que vous installez correspond à la version de la pile Elasticsearch que vous utilisez.

Il est toujours recommandé de garder un fichier requirements.txt à jour avec toutes vos dépendances, c'est donc le bon moment pour mettre à jour ce fichier afin d'inclure le nouveau paquet installé. Exécutez la commande suivante à partir de votre terminal :

Se connecter à Elasticsearch

Pour créer une connexion à votre service Elasticsearch, un objet Elasticsearch doit être créé avec les options de connexion appropriées.

Créez un nouveau fichier search.py dans votre éditeur de code, situé dans le répertoire search-tutorial. Le fichier search.py est l'endroit où toutes les fonctions de recherche seront définies. L'idée d'avoir un fichier séparé pour la fonctionnalité de recherche est qu'il vous sera facile d'extraire ce fichier et de l'ajouter à vos propres projets par la suite.

Saisissez le code suivant dans search.py pour ajouter une classe Search:

Il y a beaucoup de choses à décortiquer ici. La fonction load_dotenv() qui est appelée juste après les importations provient du paquet python-dotenv. Ce paquet sait comment travailler avec .env qui sont utilisés pour stocker les variables de configuration telles que les mots de passe et les clés. La fonction load_dotenv() lit les variables stockées dans le fichier .env et les importe dans le processus Python en tant que variables d'environnement.

La classe Search possède un constructeur qui crée une instance de la classe client Elasticsearch. C'est là que se trouve toute la logique du client pour communiquer avec le service Elasticsearch. Notez que cette ligne est actuellement incomplète, car les options de connexion appropriées à votre service doivent être incluses. Vous apprendrez ci-dessous quelles sont les options applicables dans votre cas. Une fois créé, l'objet Elasticsearch est stocké dans une variable d'instance nommée self.es.

Pour s'assurer que l'objet client peut communiquer avec votre déploiement Elastic Cloud, la méthode info() est invoquée. Cette méthode appelle le service pour lui demander des informations de base. Si cet appel aboutit, vous pouvez supposer que vous avez une connexion valide avec le service.

La méthode imprime ensuite un message d'état indiquant que la connexion a été établie, puis utilise la fonction pprint de Python pour afficher les informations renvoyées par le service dans un format facile à lire.

NOTE : Vous avez peut-être remarqué que le paquetage json de la bibliothèque standard de Python est importé dans ce fichier, mais qu'il n'est pas utilisé. Ne supprimez pas cette importation, car ce paquet sera utilisé ultérieurement.

Pour compléter le constructeur de la classe Search, l'objet Elasticsearch doit recevoir les options de connexion appropriées. Les sous-sections suivantes vous indiquent les options dont vous avez besoin pour les méthodes d'installation Elastic Cloud et Docker.

Se connecter à un déploiement Elastic Cloud

Si vous avez suivi les instructions pour créer un déploiement Elastic Cloud, vous devez connaître l'ID Cloud du déploiement et votre clé API. Comme il s'agit de valeurs sensibles, il n'est pas judicieux de les inclure directement dans le code de l'application. Au lieu de cela, créez un fichier .env (prononcé dot-env) dans lequel ces secrets peuvent être stockés en toute sécurité.

Ouvrez votre éditeur de code préféré et créez un nouveau fichier dans le répertoire du projet search-tutorial avec le nom .env (n'oubliez pas le point initial). Introduisez le contenu suivant dans ce fichier :

REMARQUE: Si vous prévoyez d'intégrer ce projet dans un référentiel de contrôle des sources, vous devez vous assurer de ne pas inclure votre fichier .env afin d'éviter que les informations d'identification de votre compte Elastic ne soient compromises.

Si vous utilisez git, ajoutez la ligne suivante à la fin de votre fichier .gitignore (ou créer un nouveau fichier s'il n'existe pas encore) :

Après avoir saisi vos informations d'identification dans le fichier .env revenez au constructeur de la classe Search dans search.py et modifiez la première ligne comme suit :

Les valeurs des arguments cloud_id et api_key sont extraites de l'environnement, que Python conserve dans le dictionnaire os.environ. Ces variables sont lues à partir du fichier .env et stocké dans ce dictionnaire par la fonction load_dotenv().

Se connecter à un conteneur Docker Elasticsearch auto-hébergé

Si vous avez choisi d'exécuter un service Elasticsearch hébergé localement à l'aide de Docker, la seule option de connexion nécessaire est le point de terminaison de la connexion. Modifiez la première ligne du constructeur de la classe Search dans search.py comme suit :

Dans cette version du constructeur, l'objet Elasticsearch est instancié avec l'URL du point de terminaison de premier niveau du service Elasticsearch, qui est normalement http://localhost:9200. Rappelons que les instructions de Docker désactivent explicitement le chiffrement et l'authentification, il n'est donc pas nécessaire de fournir des informations d'identification.

Tester la connexion

À ce stade, vous êtes prêt à établir une connexion avec votre service Elasticsearch. Pour ce faire, assurez-vous que votre environnement virtuel Python est activé, puis tapez python pour démarrer une session interactive Python. Vous devriez voir apparaître l'invite familière >>>, dans laquelle vous pouvez saisir des instructions Python.

Importez la classe Search comme suit :

Ensuite, instanciez la nouvelle classe :

Vous devriez voir un message de connexion, suivi des informations renvoyées par la méthode info() du client. À l'exception des différences entre les identifiants et les numéros de version, le résultat devrait ressembler à ce qui suit :

Si vous recevez des erreurs, assurez-vous que vous avez saisi les informations d'identification correctes dans le fichier .env. si vous utilisez un déploiement Elastic Cloud, ou dans le cas d'un déploiement auto-hébergé, que vous exécutez le conteneur Docker Elasticsearch sur votre ordinateur comme indiqué.

Intégrer Elasticsearch à l'application Flask

La dernière étape de cette section consiste à intégrer le travail effectué jusqu'à présent dans la petite application Flask que vous avez installée précédemment. L'objectif est que l'application crée automatiquement une connexion à Elasticsearch lorsqu'elle démarre.

Pour ce faire, ouvrez app.py dans votre éditeur de code. Ajoutez une déclaration d'importation pour le module search.py en dessous des seules importations existantes :

Trouvez ensuite la ligne dans laquelle la variable app est créée et, juste après, créez l'instance de la nouvelle classe Search:

C'est tout ! L'application dispose désormais d'un objet es à utiliser en cas de besoin. Si vous exécutez toujours l'application Flask dans un terminal, vous devriez voir l'application se recharger dès que vous enregistrez le fichier. Suite au rechargement, les informations de connexion imprimées par le constructeur de la classe Search devraient apparaître et continueront d'apparaître à chaque redémarrage de l'application à partir de maintenant.

Si vous n'exécutez pas l'application Flask, il est temps de la démarrer. Accédez au répertoire du projet dans une fenêtre de terminal, activez l'environnement virtuel Python, puis démarrez l'application avec :

Pour vous aider à résoudre les problèmes si vous recevez des erreurs, voici une copie complète de app.py avec le client Elasticsearch intégré :

Prêt à créer des expériences de recherche d'exception ?

Une recherche suffisamment avancée ne se fait pas avec les efforts d'une seule personne. Elasticsearch est alimenté par des data scientists, des ML ops, des ingénieurs et bien d'autres qui sont tout aussi passionnés par la recherche que vous. Mettons-nous en relation et travaillons ensemble pour construire l'expérience de recherche magique qui vous permettra d'obtenir les résultats que vous souhaitez.

Jugez-en par vous-même