Introduction
Les bases de données NoSQL sont de plus en plus populaires dans le domaine de la gestion de données. Elles offrent une alternative intéressante aux bases de données relationnelles traditionnelles. Dans cet article, nous allons nous concentrer sur Elasticsearch, qui est une base de données NoSQL orientée texte.
Comprendre Elasticsearch
Elasticsearch est un moteur de recherche puissant, capable de stocker et d’interroger une grande quantité de documents en temps réel. Il se base sur le langage de requête pour extraire des statistiques en temps réel. Elasticsearch est particulièrement adapté à l’indexation de documents orientés textes, tels que des descriptions de films.
Les documents dans Elasticsearch
Dans Elasticsearch, les documents sont généralement insérés au format JSON. Les documents peuvent contenir différentes clés, telles que le titre, les réalisateurs, les genres, le résumé, le classement, etc. Ces clés seront utilisées pour interroger les documents ultérieurement.
Voici un exemple de document illustrant notre besoin :
{
"title" : "Star Wars",
"directors" : ["George Lucas"],
"release_date" : "1977-05-25T00:00:00Z",
"rating" : 8.7,
"genres" : ["Action","Adventure","Fantasy","Sci-Fi"],
"plot" : "Luke Skywalker joins forces with a Jedi Knight, a cocky pilot, a wookiee and two droids to save the universe from the Empire's world-destroying battle-station, while also attempting to rescue Princess Leia from the evil Darth Vader.",
"image_url" : "http://ia.media-imdb.com/images/M/MV5BMTU4NTczODkwM15BMl5BanBnXkFtZTcwMzEyMTIyMw@@._V1_SX400_.jpg",
"rank" : 226,
"running_time_secs" : 7260,
"actors" : ["Mark Hamill","Harrison Ford","Carrie Fisher"],
"year" : 1977
}
Fonctionnement d’un moteur de recherche
Avant de comprendre le fonctionnement d’Elasticsearch, il est important de comprendre le fonctionnement d’un moteur de recherche en général. Les résultats retournés par une requête sont évalués en fonction de la pertinence des documents par rapport à cette requête. Chaque document obtient un score, qui dépend de sa similitude avec la requête. Plus le document ressemble à la requête, plus son score est élevé.
Le moteur de recherche Lucene
Les moteurs de recherche se basent sur le domaine de la “recherche d’information”, utilisé principalement dans les moteurs de recherche populaires tels que Google, Bing, Yahoo!, DuckDuckGo, Qwant, etc. Parmi ces moteurs de recherche, on peut trouver Lucene, un logiciel OpenSource Apache utilisé dans de nombreux sites web pour créer des moteurs de recherche dédiés.
Elasticsearch utilise Lucene pour ses requêtes. Cela permet de bénéficier de toutes les fonctionnalités puissantes de Lucene, mais également de les configurer en fonction de nos besoins spécifiques.
Le fonctionnement d’Elasticsearch
Elasticsearch est un moteur de recherche distribué. Il utilise Lucene pour extraire les mots de chaque document et préparer des colonnes de mots. La couche de distribution d’Elasticsearch permet de router les requêtes, paralléliser les traitements, répliquer les données en cas de panne et augmenter la capacité d’indexation de Lucene.
L’architecture d’Elasticsearch est composée de plusieurs serveurs, chaque serveur étant un Lucene en charge d’une partie des documents. Cela permet de créer une architecture distribuée et d’étendre la capacité de stockage de la base de données.
Installation d’un serveur Elasticsearch
Pour installer Elasticsearch, il suffit de télécharger les fichiers binaires correspondant à votre système d’exploitation. L’installation présentée ici est pour la version 6.3.0 d’Elasticsearch.
Une fois téléchargés, ouvrez l’archive et accédez au répertoire “bin/”. Ce répertoire contient les fichiers exécutables pour démarrer le serveur. Les commandes varient en fonction du système d’exploitation :
- Linux et Mac :
./bin/elasticsearch
- Windows :
./bin/elasticsearch.bat
Lorsque le serveur est démarré, vous verrez les informations de lancement dans la console, telles que les modules chargés, les ports d’écoute pour le sharding et l’interrogation, ainsi que la santé du serveur.
Maintenant que le serveur Elasticsearch est opérationnel, vous pouvez ouvrir une page Web à l’adresse http://localhost:9200 pour vérifier son bon fonctionnement. Cette page affiche un document JSON contenant les propriétés du cluster Elasticsearch.
Importation de données dans Elasticsearch
Maintenant que le serveur Elasticsearch est installé, nous pouvons commencer à importer des données. Pour ce faire, nous utiliserons des fichiers au format JSON. Avant de pouvoir importer les fichiers, nous devons d’abord créer un index, qui est l’équivalent d’une table dans une base de données relationnelle. Chaque index peut également avoir plusieurs types, qui correspondent à des sous-catégories.
L’importation des données nécessite également de respecter une structure spécifique. Chaque document JSON doit avoir une structure similaire, avec les mêmes clés et les mêmes types de données, dans le même ordre. De plus, chaque document doit être précédé par un document JSON contenant des informations sur l’index, le type et l’identifiant du document.
Une fois que vous avez préparé vos fichiers d’importation, vous pouvez les envoyer à l’API REST d’Elasticsearch en utilisant l’outil curl
, qui vous permet d’envoyer des requêtes HTTP. Les fichiers doivent être envoyés à l’adresse http://localhost:9200.
Une fois les données importées, vous pouvez vérifier leur contenu en utilisant l’URL http://localhost:9200/index/type/_search. L’URL est composée de l’index, du type et du service utilisé. Par exemple, pour vérifier le contenu de notre index “movies”, vous pouvez utiliser l’URL suivante : http://localhost:9200/movies/movie/_search.
Schéma et mapping dans Elasticsearch
Lors de l’importation des données, Elasticsearch génère automatiquement un mapping pour vos documents. Le mapping indique à Elasticsearch comment lire vos données. Par défaut, le texte est décomposé en mots-clés, tandis que les nombres et les dates sont conservés dans leur format d’origine.
Il est possible de spécifier le traitement des données pour des champs spécifiques. Par exemple, les noms et prénoms des réalisateurs et des acteurs peuvent être traités comme des données brutes plutôt que des mots-clés. Cela permet de combiner les noms et prénoms lors des recherches.
Si vous souhaitez modifier le mapping d’un index, vous devez soit supprimer l’index existant et en créer un nouveau avec le mapping souhaité, soit créer un nouvel index avec le mapping approprié et importer les données dans ce nouvel index.
Conclusion
Dans cet article, nous avons introduit les bases de données NoSQL, en mettant l’accent sur Elasticsearch. Nous avons expliqué comment insérer des documents dans Elasticsearch, le fonctionnement d’un moteur de recherche et la façon dont Elasticsearch utilise Lucene pour ses requêtes. Nous avons également abordé l’architecture distribuée d’Elasticsearch, ainsi que l’importation des données et le mapping des index.