Ludovic Frank - Développeur indépendant

Eh non, MYSQL et MariaDB ne sont pas des moteurs de recherche…

ionicons-v5-k Ludovic Frank 8 nov. 2021
6242 lectures Niveau :

Hey bonjour, vous 😁.
Comment ça va ? Bien, pas trop froid ? bon tant mieux !
Cette semaine l’article est pour mes collègues développeurs, on va parler de recherche … mais de vrai recherche ! 

Je vois souvent MYSQL utilisé comme moteur de recherche …

C’est un fait ! dans les projets sur lesquels je suis passé j’ai souvent vu ce système de gestion de base de donnée (ou MariaDB ou encore Postgresql) utilisée comme moteur de recherche avec de truc du genre “where my_attribute LIKES ‘%blabla%”
Et c’est une très mauvaise pratique …

À quoi sert réellement un système de base de données relationnelle ?

Selon moi, un système de gestion de base de données relationnel, est conçu pour une tâche simple, c'est-à- dire … stocker des données et y accéder directement. Je m’explique si vous dites clairement à MYSQL que vous souhaitez accéder à une ou plusieurs entrées en précisant clairement son id ou un de ses autres attributs alors il sera capable de trouver ce que vous voulez très rapidement, il est conçu pour ça, mais si vous commencez à vouloir l’utiliser comme moteur de recherche … il ne sera pas performant… rien que le code nécessaire pour chercher sur plusieurs champs est une blague … du genre “where my_attribute 1 LIKES or where ….” Bref, vous avez compris l’idée (au pire, testez par vous-mêmes 😛).

Les bases de données indexées

En fait, pour la recherche il existe d'autres systèmes de base de données, on les appelle des bases de données indexées et il en existe plusieurs (comme les SGBD).

Contrairement aux SGBD, il n’y a aucune relation, les données sont posées “comme ça” à plat dans une base de données indexée, imaginez plein de ligne Excel, et du coup il y a des données dupliquées, pour des articles, par exemple, chaque ligne contient sa catégorie en toutes lettres contrairement au SGBD, ou l’ont mettrait un simple lien qui pointe vers la catégorie, on est là pour rechercher ! pas pour optimiser l’espace mémoire … 😛

Une solution SAAS : Algolia

C’est quoi le SAAS ? J’ai fait un article dessus, non, mais ! 🤣
Là comme ça de tête en solution SAAS, il y a Algolia, que j’ai utilisée il y a quelques années sur un projet de dev sur ce site, ils l’utilisent toujours aujourd’hui d’ailleurs. À l’époque j’ai choisi Algolia, car le rapport performance / coût était intéressant, néanmoins aujourd’hui ils ont changé de modèle économique et il est selon moi moins intéressant, après ça reste mon avis.

Pour ceux qui veulent aller plus loin avec les bases de données indexées …

Pour ceux qui veulent mettre les mains dans le cambouis en Open Source, il y a ElasticSearch ou encore Lucene, par exemple.
Ces bases de données indexées sont les plus connues et elles sont très bien documentées.
Si vous voulez un exemple de recherche avec ElasticSearch vous pouvez en trouver un sur cette page de mon site, à l’époque (il y a un an), j’ai utilisé ELS pour avoir un petit moteur de recherche rapide et ça a fait parfaitement le job et ce fut la base de mon système à moi … Ludo Dev - Lightning Search.

Proposez une expérience de recherche satisfaisante.

Ici vous allez voir ce qu’il est possible de faire quand on se base sur les bons outils ....

Pour mes derniers projets, je voulais un moteur de recherche ultra rapide et ultra efficace. 

Du coup, basé sur ElasticSearch je me suis fait ma version ultra optimisée, je voulais que ce soit simple rapide et efficace et je voulais :

  • Une petite barre de recherche rapide, je commence à taper et il a déjà deviné … ce qui donne une expérience très agréable pour l’utilisateur.
  • Dans cette barre de recherche il fallait une tolérance aux fautes de frappe, les gens sur internet veulent aller vite ! du coup ils font des fautes de frappe (et avec le clavier de téléphone, je n’en parle même pas), je ne peux pas non plus rattraper l'irrattrapable, mais les oubliés d’accents ou écrire “mont d’ar” au lieu de “mont d’or”, c’est rattrapable.
  • Un mode avancé avec des “facettes", je coche ce qui m'intéresse et ça me permet de croiser par exemple ici, un fromage au lait de chèvre cru, c’est possible

Du coup vous pouvez voir le résultat de la petite barre de recherche sur la fromagerie en ligne, et dans la liste des fromages c’est le moteur de recherche plus avancée… j’ai essayé de le rendre rapide convivial et très agréable à utiliser, comme je l’ai dit, Lightning Search est basé sur ElasticSearch avec des patchs maison pour le rendre encore plus rapide… même avec plein de recherche en même temps.

Conclusion

L’idée de cet article était de vous mettre sur la voie des bonnes pratiques en termes de recherche, je ne voulais pas non plus que ça vous tombe tout cuit dans le bec, il va falloir chercher un minimum pour faire un moteur de recherche sympa … mais vous êtes passionné… alors vous y arriverez 😁
À la semaine prochaine 😊