Choses à faire

24h dans une journée, et tant de choses à faire !

Lucene, Scala et Spring

publié le 19 novembre 2009 par Killian Ebel

Apache Lucene est un moteur de recherche « full-text » à haute performance, écrit en Java, mais disponible pour d’autres plateformes comme Ruby, Perl, C++ et PHP. Utilisé par des applications critiques (Wikipedia pour ne citer qu’eux !), son efficacité n’est plus à prouver. Scala quant à lui est un langage moderne, statiquement typé, à mi-chemin entre l’orienté objet et le fonctionnel, qui compilé en bytecode Java et exécuté sur une JVM s’avère tout aussi performant que son grand frère.

Il vous faudra premièrement télécharger les sources du projet.

L’objectif de ce tutoriel est d’implémenter un petit moteur de recherche Lucene en Scala, en joignant les deux bouts grâce à Spring. Etant débutant en Scala (j’étais jusqu’à présent plutôt du côté Groovy de la force), j’espère en avoir tiré tous les avantages dans cet exemple. Si certaines parties peuvent être écrites de façon plus fonctionnelle et moins Javaesque, n’hésitez pas à laisser un commentaire.

Les sources sont normalement assez commentées (en anglais) pour être compréhensibles ; il n’y a de toute façon que trois fichiers :

  • pom.xml qui est le fichier « projet » pour Maven ;
  • applicationContext.xml, le fichier de configuration Spring ;
  • Main.scala, le fichier où sont rassemblées toutes les sources pour simplifier la compréhension.

Compilation

Pour compiler le projet, utilisez la commande :

mvn compile

Toutes les dépendances (JUnit, Spring, Lucene, Scala) seront téléchargées automatiquement si vous ne possédez par encore les bonnes versions.

Execution

Pour l’exécuter, vous pouvez utiliser :

mvn exec:java -Dexec.mainClass="fr.chosesafaire.lucene.Main"

Ou le lancer avec un argument (le mot clé recherché, lucene par défaut) :

mvn exec:java -Dexec.mainClass="fr.chosesafaire.lucene.Main" -Dexec.args="computer"

La sortie devrait ressembler à ceci :

Found 2 results.
Lucene in Action
Lucene for Dummies

Vous pouvez modifier le dictionnaire de données en ajoutant des éléments au bean dictionary dans le fichier applicationContext.xml. N’hésitez pas non plus à essayer les différentes classes de Lucene (changer le type de Directory, d’Analyzer…).

L’Analyzer mis en place (StandardAnalyzer) ne tient pas compte de la casse, vous pouvez donc chercher « lucene » ou « Lucene » et obtenir le même résultat.

Le Directory mis en place (RAMDirectory) va comme son nom l’indique stocker temporairement les données dans la mémoire ; bien d’autres types sont disponibles, tout a été résumé dans les commentaires du fichier applicationContext.xml.

Pour rappel, voici les sources du projet.

Les textes, illustrations et démonstrations présents sur ce site sont la propriété de leurs auteurs respectifs, sauf mention contraire (photo de la bannière).
Chosesafaire.fr, un site propulsé par Wordpress, vous est proposé par Pierre Quillery & Killian Ebel.

Valid XHTML 1.0 Strict