Un projet conçu pour expérimenter
CoursFinder est un petit projet personnel que j’ai développé pour découvrir Elasticsearch autrement qu’en suivant uniquement de la documentation ou quelques exemples isolés.
Je voulais comprendre comment des documents pouvaient être transformés en données interrogeables par un moteur de recherche. Pour donner un cas concret à cette expérimentation, j’ai utilisé mes propres fichiers de cours au format Word.
L’objectif n’était pas de construire une application destinée à être mise en ligne ou maintenue sur le long terme. Je souhaitais surtout mettre en place une chaîne complète, depuis l’importation d’un document jusqu’à l’affichage des résultats dans une interface web.
Des documents Word aux résultats de recherche
01
Document Word
Dépôt d’un fichier .docx
02
Extraction du texte
Lecture du contenu avec Mammoth
03
Indexation
Enregistrement dans Elasticsearch
04
Recherche
Affichage des résultats avec Vue.js
Transformer des fichiers Word en données recherchables
La première étape consistait à récupérer le contenu de mes documents .docx.
J’ai créé un script Node.js qui parcourt un dossier contenant les fichiers à traiter. La bibliothèque Mammoth extrait leur texte brut, sans conserver leur mise en page ni leurs images. Le nom du fichier devient ensuite le titre du document, tandis que le texte extrait constitue son contenu.
Ces deux informations sont enregistrées dans un index Elasticsearch nommé cours. Cette partie du projet m’a permis de mieux comprendre qu’un moteur de recherche ne travaille pas directement avec les fichiers d’origine : il faut d’abord en extraire les informations utiles et les organiser sous une forme qu’il pourra indexer.
Cours de réseau.docx
Aperçu du contenu du document correspondant à la recherche…
Score de pertinence : 4,72
Exemple représentant la structure d’un résultat, et non une capture de l’application.
Rechercher dans le contenu depuis Vue.js
Pour tester les données indexées, j’ai développé une petite interface avec Vue.js et Tailwind CSS.
L’utilisateur saisit un mot ou une expression, puis l’application interroge Elasticsearch sur deux champs : le titre du document et son contenu. La recherche utilise une requête multi_match, ce qui permet de rechercher le même terme dans ces deux zones.
Les résultats affichent le nom du fichier, un aperçu des premières lignes de son contenu ainsi que le score de pertinence calculé par Elasticsearch. L’interface propose également quelques suggestions et permet de relancer une requête depuis la page des résultats.
Le projet reste volontairement simple : le bouton prévu pour ouvrir un cours n’a notamment pas été finalisé.
Périmètre du projet
Un prototype pensé pour fonctionner localement
Elasticsearch est lancé dans un conteneur Docker en mode nœud unique. Les données de l’index sont conservées dans un volume local afin de les retrouver après le redémarrage du conteneur.
Dans cette première version, l’interface Vue communique directement avec Elasticsearch sur localhost. La sécurité du moteur et les restrictions CORS ont été désactivées pour simplifier les essais. Cette configuration convient à une expérimentation sur mon ordinateur, mais ne serait pas adaptée à une mise en production.
Ce qui a été réalisé
- Importation des fichiers
.docx - Extraction du texte
- Indexation dans Elasticsearch
- Recherche sur le titre et le contenu
- Affichage des résultats et de leur score
- Lancement d’Elasticsearch avec Docker
Ce qui n’a pas été développé
- Consultation complète des documents
- API intermédiaire sécurisée
- Authentification
- Filtres avancés
- Déploiement public
- Configuration adaptée à la production
Les technologies utilisées
Elasticsearch
Indexation et recherche plein texte
Vue.js
Interface de recherche et résultats
Node.js
Exécution du script d’importation
Mammoth
Extraction du texte des fichiers Word
Tailwind CSS
Mise en forme de l’interface
Docker
Lancement local d’Elasticsearch
Ce que cette expérimentation m’a appris
CoursFinder m’a offert une première approche concrète d’Elasticsearch. J’ai pu découvrir le principe d’un index, l’enregistrement de documents et la recherche plein texte sur plusieurs champs.
Le projet m’a également permis de relier plusieurs étapes souvent présentées séparément : lire des fichiers Word, en extraire le texte, préparer les données, les indexer puis les exploiter depuis une interface web.
Avec le recul, je construirais différemment une application destinée à être réellement utilisée. J’ajouterais notamment une API entre le front-end et Elasticsearch, une configuration sécurisée, une meilleure gestion des erreurs et une véritable consultation des documents trouvés.
CoursFinder n’est pas un produit terminé, mais il m’a permis de comprendre toute la chaîne située entre un document Word et un résultat de recherche.
Code source
Consulter le projet
Le prototype n’est pas disponible en ligne, mais son code source reste consultable sur GitHub.