Projet expérimental

CoursFinder : découvrir Elasticsearch avec mes documents de cours

Un prototype local créé pour comprendre l’indexation de documents Word et la recherche plein texte avec Elasticsearch.

  • Elasticsearch
  • Vue.js
  • Node.js
  • Docker
Voir le code source sur GitHub

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.

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.