Elasticsearch est une technologie populaire pour le stockage et la récupération de données efficaces et évolutives. Cependant, le maintien de ses performances et de l’intégrité de ses données nécessite une pratique cruciale appelée réindexation. L'indexation est le processus initial d'ajout de données à Elasticsearch, tandis que la réindexation est essentielle pour maintenir l'exactitude des données et optimiser les performances de recherche.
Que vous soyez un utilisateur chevronné d'Elasticsearch ou que vous débutiez tout juste votre parcours, il est important de comprendre la réindexation pour maintenir un cluster Elasticsearch efficace. Dans cet article, nous aborderons les éléments essentiels de la réindexation Elasticsearch, en expliquant quand cela est nécessaire, comment la déclencher et les meilleures pratiques pour tirer le meilleur parti de votre cluster Elasticsearch.
Dans Elasticsearch, la réindexation permet de maintenir l'intégrité des données et d'augmenter les performances. En termes simples, il s'agit du processus de copie de données d'un index à un autre. Bien que cela puisse paraître simple, si cela n'est pas fait correctement, cela peut entraîner des problèmes tels qu'une récupération lente des données ou même des résultats incorrects.
Imaginez vos index Elasticsearch comme des bibliothèques bien organisées. Au fil du temps, les livres devront peut-être être mis à jour, réorganisés ou même remplacés. La réindexation revient à réorganiser les étagères de la bibliothèque ou à mettre à jour les livres pour que tout reste en ordre. Sans cela, votre bibliothèque peut devenir désorganisée, entraînant des recherches plus lentes et des inexactitudes potentielles dans vos données.
Cette analogie souligne l'importance de comprendre la réindexation dans Elasticsearch. Il ne s'agit pas seulement de copier des données ; il s'agit de maintenir l'intégrité de votre « bibliothèque » pour une recherche et une récupération efficaces. Voyons quand une réindexation est nécessaire et comment rester au courant.
La réindexation devient essentielle lorsque des modifications surviennent dans vos modèles de données ou mappages Elasticsearch, ou lorsque vous recherchez des améliorations de performances. Dans cette section, nous examinerons ces scénarios plus en détail pour comprendre les nuances expliquant pourquoi la réindexation est requise.
Les changements structurels dans les modèles de données font référence à des modifications dans la façon dont les données sont structurées dans Elasticsearch. Ces modifications peuvent inclure des éléments tels que l'ajout ou la suppression de nouveaux champs ou la modification des types de données des champs existants.
L'introduction de nouveaux champs nécessite souvent une réindexation pour garantir qu'Elasticsearch sait comment rechercher efficacement les données stockées dans ce champ. La modification des types de données nécessite un nouvel index car vous ne pouvez pas modifier les types de données sur place. Une fois le nouveau mappage créé pour le type de données modifié, les données doivent être réindexées.
Ces changements structurels nécessitent une réindexation en raison de l'approche de schéma sur écriture d'Elasticsearch. Elasticsearch indexe les données au fur et à mesure qu'elles sont ingérées, et toute modification apportée à la structure des données peut entraîner des incohérences entre les données existantes et les données écrites avec le nouveau schéma. Par conséquent, sans réindexation, les requêtes de recherche peuvent produire des résultats inattendus ou inexacts en raison de l'incompatibilité des schémas des éléments de données. Cela peut avoir un impact à la fois sur l’exactitude des données et sur les performances de recherche.
Les mappages servent de modèle pour la façon dont les données sont indexées et interrogées dans Elasticsearch. Lorsque ces mappages sont modifiés, une réindexation est généralement nécessaire.
Les mappages définissent les types de données et les propriétés des champs dans Elasticsearch. Toute modification de ces mappages affecte la manière dont les données sont indexées, stockées et récupérées. Par exemple, la modification d'un champ de texte en champ de date modifie fondamentalement la façon dont les données sont traitées et interrogées. Elasticsearch applique la cohérence des données en fonction des définitions de mappage. Les modifications apportées aux mappages peuvent entraîner des incohérences entre les données existantes et le schéma mis à jour si les données ne sont pas réindexées.
Lorsque les mappages sont modifiés, en particulier si cela implique de modifier les types de données ou les propriétés des champs, le remplissage devient également important. Le remplissage est le processus de remplissage ou de mise à jour rétroactive des données existantes pour les aligner sur un nouveau schéma ou une nouvelle structure de données. Cela signifie que les données existantes peuvent toujours être interrogées de manière efficace et précise après le changement de mappage.
La réindexation n'est pas seulement une tâche de maintenance de routine, c'est un outil puissant pour optimiser les performances de recherche au sein d'Elasticsearch. Par exemple, la réindexation permet de modifier le nombre de fragments dans un index. L'ajustement du nombre de partitions, ou repartitionnement, peut répartir les données plus uniformément, évitant ainsi des charges de travail inégales sur des nœuds spécifiques afin d'améliorer les performances de recherche.
La réindexation peut également être utilisée pour consolider des indices ensemble. Supposons que vous disposiez de plusieurs petits index partageant la même structure de données et fréquemment interrogés ensemble. La réindexation peut les consolider en un seul index plus grand. Cela réduit les frais liés à la gestion de nombreux petits index, ce qui peut à son tour améliorer la vitesse de recherche.
Enfin, la réindexation peut être utilisée pour améliorer le routage. En réindexant et en appliquant efficacement des stratégies de routage, vous pouvez acheminer les requêtes vers des partitions spécifiques, minimisant ainsi le nombre de partitions à rechercher. Cette approche ciblée peut accélérer considérablement les requêtes de recherche si vos données sont fréquemment recherchées à l'aide de clés spécifiques telles qu'un identifiant utilisateur.
Lors de la mise à niveau d'Elasticsearch version 6.X vers 8.0 (version majeure actuelle) et au-delà, vous devrez peut-être réindexer tous les index créés dans la version 6. Les structures de données et les mécanismes sous-jacents d'Elasticsearch ont considérablement changé entre ces versions, nécessitant une réindexation pour des raisons de compatibilité et de performances optimales. .
Le processus de réindexation garantit que les données s'alignent sur la structure mise à jour et les nouvelles fonctionnalités pour garantir que vous puissiez migrer en toute transparence de l'ancien vers le nouveau. Elasticsearch recommande d'utiliser son assistant de mise à niveau pour vous aider dans ce processus.
La réindexation dans Elasticsearch est rendue possible grâce à l'API Elasticsearch Reindex. L'API Reindex sert de pont entre votre index existant et le nouvel index que vous souhaitez créer ou modifier. Son objectif principal est de permettre le transfert efficace des données d'un index à un autre, en plus de cela, vous pouvez également :
Copiez sélectivement les documents de l'index source vers l'index cible.
Appliquez des transformations de données complexes, telles que le renommage des champs ou les conversions de types.
Filtrez les données en fonction de critères spécifiques.
Contrôlez le processus d'indexation avec des options telles que la limitation et les intervalles d'actualisation.
Avant d'utiliser l'API Reindex, assurez-vous que l'index cible, dans lequel vous souhaitez déplacer ou transformer vos données, est créé et correctement configuré.
Pour déclencher la réindexation, vous devez ensuite formuler une requête POST au point de terminaison _reindex
, en spécifiant les index source et cible, ainsi que les transformations ou filtres souhaités. Un exemple de requête POST de réindexation pourrait ressembler à ceci.
POST /_reindex { "source": { "index": "source_index" }, "dest": { "index": "target_index" }, "script": { "source": "ctx._source.new_field = 'transformed value'" }, "query": { "term": { "category.keyword": "example" } } }
Une fois votre requête créée, vous pouvez l'envoyer à Elasticsearch, lançant ainsi le processus de réindexation. Elasticsearch commencera à copier les données de l'index source vers l'index cible, en suivant vos instructions définies.
Une fois la réindexation terminée, testez minutieusement les données de l'index cible pour vous assurer qu'elles correspondent à vos attentes. Par exemple, vous pouvez comparer les mappages de champs entre les index source et cible pour confirmer que les champs ont été correctement mappés lors de la réindexation. Vous pouvez également récupérer un échantillon de documents à partir des index source et cible et les comparer pour vérifier que les données ont été réindexées avec précision.
Lors de la réindexation dans Elasticsearch, vous devez suivre ces bonnes pratiques pour garantir que la procédure de réindexation se déroule sans problème, sans perte de données et avec peu d'impact sur les opérations de cluster existantes.
Avant de lancer toute activité de réindexation, il est important de sauvegarder votre cluster. Cette étape de précaution agit comme un filet de sécurité, offrant un moyen de revenir à l'état d'origine si des problèmes inattendus surviennent au cours du processus de réindexation.
L'index source doit toujours exister après la réindexation, cependant, c'est un principe fondamental de toujours disposer d'une copie fiable de vos données avant d'apporter des modifications importantes.
Pour atténuer les risques et les défis potentiels lors de la réindexation, il est conseillé d'effectuer d'abord l'opération dans un environnement de pré-production. Ce faisant, vous pouvez identifier et résoudre tout problème imprévu sans affecter le système de production. Une fois la procédure terminée et vérifiée dans l’environnement de pré-production, elle peut alors être exécutée en toute sécurité en production.
Il est important de surveiller les ressources système pendant la réindexation pour éviter de mettre à rude épreuve votre infrastructure. La réindexation peut nécessiter beaucoup de ressources, en particulier pour les ensembles de données plus volumineux. Garder un œil attentif sur le processeur, la mémoire, l'utilisation du disque et l'activité du réseau peut aider à optimiser l'allocation des ressources, garantissant ainsi que le processus s'exécute efficacement sans provoquer de goulots d'étranglement en termes de performances. Pour vérifier l'utilisation des ressources, vous pouvez utiliser l'API de statistiques de nœud.
GET /_nodes/stats
Cela renverra une réponse qui ressemble à ceci.
{ "_nodes": { "total": 2, "successful": 2, "failed": 0 }, "cluster_name": "my_cluster", "nodes": { "node_id1": { "name": "node_name1", "process": { "cpu": { "percent": 30, } }, "jvm": { "mem": { "heap_used_percent": 40.3, "heap_used_in_bytes": 123456789, "heap_max_in_bytes": 256000000 } } }, "node_id2": { "name": "node_name2", "process": { "cpu": { "percent": 50, } }, "jvm": { "mem": { "heap_used_percent": 60.8, "heap_used_in_bytes": 210987654, "heap_max_in_bytes": 256000000 } } } } }
Si vous trouvez que la réindexation est trop intensive, vous pouvez limiter le processus en définissant le paramètre requests_per_second
lors de la soumission de la demande de réindexation. Cela ajoutera une période de veille entre les lots pendant le nombre de secondes défini par le paramètre, pour fournir une période de refroidissement entre les lots.
Une fois la réindexation terminée, vous devez vérifier les données dans l'index cible pour vous assurer qu'elles ressemblent à vos attentes. Ce processus de validation doit englober une variété de tests, notamment le décompte des documents, les mappages de champs et les requêtes de recherche.
Elasticsearch s'est sans aucun doute imposé comme une solution de premier plan dans le domaine de la recherche et de l'analyse NoSQL. Cependant, il vaut la peine d'explorer des solutions alternatives qui offrent des approches uniques en matière d'indexation et d'interrogation des données, en particulier une solution comme Rockset.
Rockset est une alternative cloud native à Elasticsearch et offre une perspective différente sur l'indexation et l'interrogation des données. Contrairement à l'approche de schéma sur écriture d'Elasticsearch, Rockset permet une ingestion sans schéma. Les données peuvent être ingérées et interrogées sans avoir besoin d'une définition de schéma préalable, offrant ainsi plus de flexibilité dans la gestion d'ensembles de données en constante évolution sans avoir besoin de réindexation.
Dans le domaine de la gestion des index, Rockset bénéficie de son modèle d'indexation convergé dans lequel un index de ligne, un index de colonne et un index de recherche sont tous créés automatiquement pour les données au fur et à mesure de leur ingération. Cela contraste avec Elasticsearch, où les index sont créés par les utilisateurs et où les changements structurels nécessitent souvent de longues procédures de réindexation.
Bien qu'Elasticsearch reste une solution robuste pour divers cas d'utilisation, explorer des alternatives telles que Rockset peut être utile, surtout si vous constatez que la réindexation dans Elasticsearch devient une activité fréquente.
La réindexation est un processus fondamental dans Elasticsearch et est importante pour maintenir l'efficacité et la précision des résultats de recherche à mesure que les structures de données évoluent.
Si vous constatez que la réindexation devient une charge de temps constante pour votre équipe, cela vaut peut-être la peine d'explorer des solutions alternatives comme Rockset. Rockset propose un processus de gestion d'index plus rationalisé qui permet aux développeurs de se concentrer sur des activités à plus forte valeur ajoutée.