Lucene
829490
31820895
2008-07-23T14:50:52Z
Manu1400
71277
lien(s) interne(s)
{{Infobox Logiciel
| nom = Lucene
| image = [[Image:Lucene_logo_green_300.png|160px|Lucene logo]]
| description = Moteur de recherche textuel
| développeur = [[Apache Software Foundation|Fondation Apache]]
| dernière version = [http://www.apache.org/dyn/closer.cgi/lucene/java/ 2.1.0]
| date de dernière version = {{Date|26|février|2007}}
| environnement = [[Microsoft Windows|Windows]], [[Linux]]
| type = [[Moteur de recherche]]
| licence = [[Licence Apache]]
| site web = [http://lucene.apache.org/ http://lucene.apache.org/]
}}
'''Lucene''' est un [[moteur de recherche]] [[logiciel libre|libre]] écrit en [[Java (langage)|Java]] qui permet d'indexer et de rechercher du texte. C'est un projet [[open source]] de la [[Apache Software Foundation|fondation Apache]] mis à disposition sous [[licence Apache]]. Il est également disponible pour les langages [[Ruby]], [[Perl (langage)|Perl]], [[C++]], [[PHP]].
== Historique ==
Lucene est d'abord mis en téléchargement par Doug Cutting sur le site [[SourceForge]] en mars 2000. Il est alors publié sous [[licence publique générale limitée GNU]]<ref>La [http://sourceforge.net/projects/lucene/ page de Lucene] sur SourceForge</ref>. L'annonce de son transfert vers [[Apache Jakarta]] est publiée en octobre 2001.
Le projet Lucene vient du livre ''Lucene in Action'' (Lucene en action) publié en décembre [[2004]]. Il est écrit conjointement par Erik Hatcher, un des responsables des projets open source [[Apache Ant|Ant]], Lucene et [[Apache Tapestry|Tapestry]], et par Otis Gospodnetic, un membre actif du projet Apache Jakarta.
Le 14 février 2005, Lucene effectue sa migration vers le projet Apache Jakarta. La [[Repository|base de code source]] est convertie au [[Subversion (logiciel)|contrôleur de version SVN]].
Le lundi 12 décembre 2005, Grant Ingersol présente un cas d'étude en Java à l'ApacheCon US sur l'utilisation avancée des composants de Lucene<ref>[http://www.apachecon.com/2005/US/html/sessions.html/e=MjAwNS9VUw#1400 La session présentée à l'ApacheCon]</ref> en donnant notamment des détails techniques sur le traitement du [[langage naturel]].
== Propulsé par Apache Lucene ==
Ci dessous, quelques sites utilisant Lucene<ref>[http://wiki.apache.org/jakarta-lucene/PoweredBy Sites utilisant Lucene]</ref> (par ordre alphabétique) :
===OpenSolaris===
Chandan, ingénieur sécurité chez Sun<ref>[http://sunsolve.sun.com/pub-cgi/show.pl?target=security/sec source]</ref>, a annoncé le 15 juin 2005 sur son blog <ref>[http://blogs.sun.com/roller/page/chandan/?anchor=opensolaris_source_browser chandanlog(3C)]</ref> qu'il avait écrit un moteur de recherche simple en Java, OpenGrok et que « Lucene (avait) été choisi pour être la bibliothèque logicielle servant de noyau de recherche et d'indexation pour le code source, après avoir pris en considération toutes une variété de moteur de recherche et d'outils ». Complété par Exuberant Ctags qui serait utilisé pour extraire les définitions des fichiers sources. Ceci, afin de gagner du temps et d'explorer les millions de lignes des codes sources d'[[OpenSolaris]].
===Wikipédia===
Jusqu'à avril 2004, la fonction recherche de Wikipédia était indisponible durant les heures de pointe. Dans ces cas-là, il était recommandé d'utiliser le moteur de recherche externe [[Yahoo!]] ou [[Google]].
Cependant, depuis l'annonce de [[Brion Vibber]] sur la liste de diffusion <ref>[http://mail.wikipedia.org/mailman/listinfo/wikitech-l Wikitech]</ref>, il en est tout autrement <ref>[http://mail.wikipedia.org/pipermail/wikitech-l/2005-April/028646.html]</ref>. Cette annonce a été également rapportée par [[Michael Snow]] environ une semaine plus tard dans le Wikipedia Signpost (équivalent anglais du Wikimag) <ref>[[:en:Wikipedia:Wikipedia Signpost/2005-04-18/Lucene search|Wikipedia:Wikipedia Signpost/2005-04-18/Lucene search]]</ref>.
Kate Kate a écrit le programme en décembre, mais celui-ci a été mis aux oubliettes à cause de la [[machine virtuelle Java]] qui n'était pas encore un [[logiciel libre]]. Le programme a donc été plus tard totalement réécrit en utilisant [[GCJ]].
== Fonctionnement de Lucene ==
=== [[Indexation]] ===
Jusqu'à l'explosion de l'[[internet]], la [[Classification décimale de Dewey]] était très efficace pour catégoriser des objets dans une bibliothèque. Cependant, comme la somme des données collectée est devenue trop vaste, il faut maintenant utiliser des moyens alternatifs et plus dynamiques pour trouver de l'information.
Au cœur de tous les [[moteur de recherche|moteurs de recherche]] se trouve le concept de l'[[indexation]] : en traitant une seule fois les données brutes et en leur donnant de multiples liens hautement efficients, on accélère l'opération de recherche. Le concept est assez analogue à l'[[index terminologique]] que l'on trouve généralement à la fin d'un livre, qui permet de trouver rapidement les pages qui traitent d'un sujet donné.
Si l'on a besoin de couvrir un large champ de fichiers ou de trouver une chaîne de caractères précise dans un seul fichier, il ne faut pas scanner séquentiellement chaque fichier pour la phrase donnée. Car, plus le nombre de fichiers est grand, plus longue est la [[recherche d'information]]. Il vaut mieux établir un [[index (base de données)|index]] des textes dans un format qui permet la recherche rapide, ce qui évite la méthode séquentielle. Ce processus est appelé ''[[indexation]]''.
=== Recherche ===
La ''recherche'' est l'action de regarder des mots dans un index pour trouver des [[Référencement|références]] à des documents lorsqu'ils apparaissent. La qualité d'une recherche est évaluée par le [[Optimisation pour les moteurs de recherche|positionnement]] et la pertinence des résultats. Cependant, d'autres facteurs entrent en compte dans une recherche. La rapidité est un facteur déterminant pour traiter une vaste quantité d'informations. De même, pouvoir supporter des requêtes simples ou complexes, des interrogations de phrases, des caractères, les résultats de positionnement et de [[Algorithme de tri|tri]] sont aussi importants qu'une syntaxe facile à prendre en main pour entrer ces requêtes.
== Classes ==
Les sections suivantes fournissent une brève introduction aux principales [[Classe (informatique)|classes]] qui servent à construire ce moteur de recherche.
=== Classes d'indexation ===
* '''IndexWriter''' - La classe IndexWriter est le composant central du processus d'indexation. Cette classe crée un nouvel index et ajoute des documents à un index existant. On peut se la représenter comme un objet par lequel on peut écrire dans l'index mais qui ne permet pas de le lire ou de le rechercher.
* '''Directory''' - La classe Directory représente l'emplacement de l'index de Lucene. ''IndexWriter'' utilise une des implémentations de Directory, ''FSDirectory'', pour créer son index dans un répertoire dans le [[Système de fichiers]]. Une autre implémentation, ''RAMDirectory'', prend toutes ses données en mémoire. Cela peut être utile pour de plus petits indices qui peuvent être pleinement chargés en mémoire et peuvent être détruits sur la fin d'une application.
* '''Analyzer''' - Avant que le texte soit dans l'index, il passe par l'Analyser. Celui-ci est une [[Classe (informatique)#Classe abstraite|classe abstraite]] qui est utilisée pour extraire les mots importants pour l'index et supprime le reste. Cette classe tient une part importante dans Lucene et peut être utilisée pour faire bien plus qu'un simple filtre d'entrée.
* '''Document''' - La classe Document représente un rassemblement de champs. Les champs d'un document représentent le document ou les [[métadonnée]]s associées avec ce document. La source originelle (comme des enregistrements d'une base de données, un document Word, un chapitre d'un livre, etc.) est hors de propos pour Lucene. Les métadonnées comme l'auteur, le titre, le sujet, la date, etc. sont indexées et stockées séparément comme des champs d'un document.
* '''Field''' - Chaque document est un index contenant un ou plusieurs champs, inséré dans une classe intitulé ''Field''. Chaque champ (''field'') correspond à une portion de donnée qui est interrogé ou récupéré depuis l'index durant la recherche.
=== Classes de recherche ===
* '''IndexSearcher''' - La classe ''IndexSearcher'' est à la recherche ce que ''IndexWriter'' est à l'indexation. On peut se la représenter comme une classe qui ouvre un index en mode lecture seule.
* '''Term''' - Un terme est une unité basique pour la recherche, similaire à l'[[Programmation orientée objet|objet]] ''field''. Il est une chaîne de caractère : le nom du champ et sa valeur. Notez que les termes employés sont aussi inclus dans le processus d'indexation.
* '''Query''' - La classe ''Query'' est une classe abstraite qui comprend ''BooleanQuery'', ''PhraseQuery'', ''PrefixQuery'', ''PhrasePrefixQuery'', ''RangeQuery'', ''FilteredQuery'', et ''SpanQuery''.
* '''TermQuery''' - C'est la méthode la plus basique d'interrogation de Lucene. Elle est utilisée pour égaliser les documents qui contiennent des champs avec des valeurs spécifiques.
* '''QueryParser''' - La classe QueryParser est utilisée pour générer un [[Décomposition analytique|décompositeur analytique]] qui peut chercher à travers un index.
* '''Hits''' - La classe Hits est un simple conteneur d'index pour classer les résultats de recherche de documents qui apparaissent pour une interrogation donnée. Pour des raisons de performances, les exemples de classement ne chargent pas depuis l'index tous les documents pour une requête donnée, mais seulement une partie d'entre eux.
==Ressources==
===Outils===
*Luke ([http://www.getopt.org/luke/ Lucene Index Toolbox]) est un outil de diagnostic et de développement pratique qui accède aux index de Lucene déjà existants et permet de montrer et modifier leur contenu de plusieurs façons. Luke est couvert par la Licence Apache sauf pour une section de son code.
*LIMO ([http://limo.sourceforge.net/ Lucene Index Monitor]) donne des informations de bases sur les indexes utilisés par le moteur de recherche Lucene. C'est un projet de SourceForge.
=== Sous-projets ===
*[[Nutch]] : moteur de recherche open source.
*[[Hadoop]] : Système de Fichiers HaDoop (HDFS) et implémentation de [[MapReduce]].
*[[Lucene4c]] : implémentation du moteur de recherche Lucene.
*[[Apache Lucy]] : convergence des sous-projets [http://www.rectangular.com/kinosearch/ KinoSearch] et [[Ferret (moteur de recherche)|Ferret]], tous deux écrits en C.
*[[LIUS]] : interface de recherche pour le moteur Lucene.
*[[Solr]] : [[Webapp]] java d'indexation et de recherche basée sur Lucene. [http://lucene.apache.org/solr/ Solr]
*[[sfLucene]] : Plugin Lucene pour [[symfony]]
=== Implémentation ===
Lucene a été porté ou est en train d'être porté sur différents langages de programmation autre que le Java :
* [[Microsoft .NET|.NET]] ([http://sourceforge.net/projects/nlucene/ NLucene], [http://incubator.apache.org/lucene.net/ Lucene.Net])
* [[C (langage)|C]] ([http://incubator.apache.org/lucene4c/ Lucene4c])
* [[C++]] ([http://sourceforge.net/projects/clucene/ CLucene])
* [[Delphi (langage)|Delphi]] ([http://mutis.sourceforge.net/ MUTIS])
* [[Perl (langage)|Perl]] ([http://search.cpan.org/dist/Plucene/ Plucene])
* [[Python (langage)|Python]] ([http://pylucene.osafoundation.org/ Pylucene])
* [[Ruby]] ([[Ferret (moteur de recherche)|Ferret]])
* [[Common Lisp]] ([http://projects.heavymeta.org/montezuma/ Montezuma])
* [[PHP: Hypertext Preprocessor|PHP]] ([http://framework.zend.com/ Zend Framework] et [http://www.symfony-project.com symfony] : sfLucene)
== Notes et références ==
<references />
== Voir aussi ==
=== Bibliographie ===
*"''Introduction to Apache Lucene: Construction of Java Open Source Full Text Retrieval Systems''" by Koshi Sekiguti ; Gijutsu-Hyohron Co, Ltd; (ISBN 4774127809)
*"''Lucene In Action''" par Erik Hatcher et Otis Gospodnetić; Manning Publications; décembre 2004; (ISBN 1932394281){{en}}[http://lucenebook.com/]
*Manfred Hardt, Dr. Fabian Theis: "''Suchmaschinen entwickeln mit Apache Lucene''"; Software & Support Verlag, Francfort-sur-le-Main, Allemagne; septembre 2004; (ISBN 3935042450)
=== Liens externes ===
* {{en}} [http://lucene.apache.org/ Site officiel]
* {{en}} [http://wiki.apache.org/jakarta-lucene/ Le Wiki de Jakarta Lucene]
* {{en}} [http://lucene.apache.org/java/docs/index.html Documentation d'Apache Lucene]
[[Catégorie:Moteur de recherche]]
[[Catégorie:Java]]
[[Catégorie:Apache Software Foundation|Lucene]]
[[Catégorie:Logiciel libre]]
[[de:Lucene]]
[[en:Lucene]]
[[es:Lucene]]
[[it:Lucene]]
[[ja:Lucene]]
[[nl:Lucene]]
[[pt:Apache Lucene]]
[[ru:Lucene]]
[[th:ลูซีน]]
[[vi:Lucene]]
[[zh:Lucene]]