Top Banner
19 Projet Professionnel J2EE : Développement du moteur de recherche IFIND C.FALCOU-H.LAANAIT-D.ZAHAL Tuteur M.THOMAS Projet professionnel J2EE Développement du moteur de recherche IFIND
40

Développement d'un moteur de recherche Lucene

Feb 05, 2023

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Développement d'un moteur de recherche Lucene

19

Projet Professionnel J2EE : Développement du moteur de rechercheIFIND

C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS

Projet professionnel J2EEDéveloppement du moteur de

recherche IFIND

Page 2: Développement d'un moteur de recherche Lucene

19

Projet Professionnel J2EE : Développement du moteur de rechercheIFIND

C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS

Table des matières

1. Etat de l’art des technologies et algorithmes candidats.........4

1.1. Le système de recherche d’information (SRI).................4

1.2. Les composants d’un SRI.....................................5

1.2.1. Le modèle d’indexation...................................5

1.2.2. Le modèle de recherche...................................6

1.3. Les API de recherche d’information IR.......................8

1.3.1. Critères de choix (Source A Comparison of Open Source Search Engines : Christian Middleton, Ricardo Baeza-Yate)......9

1.3.2. L’API retenue...........................................11

1.4. API Lucene 3.1.............................................12

1.4.1. Le principe.............................................12

1.4.2. Les classes d’indexation................................12

1.4.3. Les classes de recherche................................13

2. Tableau des charges............................................14

3. Atelier génie logicielle.......................................15

3.1. Développement & Tests......................................15

3.2. Outils de modélisation.....................................15

3.3. Management de projet.......................................15

3.4. Gestionnaires de version & wiki............................15

Page 3: Développement d'un moteur de recherche Lucene

19

Projet Professionnel J2EE : Développement du moteur de rechercheIFIND

C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS

4. Présentation de l’application Ifind Crawler....................15

4.1. Principe...................................................15

4.2. Digrammes..................................................15

5. Présentation de l’application Ifind Indexer....................16

5.1. Principe...................................................16

5.2. Digramme des classes.......................................16

5.2.1. Package org.esgi.ifind.indexer..........................16

6. Présentation de l’application IfindSearcher....................23

6.1. Principe...................................................23

6.2. Architecture...............................................23

6.2.1. Architecture générale.....................................23

6.2.2. Diagramme de classe.......................................24

6.2.3. Digramme de séquence......................................25

7. Présentation de l’interface de recherche IFIND.................26

8. Diagramme de GANT..............................................28

8.1. Decoupage par lot..........................................28

8.2. Decoupage par sous lot.....................................29

8.2.1. Sous lot HLT.1 – Etat de l’art des technologies et algorithmes candidats..........................................29

8.2.2. Sous Lot DZL.1 D.ZAHAL – Choix de l’atelier de génie logiciel.......................................................29

8.2.3. Sous lot CFU.1 C.FALCOU – Architecture logicielle du système à concevoir............................................29

8.2.4. Sous lot HLT.2 H.LAANAIT – Conception et développement Ifind Indexer..................................................29

Page 4: Développement d'un moteur de recherche Lucene

19

Projet Professionnel J2EE : Développement du moteur de rechercheIFIND

C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS

8.2.5. Sous lot CFU.2 C.FALCOU – Conception et développement Ifind SearchEngine.............................................30

8.2.6. Sous lot DZL.2 D.ZAHAL – Réingénierie et développement Ifind Crawler..................................................30

8.2.7. Lot Test_Doc C.FALCOU – H.LAANAIT – D.ZAHAL – Test & Validation & Documentation.....................................30

1.Etat de l’art des technologies et algorithmescandidats

1.1. Le système de recherche d’information (SRI)

Le système de recherche d’information permet de chercher dans unebase documentaire l’information pertinente à un besoin exprimé parune requête utilisateur.

Un moteur de recherche WEB est une application permettant deretrouver des ressources (pages web, fichiers, images vidéosetc...), associées à des mots clés.

Le fonctionnement d’un moteur de recherche se décompose en troisparties principales :

- L’exploration: se fait à l’aide d’un Crawler:

Cette étape permet de parcourir le web à la recherche deressources pertinentes, l’exploration est lancée depuis une listede ressources pivot, et le crawler se charge de collecter les

Page 5: Développement d'un moteur de recherche Lucene

19

Projet Professionnel J2EE : Développement du moteur de rechercheIFIND

C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS

documents à distance en parcourant récursivement tous leshyperliens qu’il trouve.

- L’indexation: Quand il s’agit de scanner des documents afin detrouver un mot clé ou une phrase, la recherche séquentielle peutêtre un moyen de recherche efficace mais cette dernière montrerapidement ses limites quand le nombre de sources collecté par lecrawler augmente considérablement. En effet le parcours d’un grandnombre de fichier de manière séquentielle devient rapidement unetâche très lourde et inadaptée, c’est là que l’indexation rentreen jeu.

Le processus d’indexation consiste à analyser les mots considéréscomme significatif afin de les extraire et les convertir dans unformat de données simple et rapide à requêter appelé Index,éliminant ainsi le lent processus de balayage séquentiel.

Dans un processus d'indexation une notion de filtrage estintroduit, cette dernière permet de spécifier une liste de motsnon significatifs “stoplist”, il s’agit des mots fonctionnels.

- La recherche: La dernière partie est celle de la recherche et dela restitution des résultats, lors de cette étape le moteurrecherche les mots clés de la requête dans l’Index afind’identifier les documents qui correspondent le mieux. la méthodela plus fréquemment utilisé est TF-IDF (Term Frequency - InverseDocument Frequency) , cette méthode de pondération permet demettre en relation le poids des mots dans une requête avec ceuxcontenus dans le document en créant des vecteurs de mots quipermettent de définir le coefficient de similitude.

1.2. Les composants d’un SRI

Page 6: Développement d'un moteur de recherche Lucene

19

Projet Professionnel J2EE : Développement du moteur de rechercheIFIND

C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS

Document : Le document constitue l’ensemble de l’informationstockée, On distingue deux types de bases documentaires : lesréférothèques et bibliothèques.

Requêtes : la requête est l’expression du besoin en information,de l’utilisateur. Une requête peut être décrite soit par une listede mots clés, en langage naturel, ou encore par des expressionsbooléennes.

1.2.1. Le modèle d’indexation

Un modèle d’indexation défini l’ensemble des règles permettant larestructuration d’un document ou d’une requête. Ainsi lerésultat de l’indexation constitue le descriptif du document oude la requête, assorti à un poids il est ensuite stocké dans unestructure appelé « Index » qui peut être facilement interrogée.

L’indexation est une étape fondamentale dans la conception d’unSRI puisqu’elle est à l’origine de la constitution desreprésentants de documents qui sont susceptibles de s’apparieravec les requêtes des utilisateurs.

Le processus d’indexation passe par trois étapes fondamentales :

-Définition des mots de la Stop List :

Les termes fréquents tels que les articles, les propositions,doivent être explicitement omis. On forme alors ce qu’on appelle

Page 7: Développement d'un moteur de recherche Lucene

19

Projet Professionnel J2EE : Développement du moteur de rechercheIFIND

C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS

une Stop List , c’est-à-dire une liste de termes qui sont toujoursomis.

-Troncature & lemmatisation

L’objectif de cette étape est d’éviter les variantesorthographiques qui se présentent souvent en fin du mot.

-Création de l’index inversé :

La dernière étape de l’indexation consiste en la création d’unestructure de données organisée facilement interrogeable, c’est cequi est appelé l’index inversé, ce dernier peut être défini commesuit : Donner pour chaque terme la liste des documents où il setrouve.

La complexité de recherche O(1)

La complexité d’insertion O(n)

1.2.2. Le modèle de recherche

Un modèle de recherche Permet d’associer une requête à l’ensembledes documents contenu dans le référentiel.

Un modèle de recherche d’information peut être décrit par lequadruple :

[D, Q, F, R(qi,dj)]

D : Ensemble des représentants de documents de la collection

Q : Ensemble de représentants des requêtes

F : Schéma du support théorique de représentation des documents,requêtes et relations associées

R(qi , dj ) : Fonction d’ordre associée à la pertinence

1.2.2.1. Le modèle booléen

Page 8: Développement d'un moteur de recherche Lucene

19

Projet Professionnel J2EE : Développement du moteur de rechercheIFIND

C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS

Le modèle booléen représente la requête sous forme d’une équationlogique, ainsi les termes d’indexation sont reliés par desconnecteurs logiques ET, OU, NON.

1) x ET y : est vrai si et seulement si x et y sont vrais.

2) x OU y : est vrai si et seulement si x ou y, ou les deux, sontvrais.

3) x NON y : est vrai si et seulement si x est vrai et y est faux.

Un processus de recherche booléen traite une requête comme uneexpression logique. Si D est un document et T un terme, on définitl’expression R(D,t) comme étant vraie si le terme se trouve dansle document et comme fausse, s’il en est autrement.

Avantages:

Simplicité de la conception du modèle

Possibilité de structurer une requête avec des opérateurslogiques

Inconvénients:

Difficulté d’utilisation du modèle (complexe) 

Difficulté d’inclure une pondération des termes

1.2.2.2. Le modèle vectoriel

Le modèle vectoriel peut être décrit comme suit. Pour chaquedocument D dans un ensemble, on compte le nombre d’occurrences duterme T (« TF» Term Frequency).

Cette vérification des occurrences forme un vecteur pour chaquedocument et l’ensemble des vecteurs forme une matrice.

Le TF-IDF (Term Frequency-Inverse Document Frequency) est uneméthode de pondération statistique qui permet d'évaluerl'importance d'un terme contenu dans un document, relativement àune collection.

Page 9: Développement d'un moteur de recherche Lucene

19

Projet Professionnel J2EE : Développement du moteur de rechercheIFIND

C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS

Le facteur idf qui sert à tenir compte de la rareté relative decertains termes est défini par la formule idf=log(|D|/df) où |D|est le nombre de documents et df , le nombre de documents où unterme donné apparaît

Avantages:

Utilisation facile des modèles

Aptitude des modèles à bien fonctionner

Inconvénients:

Fondements purement empiriques : peu de fondementsthéoriques

1.3. Les API de recherche d’information IR

Une API IR, est une bibliothèque d’algorithme de recherched’information qui fournit des classes permettant d’implémenter uneapplication de recherche d’information.

Les API étudiées ci-dessous, sont exclusivement des API JAVA.

Lucene est une API de recherche d’inforamtion libre écrite enJava qui permet d'indexer et de rechercher du texte. C'est unprojet open source de la fondation Apache mis à disposition souslicence Apache. Il est également disponible pour les langagesRuby, Perl, C++, PHP.

MG4J (Managing Gigabytes for Java), est une librairie de rechercheen texte intégrale, ce n’est pas tout à fait une API IR, mais ellefournit des implémentations algorithmiques permettant de développéune API IR, c’est un projet open source développé dansl’université de milan,Italie.

Xapian est une API IR open source, diffusé sous licence GPL. Ilest écrit en C++, avec des extensions qui permettent de l'utiliserà partir de langages tels que Perl, Python, PHP, Java, Tcl, C#, etRuby.

Page 10: Développement d'un moteur de recherche Lucene

19

Projet Professionnel J2EE : Développement du moteur de rechercheIFIND

C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS

Terrier (TERabyte RetrIEve) est une librairie de recherched’information développé en java au sein de l’université deGlasgow, c’est un projet open source permettant l’implémentationd’application de recherche d’information.

1.3.1. Critères de choix (Source A Comparison of Open Source SearchEngines : Christian Middleton, Ricardo Baeza-Yate)

Le choix de l’api IR est primordial, c’est de cela que dépend laqualité de l’indexation des documents, et la cohérence de larecherche.

Le choix d’une API IR est orienté par 4 facteurs principaux, quisont le temps d’indexation d’une collection de documents, lataille que les indexes crées occupent dans l’espace disque,l’utilisation des ressources matérielles, et enfin le temps quel’api met pour répondre à une requête utilisateurs.

(a) 1:HTML, 2:plain text, 3:XML, 4:PDF, 5:PS(b) 1:phrase, 2:boolean, 3:wild card, 4:Fuzzy(c) 1:C, 2:C++, 3:Java, 4:Perl, 5:PHP(d)

Page 11: Développement d'un moteur de recherche Lucene

19

Projet Professionnel J2EE : Développement du moteur de rechercheIFIND

C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS

1.3.1.1. Le temps d’indexation

Pour la collection 750Mo, la durée d’indexation est comprise entre1 et 32 minutes. Puis, avec la collection 1.6GB, cette durée variede 2 minutes à 1 heure. Enfin, avec la collection 2.7Go, àl'exception d'Omega (Xapian), le temps, est compris entre 5minutes et 1 heure. Omega (Xapian) a montré un comportementdifférent de celui des autres API, puisque le temps d'indexationpour la plus grande collection a été de 17 heures et 50 minutes.

Les meilleurs temps d’indexation :

Lucene

MG4J

Terrier

1.3.1.2. La taille des index

Page 12: Développement d'un moteur de recherche Lucene

19

Projet Professionnel J2EE : Développement du moteur de rechercheIFIND

C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS

Le tableau ci-dessus présente la taille de l'index créé par chacundes moteurs de recherche qui ont été en mesure d'indexer les troiscollections en un temps raisonnable. Nous pouvons observer troisgroupes: les Index dont la taille varie entre 25% -35%, un groupeutilisant 50% -55%, et le dernier groupe dont la taille de l’indexest supérieur à la taille de la collection.

25% à 30% : Lucene, MG4J

50% à 55% : Terrier

>50% : Xapian

1.3.1.3. L’utilisation des ressources matériels

Usage constant :

Page 13: Développement d'un moteur de recherche Lucene

19

Projet Professionnel J2EE : Développement du moteur de rechercheIFIND

C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS

MG4J

Usage linéaire par rapport à la taille de lacollection :

Terrier

Lucene

1.3.1.4. Le temps de recherche

Après avoir soumis l'ensemble des requêtes (1-mot et 2-mots) (chaquesérie a consisté en 100 requêtes), nous avons pu observer le tempsmoyen de recherche pour chaque collection et le pourcentage derécupération. Sur la figure ci-dessus, nous présentons unecomparaison graphique du temps moyen de recherche de chaque moteurpour la collection 2.7Go.

Les plus rapides des moteurs de recherche sont Indri, IXE, Lucene,et XMLSearch. Puis MG4J, et Zettair.

Les meilleurs temps de recherche :

Lucene

Page 14: Développement d'un moteur de recherche Lucene

19

Projet Professionnel J2EE : Développement du moteur de rechercheIFIND

C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS

MG4J

1.3.2. L’API retenue

Après les différentes études établies ci-dessus, il apparait quel’API Lucene permet l’indexation de grande collection de documentet cela en un temps très raisonnable, Lucene permet aussid’optimiser la taille de ses Index et de fait ne pas saturerl’espace de stockage disque.

L’API Lucene fournit aussi un moteur de recherche trèsperformant, qui permet de répondre à une requête utilisateur en untemps très convenable.

De plus, cette API dispose d’une communauté de développeurs etd’utilisateurs très importante, ce qui a permet à cettebibliothèque d’évoluer et de se positionner en quelques années entant que API phare de la recherche d’information.

1.4. API Lucene 3.1

1.4.1. Le principe

Page 15: Développement d'un moteur de recherche Lucene

19

Projet Professionnel J2EE : Développement du moteur de rechercheIFIND

C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS

1.4.2. Les classes d’indexationIndexWriter

C’est la classe principale d’indexation, elle permet derajouter un Document à un Index.

Constructeur IndexWriter

IndexWriter(Directory d, IndexWriterConfigconfig)

Fermeture IndexWriter

IndexWriter.close()

Ajour d’un Document

IndexWrite.addDocument(Document d)

IndexWriter.updateDocument(Term t,Document d)

Directory

Représente l'emplacement de l'index de Lucene.

FSDirectory : Stockage physique.

RAMDirectory : Stockage en mémoire

Constructeur Directory :

FSDirectory.open(String DirIndex)

Analyzer

C’est la classe qui permet d’analyser et d’extraireles mots signifiants à indexer.

Constructeur Analyzer

FrenchAnalyzer(Version MatchVersion)

Document

Page 16: Développement d'un moteur de recherche Lucene

19

Projet Professionnel J2EE : Développement du moteur de rechercheIFIND

C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS

La classe Document représente un rassemblement dechamps.

Constructeur Document:

Document()

Ajour d’un Field :

Document.add(Field f)

Field

Un Document est composé de champ (field). Chaque champ(field) correspond à une portion de donnée qui estinterrogé ou récupéré depuis l'index durant larecherche.

Constructeur Field :

Field(String name,String value,Field.Store store,Field.Index index)

1.4.3. Les classes de recherche

IndexSearcher

C’est la classe principale de la recherche, elle permetd’ouvrir un Index en lecture seule.

Constructeur IndexSearcher

IndexSearcher(Directory d)

Récupérer les documents requêtés

IndexSearcher.search (Query q, int nbResult)

Récupérer un document

IndexSearcher.doc(int idDoc)

Query

Page 17: Développement d'un moteur de recherche Lucene

19

Projet Professionnel J2EE : Développement du moteur de rechercheIFIND

C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS

La classe Query est une classe abstraite qui comprendBooleanQuery, PhraseQuery, PrefixQuery,PhrasePrefixQuery, RangeQuery, FilteredQuery, etSpanQuery

Term

Un terme est une unité basique pour la recherche,similaire à l’objet field

Constructeur Term

Term(String name, String query)

2.Atelier génie logicielle

2.1. Développement & Tests

2.2. Outils de modélisation

2.3. Management de projet

2.4. Gestionnaires de version & wiki

3.Présentation de l’application Ifind Crawler

3.1. Principe

3.2. Digrammes

Page 18: Développement d'un moteur de recherche Lucene

19

Projet Professionnel J2EE : Développement du moteur de rechercheIFIND

C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS

4.Présentation de l’application Ifind Indexer

4.1. PrincipeL’application Ifind Indexer est basée sur le framework Lucene 3.1,cette dernière permet d’indexer des documents de format différents(HTML, XML, DOC, DOCX, XLS, PDF…), et les stocker par la suitedans un répertoire.

iFind Indexer est une application de type SystemTray.

Sur un click droit de la souris, l’application affiche le menuprincipal :

Page 19: Développement d'un moteur de recherche Lucene

19

Projet Professionnel J2EE : Développement du moteur de rechercheIFIND

C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS

-Start indexing service : Permet de lancer le processusd’indexation, en surveillant tout ajout de fichiers au répertoirede données à indexer, défini par l’utilisateur.

-Stop indexing service : permet d’arrêter le service d’indexationsi ce dernier est lancé.

-Configuration : permet d’afficher la fenêtre de paramètrage del’application, cette fenêtre est composée de trois onglets(Path,PageRank,Dmoz)

Page 20: Développement d'un moteur de recherche Lucene

19

Projet Professionnel J2EE : Développement du moteur de rechercheIFIND

C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS

-Path : Cet onglet Permet à l’utilisateur de spécifier les cheminsd’accès au données et de suvegarde.

-Datas directory : Est le répértoire que l’application vasurveiller, afin d’indexer tous les nouveaux fichiers crées.

-Indexes destination : Est le chemin de suvegarde des index.

-PageRank : Cet onglet permet de definir l’affectation duPageRank, à une page html, il existe de strategie differente :

-Google PageRank : Cette methodologie ce base sur les serveursGoogle pour récupérér le PageRank d’une page, ainsi le PageRankd’une page lui est attribué lors de la création d’index.

-iFind PageRank : Cette option permet de calculé le PageRank d’unepage en se basant sur l’algorithme du PageRank suivant :

Page 21: Développement d'un moteur de recherche Lucene

19

Projet Professionnel J2EE : Développement du moteur de rechercheIFIND

C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS

PR(A) = (1-d) + d (PR(T1)/C(T1) + ... + PR(Tn)/C(Tn))

- PR(A) le PageRank de la page A

- PR(Tn)le PageRank de la page Tn

- C(Tn) le nombre de liens émis sur la page Tn

- d tous les « votes » sont additionnés, mais pour en limiterl’importance, le total est multiplié par ce coefficientd’amortissement (0.85)

- 1 - d Un petit peu de « magie mathématique » qui permet degarantir que la moyenne des PageRank de l’ensemble des pages duWeb sera de 1.

Par ailleurs le PageRank iFind affecté à une page html, ne peutêtre calculé qu’à la fin du processus d’indexation, il sera lancévia le menu pricipale de l’application, par le bouton IfindDance : Calculate PageRank.

-Dmoz : Cet onglet permet de parser un fichier .rdf de type ODP(Open Directory Project), afin de l’intégrer dans une base dedonnées Mysql, ce qui simplifie l’exploitation des données qu’ilcontient.

-Test connection : Ce bouton permet de tester la connexion auserveur de base de données spécifié.

-Extract to Mysql : Si la connexion est établie au serveur de basede données, et si le fichier rdf spécifié dans le chemin Dmz Filename est valide, l’extraction de données débute.

Page 22: Développement d'un moteur de recherche Lucene

19

Projet Professionnel J2EE : Développement du moteur de rechercheIFIND

C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS

-Le projet ODP, est un projet open source qui propose une basedocumentaire complète sur la déscription des sites web.

-L’application recherche la meta balise « description » dans lapage à indexer, si cette dernière est inexisatante une requête estalors envoyé à la base de données afin de récupérer ce champs.

4.2. Architecture générale

4.3. Digramme des classes

4.3.1. Package org.esgi.ifind.indexer

w atcher

pagerankdm oz

configuration

indexergui

Configuration D ire ctory W a tche r

savePathProperties()setIfindPr(in ifindpr : string)getIfindPr():stringsetG ooglePr(in googlepr : string)getG ooglePr():stringsetSqlPassword(in password : string)getSqlPassword():stringsetSqlU sernam e(in userNam e : string)getSqlU sernam e():stringsetSqlH ost(in hostNam e : string)getSqlH ost():stringsetD m ozPath(in dm ozFilenam e : string)getD m ozPath():stringsetIndexPath(in indexPath : string)getIndexPath():stringsetD ataPath(in dataPath : string)getD ataPath():stringgetInstance():C onfigurationC onfiguration()PR O PER TIES_D IR : string= "config/config.properties" historyPath : string= "config/history.ser"

isR un : booleanD irectoryW atcher(in fileR oot : File)run()watch(in file : File):booleanserializeH istoryM ap()getH istoryM ap():Long[1..*] onChange( in fi le : F ile )

Page 23: Développement d'un moteur de recherche Lucene

19

Projet Professionnel J2EE : Développement du moteur de rechercheIFIND

C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS

4.3.1.1. Package org.esgi.ifind.indexer.gui

controller

view

indexer

System TrayViewSystem TrayView()init():booleanupdateG ui(in isStarted : boolean)getIndexerService():IndexerServiceinitIndexerService():IndexerServicegetIfindD anceItem ():M enuItem

indexerService

1

1

StopClickControllerStartClickController M onitorClickController

IfindD anceClickControllerExitClickControllerConfigClickController

M onitoringView

IndexerService

Page 24: Développement d'un moteur de recherche Lucene

19

Projet Professionnel J2EE : Développement du moteur de rechercheIFIND

C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS

4.3.1.1.1. Package org.esgi.ifind.indexer.gui.controller

view

1

1

parent

1

1

parent

1

1

parent

1

1

parent

1

1

parent

0..1

*

configurationV iew

instance

0..1

*

M onitorClickController

StartClickController

StopClickController

System TrayView

ExitClickController

ConfigClickController

TestSqlClickController

Subm itPRClickController

Subm itPathClickController

Subm itD m ozClickController

ParseD m ozClickController

ConfigurationView

CancelPRClickController

CancelPathClickController

CancelD m ozClickController

Brow serFileClickController

Brow serClickController

M onitorC lickC ontroller(in parent : System TrayView)actionPerform ed(in arg0 : ActionEvent)

StartC lickC ontroller(in parent : System TrayView)actionPerform ed(in arg0 : ActionEvent)

StopC lickC ontroller(in parent : System TrayView)actionPerform ed(in arg0 : ActionEvent)

ExitC lickC ontroller(in parent : System TrayView)actionPerform ed(in arg0 : ActionEvent)

C onfigC lickC ontroller(in parent : System TrayView)actionPerform ed(in arg0 : ActionEvent)

actionPerform ed(in e : ActionEvent)TestSqlC lickC ontroller(in parent : D m ozTabView)

actionPerform ed(in e : ActionEvent)Subm itPR C lickC ontroller(in parent : PageR ankTabView)

actionPerform ed(in e : ActionEvent)Subm itPathC lickC ontroller(in parent : PathTabView)

actionPerform ed(in e : ActionEvent)Subm itD m ozC lickC ontroller(in parent : D m ozTabView)

actionPerform ed(in e : ActionEvent)ParseD m ozC lickC ontroller(in parent : D m ozTabView)

actionPerform ed(in e : ActionEvent)C ancelPR C lickC ontroller(in parent : PageR ankTabView)

actionPerform ed(in e : ActionEvent)C ancelPathC lickC ontroller(in parent : PathTabView)

actionPerform ed(in e : ActionEvent)C ancelD m ozC lickC ontroller(in parent : D m ozTabView)

actionPerform ed(in e : ActionEvent)BrowserFileC lickC ontroller(in parent : D m ozTabView)

actionPerform ed(in e : ActionEvent)BrowserC lickC ontroller(in parent : PathTabView, in id : integer)id : integer

0..1*

m onitoringV iew

*

0..1

instance

parent*

0..1

parent

*

0..1

parent*

0..1

parent *0..1

parent* 0..1

parent*

0..1

parent*

0..1

parent

*

0..1

parent*

0..1

parent* 0..1

M onitoringView

PageRankTabView

D m ozTabView

PathTabView

Page 25: Développement d'un moteur de recherche Lucene

19

Projet Professionnel J2EE : Développement du moteur de rechercheIFIND

C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS

4.3.1.1.2. Package org.esgi.ifind.indexer.gui.view

instance0..1

*

instance0..1

*

pathTabView

*

0..1

pageRankTabView

*

0..1

dm ozTabView

*

0..1

ConfigurationView

PageRankTabViewD m ozTabViewPathTabView

M onitoringView

getInstance():C onfigurationViewC onfigurationView()serialVersionU ID : integer= 1L

razTextPath()saveTextPath()PageR ankTabView()serialVersionU ID : integer= 1L

getBtnParseR df():JButtonraz()save()getTextSqlPassword():stringgetTextSqlU sernam e():stringgetTextSqlH ostNam e():stringgetTextD m ozPathNam e():stringsetTextSqlPassword(in txtPassword : string)setTextSqlU sernam e(in txtU sernam e : string)setTextSqlH ostNam e(in txtH ost : string)setTextD m ozPathNam e(in txtPath : string)D m ozTabView()serialVersionU ID : integer= 1L

razTextPath()saveTextPath()setTextD ataPathNam e(in txtPath : string)setTextIndexerPathNam e(in txtPath : string)PathTabView()serialVersionU ID : integer= 1L

setTextAreaM onitoring(in s : string)getInstance():M onitoringViewM onitoringView()serialVersionU ID : integer= 1L

Page 26: Développement d'un moteur de recherche Lucene

19

Projet Professionnel J2EE : Développement du moteur de rechercheIFIND

C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS

4.3.1.2. Package org.esgi.ifind.indexr.indexer

parser

0..1*item

0..1

*

indexer

dm oz

configuration

pagerank

gui

w atcher

Thread

Item s

Indexer

IndexerService

indexData(in f : File, in url : string, in extension : string, in pageRank : real):booleancreateIndexW riter(in extension : string):booleanIndexer()doc : undefineddirectory : undefinedconfW riter : undefinedfrAnalyer : undefinedwriter : undefinedindexPath : stringserialVersionUID : integer= 1L

serialVersionU ID : integer=1LdataPath : stringisR un : boolean= trueIndexerService()run()runIndexer(in file : File)stopIndexer()

nam e : stringurl : stringtitle : stringbody : stringdescription : stringkeywords : stringauthor : stringItem s()getAuthor():stringsetAuthor(in author : string)getKeywords():stringsetKeywords(in keywords : string)getNam e():stringsetNam e(in nam e : string)setU rl(in url : string)setTitle(in title : string)setBody(in body : string)setD escription(in description : string)getUrl():stringgetTitle():stringgetBody():stringgetDescription():string

iFindPR

*

0..1

TikaParserD m ozService

Configuration

IfindPageRank

G ooglePageRank

System TrayView

D ir e cto r y W atch e r

Page 27: Développement d'un moteur de recherche Lucene

19

Projet Professionnel J2EE : Développement du moteur de rechercheIFIND

C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS

4.3.1.2.1. Package org.esgi.ifind.indexer.indexer.parser

*

0..1instanceTikaParser

C ontentHandler< < inte rface> >

TikaParser()getInstance():TikaParsergetItem s(in f : File):Item s

4.3.1.3. Package org.esgi.ifind.indexer.pagerank

gui

indexer

0..1*

prService

*

0..1instance

0..1*

pageRank

ThreadG ooglePageRank

IfindPageRank

PageRankService

getPR (in url : string):integergetInstance():G ooglePageR ankG ooglePageR ank()

getR everseValues(in reverseKey : string, in m ap : [1..*] ArrayList):string[1..*] setInboundM ap(in m ap : [1..*] ArrayList)getO utboundLinks(in pageId : string):string[1..*] getInboundLinks(in pageId : string):string[1..*] generateParam List(in pageId : string):booleangetM ultiFactor(in sourceId : string, in linkId : string):realgenerateM atrix():real[1..*] rank(in pageId : string):realrankU rls():D ouble[1..*] setO utboundM ap(in url : string, in file : File)getO utboundM ap():ArrayList[1..*] serializeO utboundM ap()IfindPageR ank()param s[1..*] : string= new ArrayList< String> ()outboundPath : string= "config/outbound.ser"D AM PING _FAC TO R : real= 0.85

PageR ankService(in parent : System TrayView)run()

indexer

*

0 ..1

parent

*

0 ..1

System TrayView

Indexer

Page 28: Développement d'un moteur de recherche Lucene

19

Projet Professionnel J2EE : Développement du moteur de rechercheIFIND

C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS

4.3.1.4. Package org.esgi.ifind.indexer.dmoz

0..1

*

ifindSearcherD ao*

0..1instance

*

0..1instance

configuration

rdf

D m ozService

D m ozD ao

D m ozService()getInstance():D m ozServicegetD escriptionFrom D m oz(in url : string):string

hostnam e : stringusernam e : stringpassword : stringD m ozD ao()getInstance():D m ozD aogetD escriptionFrom D m oz(in url : string):stringgetC onnection():C onnection

Configuration

D m ozContentH andler

4.3.1.4.1. Package org.esgi.ifind.indexer.rdf

dm ozC ontentH andler

0 ..1

D m ozSaxParser

D m ozContentH andler

Thread

D m ozD ao

buffer : stringurl : stringtitle : stringdescription : stringtopic : stringSQ L_INSER T : string="INSER T INTO dm oz(url, title, description, topic) VALU ES(?,?,?,?)"Dm ozC ontentHandler()setD ocum entLocator(in value : Locator)startDocum ent()endD ocum ent()startPrefixM apping(in prefix : string, in U R I : string)endPrefixM apping(in prefix : string)startElem ent(in nam eSpaceU R I : string, in localNam e : string, in rawNam e : string, in attributs : Attributes)endElem ent(in nam eSpaceU R I : string, in localNam e : string, in rawNam e : string)characters(in ch : [1..*] char, in start : integer, in end : integer)ignorableW hitespace(in ch : [1..*] char, in start : integer, in end : integer)processingInstruction(in target : string, in data : string)skippedEntity(in arg0 : string)setLocator(in locator : Locator)getLocator():LocatorsetC onnection(in connection : C onnection)getC onnection():C onnection

uri : stringD m ozSaxParser(in uri : string, in parentButton : JButton)run()

Page 29: Développement d'un moteur de recherche Lucene

19

Projet Professionnel J2EE : Développement du moteur de rechercheIFIND

C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS

5.Présentation de l’application IfindSearcherL’interface de recherche, « IfindSearcher »  représente la partieweb de la plateforme. C’est grâce à celle-ci que l’utilisateurpourra bénéficier des donnés indexées et classées en fonction de sarequête.

5.1. PrincipeL’utilisateur dispose d’une interface simple lui permettant desaisir les mots clés à rechercher selon la rubrique :

Ifind Web Search : affiche les données sous forme delien/description de chaque page trouvée, paginées etclassées par ordre de pertinence

Ifind Pictures : affiche un aperçu de chaque image trouvée,et offre la possibilité de rediriger l’utilisateurdirectement sur l’image grâce à son lien hypertexte

Ifind Actuality : permet à l’utilisateur de récupérer lesinfos à la une

5.2. ArchitectureVoici l’architecture de l’application. Dans un premier temps voicil’architecture globale, puis une partie comprenant les diagrammes declasses et séquence afin de mieux comprendre le fonctionnement et laconception de l’interface web

Page 30: Développement d'un moteur de recherche Lucene

19

Projet Professionnel J2EE : Développement du moteur de rechercheIFIND

C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS

5.2.1. Architecture générale

Page 31: Développement d'un moteur de recherche Lucene

19

Projet Professionnel J2EE : Développement du moteur de rechercheIFIND

C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS

5.2.2. Diagramme de classe

Page 32: Développement d'un moteur de recherche Lucene

19

Projet Professionnel J2EE : Développement du moteur de rechercheIFIND

C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS

5.2.3. Digramme de séquenceAfin de mieux comprendre l’enchainement des interactions, voici lediagramme de séquence depuis la requête d’un utilisateur jusqu’à laréception des résultats

Page 33: Développement d'un moteur de recherche Lucene

19

Projet Professionnel J2EE : Développement du moteur de rechercheIFIND

C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS

6.Présentation de l’interface de recherche IFINDVoici maintenant différentes captures d’écran des vues principalesde la partie web d’Ifind. Ces captures illustrent les différentesfonctionnalités de l’interface web. Voici donc dans un premier tempsla page d’accueil de l’application :

L’interface dispose d’une zone de texte dans laquelle l’utilisateurva pouvoir saisir les mots clés de sa requête. Voici maintenant lerésultat de la requête d’un utilisateurs qui a tapé comme mot clé lemot Société :

Page 34: Développement d'un moteur de recherche Lucene

19

Projet Professionnel J2EE : Développement du moteur de rechercheIFIND

C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS

On peut donc voir ici les différents résultats paginés et classéspar ordre de pertinence. On peut apercevoir aussi des méta-moteurs(Google, Bing et Yahoo), qui permettent de lancer la requête sur cesmêmes moteurs afin d’obtenir et de comparer les résultats.

Voici maintenant le résultat d’une requête dans la rubrique image :

Voici le résultat de la requête « img » de l’utilisateur. Lesaperçus des images sont affichés. Voici maintenant la rubrique« actualité » qui affiche le fil de l’actualité à la une :

Page 35: Développement d'un moteur de recherche Lucene

19

Projet Professionnel J2EE : Développement du moteur de rechercheIFIND

C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS

Cette rubrique contient aussi des widgets qui permettent de serendre sur un site d’actualité sportive, mais aussi sur la page d’un

journal sur l’économie :

Page 36: Développement d'un moteur de recherche Lucene

19

Projet Professionnel J2EE : Développement du moteur de rechercheIFIND

C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS

7.Tableau des chargesNom de la tâche Durée Début Fin

Prédécesseurs

Noms ressources

L'état de l'art destechnologies et algorithmes

9jours

Mar03/05/11

Ven13/05/11 H.LAANAIT

Etudes Algorithmes IR 1 jour Mar03/05/11

Mar03/05/11 H.LAANAIT

Lucene 1 jour Mer04/05/11

Mer04/05/11 2 H.LAANAIT

MG4J 1 jour Jeu05/05/11

Jeu05/05/11 3 H.LAANAIT

Terrier 1 jour Ven06/05/11

Ven06/05/11 4 H.LAANAIT

Xapian 4jours

Lun09/05/11

Ven20/05/11 5 H.LAANAIT

Etude approfondie de Lucene 4jours

Mar10/05/11

Ven13/05/11 6 H.LAANAIT

Choix de l'atelier de génielogiciel

6jours

Mar03/05/11

Mar10/05/11 D.ZAHAL

Choix des outils de gestionde projet

2jours

Mar03/05/11

Mer04/05/11 D.ZAHAL

Choix des outils demodélisation UML

2jours

Jeu05/05/11

Ven06/05/11 9 D.ZAHAL

Choix des outils degestionnaires de versions

2jours

Lun09/05/11

Mar10/05/11 10 D.ZAHAL

Architecture logicielle dusystème à concevoir

9jours

Mar17/05/11

Ven27/05/11 1;8 C.FALCOU

Analyse technique 3jours

Mar17/05/11

Jeu19/05/11 C.FALCOU

Diagrammes de classes 1 jour Ven20/05/11

Ven20/05/11 13 C.FALCOU

Diagrammes de séquences 1 jour Lun23/05/11

Lun23/05/11 14 C.FALCOU

Intégration du moteur derecherche dans l'architecture

4jours

Mar24/05/11

Ven27/05/11 15 C.FALCOU

Conception et développementIfind Indexer

15jours

Mer01/06/11

Mar21/06/11 12 H.LAANAIT

Analyse technique 3jours

Mer01/06/11

Ven03/06/11 H.LAANAIT

Implémentation du moteurd'indexation

3jours

Lun06/06/11

Mer08/06/11 18 H.LAANAIT

Implémentation des parsers(HTML,PDF,RTF,WORD)

3jours

Jeu09/06/11

Lun13/06/11 19 H.LAANAIT

Implémentation du PageRank 2jours

Mar14/06/11

Mer15/06/11 20 H.LAANAIT

Développement del'interface graphique

2jours

Jeu16/06/11

Ven17/06/11 21 H.LAANAIT

Développement de lapolitique de communication(Ifind Crawler & IfindIndexer) DirectoryWatcher

2jours

Lun20/06/11

Mar21/06/11 22 H.LAANAIT

Finalisation desdéveloppements

2jours

Mer15/06/11

Jeu16/06/11 23 H.LAANAIT

Page 37: Développement d'un moteur de recherche Lucene

19

Projet Professionnel J2EE : Développement du moteur de rechercheIFIND

C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS

Conception et développementIfind SearchEngine

15jours

Mer01/06/11

Mar21/06/11 12 C.FALCOU

Analyse technique 4jours

Mer01/06/11

Lun06/06/11 C.FALCOU

Implémentation du moteur derecherche

4jours

Mar07/06/11

Ven10/06/11 26;19 C.FALCOU

Implémentation du FrameworkMVC

3jours

Lun13/06/11

Mer15/06/11 27 C.FALCOU

Développement del'interface graphique

3jours

Jeu16/06/11

Lun20/06/11 28 C.FALCOU

Développement Css + js 1 jour Mar21/06/11

Mar21/06/11 29 C.FALCOU

Finalisation desdéveloppements

2jours

Mer15/06/11

Jeu16/06/11 30 C.FALCOU

Conception et développementIfind SearchEngine

12jours

Mer01/06/11

Jeu16/06/11 D.ZAHAL

Analyse de l'existant 2jours

Mer01/06/11

Jeu02/06/11 D.ZAHAL

Réingénierie de l'existant 4jours

Ven03/06/11

Mer08/06/11 33 D.ZAHAL

Implémentation du parsingdu fichier rdf

2jours

Jeu09/06/11

Ven10/06/11 34 D.ZAHAL

Implémentation del'intégration des fichiers rdfdans une base MySql

2jours

Lun13/06/11

Mar14/06/11 35 D.ZAHAL

Finalisation desdéveloppements

2jours

Mer15/06/11

Jeu16/06/11 36 D.ZAHAL

Test & Validation 1 jour Jeu02/06/11

Jeu02/06/11

17;25;32

C.FALCOU;H.LAANAIT;D.ZAHAL

Documentation 2jours

Mar05/07/11

Mer06/07/11 38 C.FALCOU;H.LAANAIT

;D.ZAHAL

8.Diagramme de GANT

8.1. Decoupage par lot

Page 38: Développement d'un moteur de recherche Lucene

19

Projet Professionnel J2EE : Développement du moteur de rechercheIFIND

C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS

8.2. Decoupage par sous lot

8.2.1. Sous lot HLT.1 – Etat de l’art des technologies et algorithmescandidats

8.2.2. Sous Lot DZL.1 D.ZAHAL – Choix de l’atelier de génie logiciel

8.2.3. Sous lot CFU.1 C.FALCOU – Architecture logicielle du système àconcevoir

Page 39: Développement d'un moteur de recherche Lucene

19

Projet Professionnel J2EE : Développement du moteur de rechercheIFIND

C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS

8.2.4. Sous lot HLT.2 H.LAANAIT – Conception et développement IfindIndexer

8.2.5. Sous lot CFU.2 C.FALCOU – Conception et développement IfindSearchEngine

8.2.6. Sous lot DZL.2 D.ZAHAL – Réingénierie et développement IfindCrawler

Page 40: Développement d'un moteur de recherche Lucene

19

Projet Professionnel J2EE : Développement du moteur de rechercheIFIND

C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS

8.2.7. Lot Test_Doc C.FALCOU – H.LAANAIT – D.ZAHAL – Test & Validation& Documentation