Parlons des documents et index sur Elasticsearch
Abdelhk
Posted on January 27, 2023
Dans cet article, nous allons explorer les premières étapes pour utiliser Elasticsearch en utilisant les documents et les index. Nous avons déjà vu comment installer Elasticsearch et Kibana sur un ordinateur local ou en utilisant des conteneurs Docker. Aujourd'hui, nous allons utiliser l'interface Dev Tools pour envoyer des requêtes à Elasticsearch. Il est recommandé de suivre les instructions de l'article tout en exécutant les requêtes pour se familiariser avec Elasticsearch.
Les documents sont utilisés pour stocker les données dans Elasticsearch. Un document est un objet JSON avec une clé et une valeur, par exemple: { "name": "Jane Doe", "gender": "femme" }
. Pour envoyer un document à Elasticsearch, nous pouvons utiliser les API REST. Pour enregistrer un document, nous utilisons la méthode PUT, spécifions l'index où les données seront stockées, et donnons un id au document. Par exemple, pour ajouter un document à l'index "voitures" avec l'id "1", la requête serait: PUT voitures/_doc/1 { "marque": "Toyota", "propriétaire": "Gavi", "couleur": "grise" }
.
Elasticsearch nous indique que le document a été ajouté à l'index spécifié avec une version 1. Si nous relançons la même requête en modifiant la marque de la voiture, Elasticsearch nous indique que l'opération était une mise à jour et la version est passée à 2. Pour récupérer un document, nous utilisons la méthode GET, spécifions l'index, _doc pour indiquer qu'il s'agit d'un document, et enfin l'id du document. Par exemple, pour récupérer le document avec l'id "1" de l'index "voitures", la requête serait: GET voitures/_doc/1
.
Avant de vous montrer comment utiliser Elasticsearch, voyons à quoi ressemblent les données. Les documents sont utilisés pour stocker des données. Un document est un objet JSON avec une clé et une valeur. Par exemple:
{ "name": "Jane Doe", "gender": "femme" }
Pour l'envoyer, nous pouvons utiliser les API REST fournies par Elasticsearch. Ici, nous voulons enregistrer le document, nous utilisons donc PUT, puis nous spécifions le point de terminaison. Le point de terminaison est le nom de l'index où les données seront stockées. Par exemple ici, nous choisissons 'voitures' comme index. Il faudra aussi préciser qu'il s'agit d'un document et lui donner un id. Une fois envoyée, la requête ci-dessous demandera l'ajout du document nouvellement créé à Elasticsearch avec l'id '1' dans l'index des voitures.
PUT voitures/_doc/1 { "marque": "Lamborghini", "propriétaire": "Pedri", "couleur": "rose" }
En réponse, Elasticsearch nous signale que le document a été ajouté dans l'index spécifié avec la version 1 car nous venons de créer le document et le champ résultat qui va nous renseigner sur l'opération qui vient d'être effectuée, ici la création.
{ "_index": "voitures", "_id": "1", "_version": 1, "result": "créé", "_shards": { "total": 2, "réussi": 1, "échec " : 0 }, "_seq_no": 0, "_primary_term": 1 }
Si, par exemple, on relance la même requête en changeant juste la marque de la voiture, on obtient comme réponse :
{ "_index": "voitures", "_id": "1", "_version": 2, "result": "mis à jour", "_shards": { "total": 2, "réussi": 1, "échec " : 0 }, "_seq_no": 1, "_primary_term": 1 }
Pour vérifier que la propriété propriétaire a été mise à jour et que les autres propriétés sont inchangées, vous pouvez effectuer une requête GET sur le document.
Passons maintenant aux concepts d'index dans Elasticsearch. Il y a deux aspects importants à considérer : la répartition des données et la gestion du schéma de données.
- Gestion du schéma de données: Il est courant de penser qu'Elasticsearch ne nécessite pas de schéma, car aucun n'est spécifié lors de la création de l'index. Cependant, un schéma est automatiquement généré à chaque indexation de document, et peut être obtenu en utilisant l'endpoint_** mapping**. Par exemple, pour notre index de voitures, la requête suivante permet d'obtenir le schéma :
GET voitures/_mapping
- Répartition des données : Pour vérifier le nombre de nœuds Elasticsearch dans notre cluster, nous pouvons utiliser la commande suivante :
GET _cat/nœuds
Actuellement, il n'y a qu'une seule machine exécutant Elasticsearch. Lors de la création de l'index, Elasticsearch génère des "shards" pour répartir les données. Par défaut, un seul shard est créé par nœud, mais ce paramètre peut être modifié. Il est possible de créer des copies de ces shards appelées replicas pour assurer la disponibilité des données en cas de panne d'un nœud. Pour obtenir les paramètres de notre index, nous pouvons utiliser la commande suivante :
GET voitures/_settings
Nous pouvons voir qu'il y a un shard et un replica pour notre index. Pour supprimer l'index, nous pouvons utiliser la commande suivante :
DELETE voitures
et recréez-en un nouveau en spécifiant par exemple des paramètres tels que le nombre de shards et le nombre de répliques ainsi que le mapping :
PUT cars
{
"settings": {
"number_of_shards": 2,
"number_of_replicas": 1
},
"mappings": {
"properties": {
"brand": {
"type": "text"
},
"owner": {
"type": "texte"
},
"couleur": {
"type": "texte"
}
}
}
}
Il est possible de vérifier si les paramètres que vous avez définis ont bien été pris en compte en examinant le mappage et les réglages. N'oubliez pas de consulter la documentation officielle pour plus d'informations.
J'espère que cet article vous a été utile. Si vous avez des questions ou des commentaires, n'hésitez pas à les partager dans les commentaires ci-dessous.
A très bientôt, Abdoul-Bagui M.
Posted on January 27, 2023
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
November 30, 2024