Fermer

septembre 11, 2025

Migrating MySQL Data vers Elasticsearch: un guide pratique

Migrating MySQL Data vers Elasticsearch: un guide pratique


Introduction

Elasticsearch est devenu un choix incontournable pour créer des expériences de recherche rapides et intelligentes. Mais que se passe-t-il si votre source de vérité est une base de données relationnelle comme MySQL? Dans ce blog, nous allons parcourir la façon dont nous avons migré les données relationnelles structurées dans Elasticsearch en utilisant Python – avec Company_Registry comme exemple de travail.

Pourquoi migrer de MySQL vers Elasticsearch?

MySQL est idéal pour les charges de travail transactionnelles (OLTP), mais en ce qui concerne la recherche en texte intégral, la saisie semi-automatique, la tolérance à la faute de frappe ou le filtrage complexe, il se débat. Elasticsearch brille ici avec:

  • Mappages flexibles pour les champs de recherche
  • Prise en charge de l’analyse de texte (engendrée, synonymes, phonétique)
  • Performance de requête au niveau des millisecondes
  • Échelle facile pour les grands ensembles de données
  • Pour combler l’écart, nous avons besoin d’un pipeline de migration qui récupère les données de MySQL, les transforme et les index en Elasticsearch.
diagramme de débit de pipeline

diagramme de débit de pipeline

Configuration des bases

Nous utiliserons:

  • Mysql comme source de données
  • Elasticsearch (V8 +) comme moteur de recherche
  • Python + Client officiel d’Elasticsearch pour la migration
Sécuriser les connexions à MySQL et Elasticsearch

Ici, nous établissons des connexions sécurisées à MySQL et Elasticsearch

Suppression d’anciens indices

Avant de créer de nouveaux indices, c’est une bonne pratique de supprimer tous ceux obsolètes. Cela empêche la cartographie des conflits ou des enregistrements en double.

Supprimer les données d'index

Supprimer les données d’index

Création de mappages Elasticsearch

Contrairement à MySQL, Elasticsearch vous oblige à définir comment les champs doivent être indexés. Pour notre entreprise_agistre, nous utilisons le mappage suivant:

Indice de registre des sociétés

Indice de registre des sociétés

Cela garantit que:

  • CompanyName prend en charge les requêtes de correspondance complète et de correspondance exacte.
  • ExcludeFromsEarch est un drapeau booléen.
  • ID est stocké comme un long numérique.

Transformer les données

Les données MySQL brutes ne mappent pas toujours directement à Elasticsearch. Nous normalisons les champs avant d’indexer:

Transformation des données

Transformation des données

Données de récupération et d’indexation

Voici la logique de migration pour Company_Registry:

  • Récupérer les lignes de MySQL
  • Appliquer des transformations
  • Les pousser dans Elasticsearch en vrac (plus rapide que les inserts simples)
Données de récupération et d'indexation

Données de récupération et d’indexation

Exécuter la migration

Enfin, exécutez la migration:

Migration de course

Migration de course

Lors de l’exécution, ce script sera:

  • Supprimer n’importe quel ancien index (si nécessaire)
  • Recréer l’index avec des mappages appropriés
  • Migrer les lignes de MySQL vers Elasticsearch

Leçons clés apprises

  • Définissez toujours des mappages explicites, sinon ES peut mal interpréter vos champs.
  • Transformer les booléens et les dates – MySQL les stocke souvent comme Tinyint ou DateTime, qui ne analysera pas correctement sans conversion.
  • Utilisez l’indexation en vrac pour les performances.
  • Index par table – Chaque table MySQL peut mapper à son propre index (par exemple, Company_Registry, utilisateur, etc.).

Conclusion

En construisant un pipeline de migration simple avec Python, nous avons réussi à déplacer les données Company_Registry de MySQL dans Elasticsearch. Une fois indexés, les données peuvent être exploitées pour la saisie semi-automatique, la recherche floue, la manutention de la faute de frappe et les requêtes fascinantes – des choses avec lesquelles MySQL se débat. Cette approche est flexible: étendez simplement les fonctions de transformation pour d’autres tables comme l’utilisateur ou la compagnie_ordre et vous avez un pipeline ETL réutilisable pour toutes vos entités.

Vous avez trouvé cela utile? PARTAGEZ-LE






Source link