Expérimentation

CoursFinder · Moteur de recherche pour mes cours

Ma première exploration d'Elasticsearch pour indexer et rechercher dans mes documents

🎯 L'idée de départ

Tout est parti d'une curiosité technique. On m'avait parlé d'Elasticsearch comme d'un outil extraordinaire : un moteur de recherche ultra-puissant capable d'indexer n'importe quel type de données JSON et de les rendre instantanément recherchables. La promesse était alléchante : "Tu balances tes données, et Elasticsearch s'occupe du reste."

Plutôt que de suivre un tutoriel générique, j'ai voulu appliquer cette technologie à un problème concret que je rencontrais au quotidien : retrouver rapidement une information précise parmi tous mes documents de cours. Qui n'a jamais passé de longues minutes à chercher "dans quel PDF j'avais vu ce schéma" ou "où était cette définition" ?

🔍 Le concept : Uploader mes fichiers Word, extraire automatiquement le texte et le titre, puis pouvoir rechercher n'importe quel mot ou expression à travers l'ensemble de mes cours en une fraction de seconde.

⚙️ Comment ça fonctionne ?

Le principe de CoursFinder est relativement simple, mais son implémentation m'a permis d'explorer plusieurs concepts intéressants :

📄

Upload de documents

L'interface permet d'uploader des fichiers Word (.docx) contenant mes notes de cours.

🔤

Extraction de texte

Le contenu textuel est extrait automatiquement, ainsi que le titre du document.

📊

Indexation Elasticsearch

Les données sont envoyées à Elasticsearch qui les indexe pour une recherche ultra-rapide.

🔎

Recherche instantanée

Une simple requête permet de retrouver tous les documents contenant un terme précis.

Flux de données

📁
Fichier .docx
🔄
Extraction
📋
JSON
🔍
Elasticsearch
Résultats

🛠️ Stack technique

Pour ce projet d'exploration, j'ai opté pour des technologies que je maîtrisais déjà côté frontend, afin de me concentrer pleinement sur l'apprentissage d'Elasticsearch.

Frontend

Vue.js Tailwind CSS

Une interface simple et épurée avec Vue.js et Tailwind CSS. Pas besoin de fioritures : un champ d'upload, une barre de recherche, et une liste de résultats. L'objectif était d'avoir un prototype fonctionnel rapidement pour tester Elasticsearch.

Backend & Base de données

Elasticsearch JavaScript

Elasticsearch est le cœur du projet. C'est un moteur de recherche distribué, construit sur Apache Lucene, qui excelle dans la recherche full-text. Contrairement à une base de données relationnelle classique, Elasticsearch est optimisé pour :

  • La recherche textuelle : analyse linguistique, stemming, fuzzy matching
  • La rapidité : résultats en millisecondes même sur de gros volumes
  • La pertinence : scoring automatique des résultats par relevance

🧗 Le défi : configurer Elasticsearch

Si la partie frontend s'est construite rapidement, la mise en place d'Elasticsearch a été une tout autre histoire. C'est là que j'ai vraiment appris, et parfois souffert !

Les obstacles rencontrés

⚠️ Paramètres de sécurité : Les versions récentes d'Elasticsearch activent par défaut une authentification stricte (HTTPS, certificats, utilisateurs). Désactiver ou configurer correctement ces options pour un environnement de développement local demande de bien comprendre la documentation.

Incompatibilités de versions : Elasticsearch évolue rapidement, et les tutoriels trouvés en ligne référençaient souvent des versions obsolètes. Une commande qui fonctionnait en v7 pouvait échouer en v8. J'ai dû apprendre à naviguer dans la documentation officielle plutôt que de me fier aux articles de blog périmés.

Tutoriels gratuits rares : Beaucoup de ressources de qualité sont derrière des paywalls ou orientées vers la version cloud payante. Trouver des guides à jour pour une installation locale et gratuite a nécessité pas mal de recherches.

Ce que j'ai appris

📚

Lire la doc officielle

Rien ne vaut la documentation source, surtout pour des outils qui évoluent vite.

🔧

Configuration fine

Comprendre elasticsearch.yml et les options de sécurité m'a pris du temps mais c'était formateur.

🧪

Tester, échouer, recommencer

Plusieurs installations ratées avant de trouver la bonne configuration. C'est le jeu !

💡 Pourquoi Elasticsearch ?

On pourrait se demander : pourquoi ne pas simplement utiliser une recherche basique dans une base SQL avec un LIKE '%mot%' ? La réponse tient en plusieurs points :

Critère SQL LIKE Elasticsearch
Vitesse sur gros volumes 🐌 Lent (scan complet) ⚡ Ultra-rapide (index inversé)
Fautes de frappe ❌ Pas de tolérance ✅ Fuzzy search intégré
Pertinence des résultats ❌ Ordre arbitraire ✅ Scoring par relevance
Synonymes / Stemming ❌ Non ✅ Analyseurs linguistiques

Pour un moteur de recherche sur du contenu textuel, Elasticsearch est clairement taillé pour le job. C'est d'ailleurs la technologie utilisée par Wikipedia, GitHub, et de nombreux sites e-commerce pour leur fonction de recherche.

📝 Bilan du projet

CoursFinder était avant tout un projet d'apprentissage. L'objectif n'était pas de créer une application production-ready, mais de me familiariser avec Elasticsearch et de comprendre ses mécanismes.

✅ Mission accomplie : J'ai désormais une première expérience concrète avec Elasticsearch. Je comprends comment fonctionne l'indexation, les mappings, les requêtes de recherche, et surtout comment configurer l'outil correctement. Cette compétence pourra être réutilisée dans des projets futurs plus ambitieux.

Le projet en lui-même reste fonctionnel : je peux uploader mes cours et rechercher dedans. C'est un outil que j'utilise occasionnellement quand je veux retrouver un concept précis vu en cours sans avoir à ouvrir chaque fichier un par un.

🔗 Voir le projet

Le code source est disponible sur GitHub. N'hésitez pas à y jeter un œil si vous souhaitez vous lancer dans Elasticsearch !