Documentation Technique Complète

Manuel d'utilisation détaillé de l'interface en ligne de commande (CLI) et de l'orchestration du serveur.

Lancement (run.sh)

Le script run.sh automatise entièrement la compilation Maven, le lancement des processus en arrière-plan et la gestion des ports réseau (pour éviter l'erreur Address already in use).

Utilisation du menu interactif

Exécutez le script à la racine du projet. Un menu vous guidera pour lancer le serveur et le client sans avoir à mémoriser les commandes Maven.

# 1. Rendre le script exécutable (Linux/Mac)
chmod +x run.sh

# 2. Lancement
./run.sh
Options du menu
========================================
 MENU DE LANCEMENT - PROJET INFO4B 
========================================
1) Recompiler tout le projet (Maven)
2) Démarrer le Serveur
3) Démarrer le Client interactif
4) Quitter
========================================
-> Entrez votre choix (1-4) : 3

Commandes de base

-h — Aide

Affiche la liste complète des commandes disponibles avec leur description.

> -h
Commandes disponibles :
-h : afficher l'aide
-s <mot> : rechercher...
...
-l — Liste des fichiers

Affiche la liste de tous les fichiers actuellement indexés dans le moteur de recherche.

> -l
src/testIndexed/cours.txt
src/testIndexed/notes.pdf
src/testIndexed/rapport.txt
-t <message> — Test de communication

Envoie un message au serveur et reçoit un écho en retour. Utile pour vérifier que la connexion client-serveur fonctionne correctement.

> -t bonjour
Message reçu : bonjour
-q — Quitter

Ferme proprement la connexion entre le client et le serveur. Le serveur reste actif et peut accepter de nouvelles connexions.

> -q
Fermeture du client...

Indexation & Moteur TF-IDF

TF-IDF :
algorithme statistique qui permet de classer les résultats d'une recherche en évaluant l'importance d'un mot-clé dans un document par rapport à sa rareté dans l'ensemble des fichiers.
-s <mots> (Scan & Indexation)

Parcourt les fichiers et garde ceux qui ont le mot recherché par l'utilisateur pour afficher les chemins et le score TF-IDF de ceux-ci.

> -s coucou
Document: src/testIndexed/coucou.txt, Score TF-IDF: 0.23138452642
Document: src/testIndexed/coucou2.txt, Score TF-IDF: 0.13863457335
Document: src/testIndexed/test.txt, Score TF-IDF: 0.04953753245
Document: src/testIndexed/millionsWords.txt, Score TF-IDF: 5.99356380828E-7
-s <mots>

Recherche standard calculée via TF-IDF. Vous pouvez exclure des mots stricts avec le double tiret --.

# Recherche "réseau" sans "cloud"
> -s reseau -- cloud
Document: src/tcp.txt | Score: 0.84527396774
Document: src/osi.pdf | Score: 0.12052765589
-ar <requête>

Recherche avancée supportant les opérateurs logiques complexes : ET, OU, SAUF.

# Doit contenir java ET réseau, sans C++
> -ar java ET reseau SAUF cpp
Document: src/sockets.txt | Score: 1.10425679264

Gestion de Fichiers Distants

Commandes réseau utilisant les flux sécurisés pour prévenir la corruption des données lors du transfert.

⚠️ -> Fonctionne uniquement avec les chemins relatifs stockés lors de l'indexation

-dl <chemin>

Télécharge un fichier binaire (PDF, Image, etc.) depuis le serveur vers le dossier local downloads/.

> -dl src/cours_maths.pdf
Début du téléchargement : cours_maths.pdf
Téléchargement terminé ! (3072 octets)

⚠️ -> Pas de limite de taille — un fichier de plusieurs Go peut saturer la mémoire

⚠️ -> En cas de coupure, le fichier partiel reste dans downloads/

-m <chemin>

Affiche les métadonnées internes du moteur (Date d'indexation, taille exacte, nombre de mots).

> -m src/notes.txt
Chemin: src/notes.txt | Poids: 14Kb
-m -rn <ancien> <nouv>

Renomme ou déplace le fichier sur le serveur. Met à jour l'index et consigne l'action dans journal.csv.

# Exemple de déplacement :
> -m -rn src/test.txt archives/test.txt
Fichier renommé avec succès.
-r <chemin> — Lire un fichier

Affiche le contenu textuel d'un fichier directement dans le terminal client. Fonctionne sur les fichiers TXT et PDF (nécessite pdftotext).

> -r src/testIndexed/cours.txt
Bonjour, voici le contenu
du fichier texte...
-m -rm <chemin>

Supprime définitivement le fichier du serveur physique et purge l'index inversé.

> -m -rm src/secret.pdf
Fichier supprimé avec succès.

⚠️ -> Pas de confirmation avant suppression

-tag [ -add | -rm | -l ]

Gère les métadonnées sémantiques. Permet d'annoter des images ou des documents pour les retrouver via la recherche TF-IDF.

> -tag -add photo.jpg plage,ete
Tags ajoutés avec succès !
> -tag -l photo.jpg
Tags actuels du fichier : [Tags: plage, ete]

Outils d'Analyse Avancés

-exif <image.jpg> : Extraction EXIF

S'interface avec exiv2 pour extraire les données cachées (GPS, Appareil photo, Date) d'une image distante.

> -exif images/photo.jpg
Exif.Image.Orientation                       Short       1  top, left
Exif.Image.XResolution                       Rational    1  72
Exif.Image.YResolution                       Rational    1  72
Exif.Image.ResolutionUnit                    Short       1  inch
Exif.Image.ExifTag                           Long        1  90
Exif.Photo.PixelXDimension                   Long        1  1200
Exif.Photo.PixelYDimension                   Long        1  2323
Iptc.Application2.Caption                    String      6  heyyyy
                                            
-exif -set <image.jpg> <description>

L'option -set utilise l'outil système pour incruster une description de manière persistante.

> -exif -set src/photo.jpg "Plage en Corse"
Description incrustée physiquement dans l'image avec succès !
> -exif src/photo.jpg
--- Données EXIF/IPTC de l'image ---
Iptc.Application2.Caption      String      6  heyyyy
...
-d <fich1> <fich2> : Doublons stricts

Vérifie algorithmiquement si deux fichiers sont des copies conformes au niveau du contenu.

> -d doc1.txt doc2.txt
Ces fichiers sont similaires.
-sw -add / -rm <mots> : Stop Words

Modifie la liste des Stop-Words (mots exclus du calcul TF-IDF). L'ajout ou la suppression déclenche une réindexation automatique.

> -sw -add cependant,néanmoins
Mots ajoutés à la liste d'exclusion avec succès.

Maintenance de l'index

-clean — Compacter le journal

Réécrit le fichier journal.csv en ne gardant que l'état actuel de chaque document. Réduit la taille du journal qui grossit à chaque opération.

> -clean
Journal compacté avec succès.

⚠️ Opération bloquante — le serveur ne répond plus pendant la compaction.

-reindex — Réindexation complète

Supprime entièrement le journal et relance une indexation complète depuis zéro. Utile si l'index est corrompu ou si les stop words ont été modifiés massivement.

> -reindex
Réindexation terminée !

⚠️ -> Irréversible — le journal est supprimé sans confirmation.

⚠️ -> Opérations bloquantes — le serveur ne répond plus aux autres clients pendant l'exécution

Limites connues

-ar — Recherche avancée
  • Pas de priorité des opérateurs : a OU b ET c n'évalue pas b ET c en premier
  • mot SAUF mot retourne toujours un résultat vide
  • Les résultats ne sont pas triés par score TF-IDF (contrairement à -s)