info4b_search_engine

Objectif du projet

Ce projet consiste en la création d'un moteur de recherche complet basé sur une architecture Client-Serveur en Java. L'application permet d'indexer des documents locaux (TXT, PDF, Images) et de classer les résultats de recherche par pertinence en utilisant l'algorithme TF-IDF.


Let's go


Installation

Récupérez le code source depuis le dépôt Git ou utilisez une version pré-compilée.

Via le code source (Recommandé)

L'outil git est requis pour cloner le dépôt.

# Cloner le dépôt localement
git clone https://github.com/Codexydev/Info4b-sujet-1.git
cd info4b-sujet-1
Version Exécutable
Télécharger la release (.jar)
# Déploiement du Serveur
java -cp projet.jar Serveur.Main
# Déploiement du Client
java -cp projet.jar Client.Main

Déploiement

Prérequis système obligatoires : Java 17, Maven, poppler-utils, exiv2.
/!\ poppler-utils et exiv2 sont généralement déjà présent sur Ubuntu/Debian.

MacOS (via Homebrew)
# Installation groupée des paquets
brew install openjdk@17 maven poppler exiv2
Linux (Ubuntu/Debian)
# Mise à jour et installation groupée
sudo apt update
sudo apt install openjdk-17-jdk maven poppler-utils exiv2
Lancement du moteur
Option 1 : Script interactif (Recommandé)

Utilisez le menu automatisé pour tout gérer depuis un seul endroit. Le script vérifiera lui-même les prérequis.

# Donner les droits d'exécution au script
chmod +x run.sh

# Lancer le menu interactif
./run.sh
Option 2 : Commandes manuelles

Pour lancer les composants séparément dans différents terminaux.

# 1. Compilation
mvn clean compile

# 2. Serveur (Port 12345)
mvn exec:java -Dexec.mainClass="Serveur.Main"

# 3. Client (Nouveau terminal)
mvn exec:java -Dexec.mainClass="Client.Main"

Interface en ligne de commande (CLI)

Session Client interactive
> -s linux,systeme
...

> -sw -add le,la,les
...

> -m src/document.pdf
...

Architecture technique

Multi-threading

Le serveur gère plusieurs clients simultanément grâce à un ThreadGroup dédié. Le journal utilise un pattern Producteur/Consommateur avec un thread écrivain asynchrone, évitant tout blocage des opérations d'indexation.

journalisation

Chaque opération (ajout, modification, suppression) est persistée dans un fichier journal.csv. Au redémarrage, l'état complet est restauré depuis ce journal sans réindexation, garantissant la continuité du service.

Client - Serveur

Architecture TCP/IP sur le port 12345. Le client interactif propose un ensemble de commandes (-s, -ar, -dl, -m, -sw...) pour interroger le serveur, télécharger des fichiers et gérer l'index à distance.