Utilisation de Lucene



Documents pareils
Travaux Pratiques : Lucène - Gestion d un index plein texte

Big$data,$le$Web$et$tout$ça $ De$quel$volume$parleDton$?$ Surcharge$d informa>on$ Introduction à la fouille de texte Master Informatique 1 ère année

Serveur d'archivage 2007 Installation et utilisation de la BD exist

RMI le langage Java XII-1 JMF

Java DataBaseConnectivity

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Remote Method Invocation (RMI)

OpenPaaS Le réseau social d'entreprise

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

La base de données XML exist. A. Belaïd

Remote Method Invocation en Java (RMI)

Auto-évaluation Programmation en Java

Plan du cours. Historique du langage Nouveautés de Java 7

Programmer en JAVA. par Tama

Extension SSO Java. Cette note technique décrit la configuration et la mise en œuvre du filtre de custom SSO Java.

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Pour plus de détails concernant le protocole TCP conférez vous à la présentation des protocoles Internet enseignée pendant.

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

BASE DE DONNÉES XML NATIVE

Cahier des Charges du Projet Domotique. Choquet Mathieu Masson Jérôme Groupe 6. Domotique. p.1

Synchro et Threads Java TM

Maîtriser le menu contextuel dans un OfficeBean

IFT287 Exploitation de base de données relationnelles et orientées objet. Laboratoire Mon premier programme Java en Eclipse

Corrigé des exercices sur les références

Institut Supérieur de Gestion. Cours pour 3 ème LFIG. Java Enterprise Edition Introduction Bayoudhi Chaouki

Création d une application JEE

Application web de gestion de comptes en banques

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

TP Programmation Java / JDBC / Oracle

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

Architecture Orientée Service, JSON et API REST

Calcul Parallèle. Cours 5 - JAVA RMI

TD3: tableaux avancées, première classe et chaînes

DEMARREZ RAPIDEMENT VOTRE EVALUATION

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

TP3. Mail. Attention aux fausses manoeuvres lors de ce TP vous pouvez endommager votre mail sur ouindose.

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

Langage Java. Classe de première SI

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Programmation Objet Java Correction

Construire une base de donnée pour bibliothèque

Manuel d implémentation des Web Services Sous Axis1 et Axis2/Tomcat/linux. Par Pr Bouabid EL OUAHIDI

Java 1.5 : principales nouveautés

Création d objet imbriqué sous PowerShell.

La gestion des exceptions

Web Tier : déploiement de servlets

Utiliser Java sans BlueJ

Utilisation d objets : String et ArrayList

Flux de données Lecture/Ecriture Fichiers

Nécessité de concevoir un outil de recherche PDF Présentation des fonctionnalités d'indexation et de recherche... 3

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

TD/TP PAC - Programmation n 3

Initiation à JAVA et à la programmation objet.

Gestion distribuée (par sockets) de banque en Java

MapReduce et Hadoop. Alexandre Denis Inria Bordeaux Sud-Ouest France ENSEIRB PG306

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

as Architecture des Systèmes d Information

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Java Licence professionnelle CISII,

Héritage presque multiple en Java (1/2)

Remote Method Invocation Les classes implémentant Serializable

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

4. Groupement d objets

Développement Logiciel

Une introduction à la technologie EJB (2/3)

Introduction à ElasticSearch

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Le MSMQ. Version 1.0. Pierre-Franck Chauvet

Cours 1: Java et les objets

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Notes de cours Practical BigData

SYNC FRAMEWORK AVEC SQLITE POUR APPLICATIONS WINDOWS STORE (WINRT) ET WINDOWS PHONE 8

Le Modèle de Sécurité dans JAVA

Tutoriel d installation de Hibernate avec Eclipse

Applet pour visualiser les variables «automate» notifiées

TD/TP PAC - Programmation n 3

Bases du langage. Historique Applications et applets Éléments de base du langage Classes et objets Les exceptions

Programmation par les Objets en Java

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Cloud. Définition? 08/11/2012. James Urquhart The Wisdom of Clouds

Tolérance aux Fautes des Grappes d Applications J2EE. Applications Internet dynamiques

1. Langage de programmation Java

A. Architecture du serveur Tomcat 6

Bases de données et fournisseurs de contenu

PHP 5.4 Développez un site web dynamique et interactif

Création d un service web avec NetBeans 5.5 et SJAS 9

Implementing a simple RMI Application over the Internet (using and comparing HTTP tunneling, RMI Proxy)

Java RMI. Arnaud Labourel Courriel: Université de Provence. 8 mars 2011

Interfaces graphiques avec l API Swing

TP, première séquence d exercices.

Dis papa, c est quoi un bus logiciel réparti?

1. Installation d'un serveur d'application JBoss:

Premiers Pas en Programmation Objet : les Classes et les Objets

TP1 : Initiation à Java et Eclipse

Programmation par composants (1/3) Programmation par composants (2/3)

Transcription:

Table des matières Utilisation de Lucene... 2 Classes d'indexation... 2 IndexWriter... 2 Directory... 2 Analyzer... 2 Document... 2 Field... 2 Classes de recherche... 3 IndexSearcher... 3 Query... 3 QueryParser... 3 TopDocs... 3 Vocabulaire... 3 Exemple de création d un index... 4 Exemple de recherche... 4 Utilisation de Solr... 5 Installation avec Tomcat... 5 Les fichiers de configuration... 5 solrconfig.xml... 5 schema.xml... 6 Exemple de création d indexation avec Solr... 6 Exemple de recherche avec Solr... 7

Utilisation de Lucene 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 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ées 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. 2

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. Query - La classe Query est une classe abstraite qui comprend BooleanQuery, PhraseQuery, PrefixQuery, PhrasePrefixQuery, RangeQuery, FilteredQuery, et SpanQuery. QueryParser - La classe QueryParser est utilisée pour générer un décompositeur analytique qui peut chercher à travers un index. TopDocs - La classe TopDocs 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. Vocabulaire Un index Lucene est une collection de documents Un Document est une collection de Fields Un Field contient le contenu et les metadata 3

Exemple de création d un index public class HelloLucene { //dossier ou l'index sera construit static final File indexdir = new File("helloLuceneIndex"); //cette methode permet de construire un index public static void buildindex() throws IOException { Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_30) IndexWriter indexwriter = new IndexWriter(FSDirectory.open(indexDir), analyzer, IndexWriter.MaxFieldLength.LIMITED); String[] texts = new String[] { "hello world", "hello sailor", "goodnight moon" ; for (String text : texts) { Document doc = new Document(); doc.add(new Field("text",text,Field.Store.YES,Field.Index.ANALYZED)); indexwriter.adddocument(doc); indexwriter.close(); public static void main(string[] args) throws Exception{ buildindex(); System.out.println("index terminer"); Exemple de recherche public class HelloLucene { public static void searchindex(string[] querystrings, File indexdir) throws IOException, ParseException { Searcher searcher = new IndexSearcher(FSDirectory.open(indexDir)); Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_30) ; QueryParser parser = new QueryParser(Version.LUCENE_30,"text",analyzer); for (String querystring : querystrings) { System.out.println("\nsearching for: " + querystring); Query query = parser.parse(querystring); TopDocs results = searcher.search(query,10); System.out.println("total hits: " + results.totalhits); ScoreDoc[] hits = results.scoredocs; for (ScoreDoc hit : hits) { Document doc = searcher.doc(hit.doc); System.out.printf("%5.3f %s\n", hit.score, doc.get("text")); searcher.close(); public static void main(string[] args) throws Exception{ buildindex(); System.out.println("built index"); searchindex(args); System.out.println("\nall done"); 4

Utilisation de Solr Installation avec Tomcat 1. Afin de pouvoir passer en mode HTTP-GET des critères de recherche utilisant des caractères internationaux (code supérieur à 127) il est nécessaire d éditer le fichier conf/server.xml de Tomcat et d ajouter l attribut suivant à l élément Connector approprié : URIEncoding=»UTF-8. Il s agit du connecteur correspondant au port 8080 : <Connector port="8080" maxhttpheadersize="8192" maxthreads="150" minsparethreads="25" maxsparethreads="75" enablelookups="false" redirectport="8443" acceptcount="100" connectiontimeout="20000" disableuploadtimeout="true" URIEncoding="UTF-8" /> 2. Copier le fichier «d:\solr\apache-solr\example\webapps\solr.war» dans le répertoire webapps de Tomcat. 3. Au moyen de la console Tomcat (dans le system tray), ajouter le paramètre -Dsolr.solr.home=d:\solr\apache-solr\example\solr 4. Redémarrer Tomcat. Administration: http://localhost:8080/solr/admin Recherche : http://localhost:8080/solr/admin/form.jsp Les fichiers de configuration Les fichiers de configuration sont localisés dans le répertoire «/conf». Il s agit principalement de solrconfig.xml et schema.xml. solrconfig.xml Il s agit du fichier qui contient l essentiel des paramètres liés au fonctionnement de Solr et plus particulièrement des paramètres de l API Lucene qu utilise Solr (longueur maximale d une champs, taille des buffer mémoire, fréquence de commit, ). Lien pour la doc (http://wiki.apache.org/solr/solrconfigxml) 5

schema.xml Il s agit du fichier qui décrit comment seront indexées les données dans Solr. Il définit les types de données, les champs, les manipulations sur les données lors de l indexation, les champs obligatoires, le champ de requête par défaut, Lien pour la doc (http://wiki.apache.org/solr/schemaxml) Exemple de création d indexation avec Solr import java.io.ioexception; import java.net.malformedurlexception; import java.util.arraylist; import java.util.collection; import org.apache.solr.client.solrj.solrserver; import org.apache.solr.client.solrj.solrserverexception; import org.apache.solr.client.solrj.impl.commonshttpsolrserver; import org.apache.solr.common.solrinputdocument; public class IndexTest { /** * @param args * @throws MalformedURLException */ public static void main(string[] args) { CommonsHttpSolrServer server = null; try{ server = new CommonsHttpSolrServer("http://localhost:8080/solr"); catch(exception e){ System.out.println("err1"); //Creation d'un document Solr SolrInputDocument doc = new SolrInputDocument(); //ajout de contenu dans le document doc.addfield( "id", "id12", 1.0f ); doc.addfield( "name", "doc1", 1.0f ); doc.addfield( "features", "Le principe de Solr est de fonctionner grâce aux API XML/HTTP", 1.0f ); doc.addfield( "price", 10 ); //Collection de Document (permet d'ajouter plusieur document a la fois) Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>(); docs.add(doc); //indexe les données dans le serveur try { server.add(docs); server.commit(); System.out.println("Les données sont indexés"); catch (SolrServerException e) { // TODO Auto-generated catch block catch (IOException e) { // TODO Auto-generated catch block 6

Exemple de recherche avec Solr package test; import org.apache.solr.common.solrdocumentlist; import org.apache.solr.common.solrdocument; import org.apache.solr.client.solrj.solrserverexception; import org.apache.solr.client.solrj.solrquery; import org.apache.solr.client.solrj.impl.commonshttpsolrserver; import org.apache.solr.client.solrj.response.queryresponse; class SolrjTest { public void query(string q) { CommonsHttpSolrServer server = null; try{ server = new CommonsHttpSolrServer("http://localhost:8080/solr/"); catch(exception e){ //initialisation de l'objet SolrQuery SolrQuery query = new SolrQuery(); query.setquery(q); try{ //envoie de la requete //la requete renvoie un objet de type QueryResponse QueryResponse qr = server.query(query); //On recupére la SolrDocumentList qui est une liste contenant les metadonnées de chaque resultat trouvé SolrDocumentList sdl = qr.getresults(); //On affiche le nombre de resultat trouvé System.out.println("NbReponse: " + sdl.getnumfound()); System.out.println("--------------------------------"); //On affiche les Résultats for(solrdocument d : sdl){ System.out.println(d.get("name") + " (" + d.get("features") + ")"); catch (SolrServerException e){ public static void main(string[] args){ SolrjTest solrj = new SolrjTest(); solrj.query("doc1"); 7