Apprendre Solr en deux heures

20 030 vues

Publié le

Recherche d'information, Moteur de recherche, Search, Search Engine, Vertical Search, Lucene, Solr

Publié dans : Technologie
4 commentaires
15 j’aime
Statistiques
Remarques
  • Here's a new version working with Solr 6.1 http://www.bigwisdom.net/solr-tutorial-learn-solr-in-2-hours/
       Répondre 
    Voulez-vous vraiment ?  Oui  Non
    Votre message apparaîtra ici
  • pour poster un ensemble de document xml par exemple on utilisera la commande java -jar post.jar *.xml
       Répondre 
    Voulez-vous vraiment ?  Oui  Non
    Votre message apparaîtra ici
  • Bonjour, bref j'ai eu le même problème 'Fatiha SADOUK) alors : Comment faire l’indexation avec un ensemble de documents , je suis allé à travers le net, mais je ne pouvais pas trouver une réponse utile à ma question ..! pouvez vous m'aider.
       Répondre 
    Voulez-vous vraiment ?  Oui  Non
    Votre message apparaîtra ici
  • Bonjour Monsieur,
    En premier lieu je vous remercie pour votre présentation sur Lucene/ Solr qui a bien expliqué le fonctionnement de ce moteur de recherche, mais j’ai trouvé des problèmes; c’est pour ça que je vous contacte pour vous demander de m’aider si vous voulez et j’en serai reconnaissante.
    Mes problèmes sont :
    · j’ai un ensemble de documents dans un répertoire et je veux l’utiliser dans la recherche d’information par Lucene/Solr et je n’arrive pas à intégrer ce répertoire dans Lucene/Solr pour faire l’indexation.
    · Comment faire l’indexation avec mon ensemble de documents

    En gros, pouvez-vous me donner les étapes à suivre ou la documentation (adresses URL) pour pouvoir faire mon expérimentation.

    Dans l’attente de votre réponse, veuillez agréer mes salutations les plus distinguées.
       Répondre 
    Voulez-vous vraiment ?  Oui  Non
    Votre message apparaîtra ici
Aucun téléchargement
Vues
Nombre de vues
20 030
Sur SlideShare
0
Issues des intégrations
0
Intégrations
84
Actions
Partages
0
Téléchargements
522
Commentaires
4
J’aime
15
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Apprendre Solr en deux heures

  1. 1. Introduction à Solr Saïd Radhouani Juin 2010
  2. 2. Recherche d’Information - Rappel Saïd Radhouani © 2010 Documents Requête Correspondance ? Interrogation ? ? Indexation ? Index ?
  3. 3. Solr : Introduction <ul><li>Serveur de recherche </li></ul><ul><li>Basé sur la librairie Lucene </li></ul><ul><li>Open source </li></ul><ul><li>Interface d’administration Web </li></ul><ul><li>Configuration avec des fichiers XML </li></ul><ul><li>Utilisé dans plusieurs sites : www.whitehouse.gov, Apple, Inc, tsr.ch, NASA, etc. </li></ul>Saïd Radhouani © 2010
  4. 4. Solr - Pour commencer <ul><ul><ul><li>Machine virtuelle Java (JRE) 1.5 ou plus récente </li></ul></ul></ul><ul><ul><ul><li>L’application Solr : dernière version officielle :1.4 (novembre 2009) </li></ul></ul></ul>Saïd Radhouani © 2010
  5. 5. Solr - Principe <ul><li>Configuration avec des fichiers XML </li></ul><ul><ul><li>schéma de l’index </li></ul></ul><ul><ul><li>traitements à effectuer sur le contenu à indexer (stemming, synonymes, etc.) </li></ul></ul><ul><ul><li>calcul des scores des documents </li></ul></ul><ul><ul><li>fonction de classement </li></ul></ul><ul><ul><li>… </li></ul></ul><ul><li>Communication avec HTTP </li></ul><ul><ul><li>mettre à jour l’index </li></ul></ul><ul><ul><ul><li>Ajout et suppression de document </li></ul></ul></ul><ul><ul><li>rechercher les documents indexés </li></ul></ul>Saïd Radhouani © 2010
  6. 6. Principe de Solr Saïd Radhouani © 2010 document requête document document document Lucene Solr http://… http://… … .xml … .txt … http://…
  7. 7. Solr - Indexation <ul><ul><ul><li>Un index </li></ul></ul></ul><ul><ul><ul><ul><li>ensemble de documents  &quot;analysés&quot; </li></ul></ul></ul></ul><ul><ul><ul><ul><li>suivant un &quot; schéma &quot; défini </li></ul></ul></ul></ul><ul><ul><ul><li>Un Document = un ensemble de champs ( fields ) – valeurs </li></ul></ul></ul><ul><ul><ul><ul><li>ex. prix – 1500 </li></ul></ul></ul></ul><ul><ul><ul><li>Format des documents pris en charge </li></ul></ul></ul><ul><ul><ul><ul><li>XML et CSV (par défaut dans la version Solr distribuée) </li></ul></ul></ul></ul><ul><ul><ul><ul><li>PDF, DOC, XLS, PPT, flux RSS, HTML, etc. </li></ul></ul></ul></ul><ul><ul><ul><li>Importation des données depuis une base de données </li></ul></ul></ul>Saïd Radhouani © 2010
  8. 8. Configuration – Schéma d’indexation <ul><li>Le fichier schema.xml contient </li></ul><ul><ul><li>types des champs des documents à indexer </li></ul></ul><ul><ul><li>champs des documents </li></ul></ul><ul><ul><li>clé unique par document </li></ul></ul><ul><ul><li>champ de recherche par défaut </li></ul></ul><ul><ul><li>opérateur booléen par défaut </li></ul></ul>Saïd Radhouani © 2010 <schema name=&quot;example&quot; version=&quot;1.2”> <types> … </types> <fields> … </fields> <uniqueKey>…</uniqueKey> <defaultSearchField>…</defaultSearchField> <solrQueryParser defaultOperator=&quot;OR&quot;/> </schema> schema.xml
  9. 9. Configuration – Types des champs (field types) Saïd Radhouani © 2010 <ul><li>Préciser les analyses à appliquer sur le contenu </li></ul><ul><ul><li>lors de l’Indexation (sur les documents) </li></ul></ul><ul><ul><li>lors de l’interrogation (sur les requêtes) </li></ul></ul><ul><li>Types ( fieldType ) </li></ul><ul><ul><li>prédéfinis : int, float, string, date, boolean, etc. </li></ul></ul><ul><ul><li>défini dans Solr : text, text_ws, phonetic, etc </li></ul></ul><ul><ul><li>personnalisés: définir nous-même </li></ul></ul><ul><li>Analyes ( analyzer type ) </li></ul><ul><ul><li>tokenizer : comment découper le texte (split): les espaces ? la ponctuation ? Majuscule ? etc. </li></ul></ul><ul><ul><li>Ensemble de filtres ( filter ) : stemming, Stopwords, Protected words, sensibilité à la casse, Synonyme, etc. </li></ul></ul>
  10. 10. Configuration – Types des champs (field types) <ul><li>Exemple: définition du type text (prédéfini) </li></ul>Saïd Radhouani © 2010 < fieldType name=&quot; text &quot; class=&quot;solr.TextField&quot; positionIncrementGap=&quot;100&quot;> <analyzer type=&quot; index &quot;> < tokenizer class=&quot;solr.WhitespaceTokenizerFactory&quot;/> < filter class=&quot;solr.StopFilterFactory&quot; ignoreCase=&quot;true” words=&quot; stopwords.txt &quot;/> </analyzer> <analyzer type=&quot; query &quot;> <tokenizer class=&quot;solr.WhitespaceTokenizerFactory&quot;/> <filter class=&quot;solr.SynonymFilterFactory&quot; synonyms=&quot; synonyms.txt ” ignoreCase=&quot;true&quot; expand=&quot;true&quot;/> <filter class=&quot;solr.StopFilterFactory&quot; ignoreCase=&quot;true” words=&quot; stopwords.txt &quot;/> </analyzer> </fieldType> schema.xml
  11. 11. Configuration – fichiers des filtres <ul><li>Exemple : contenu des fichiers utilisés par les filtres </li></ul>Saïd Radhouani © 2010 a à et un une de des le La les … voiture,automobile,véhicule VW, Volkswagen … synonyms.txt stopwords.txt
  12. 12. Configuration – Champs (fields) <ul><li>Définir la manière dont nous allons indexer nos données </li></ul><ul><li><field name=&quot;…&quot; type=&quot;…&quot; indexed=&quot;true|false&quot; stored=&quot;true|false&quot; required=&quot;true|false&quot; … /> </li></ul><ul><li>indexed </li></ul><ul><ul><li>true : un champ sur lequel on peut effectuer des recherches </li></ul></ul><ul><ul><li>false : un champ qui ne sera pas accessible lors de l’interrogation </li></ul></ul><ul><li>stored </li></ul><ul><ul><li>true : champ qui pourra être retourné dans la réponse à une requête </li></ul></ul><ul><ul><li>false : champ qui ne sera pas retourné dans la réponse à une requête </li></ul></ul><ul><li>required </li></ul><ul><ul><li>true: pour être indexé, un document doit contenir ce champ </li></ul></ul><ul><ul><li>false : ce champ est optionnel </li></ul></ul>Saïd Radhouani © 2010
  13. 13. Configuration - Champs (fields) – Exemple <ul><li>Choisir les champs de notre schéma ? </li></ul><ul><ul><ul><li>analyse des besoins utilisateurs </li></ul></ul></ul><ul><ul><ul><li>imaginer l’interface de notre futur système </li></ul></ul></ul><ul><ul><li>Champs Valeurs </li></ul></ul><ul><ul><li>Marque BMW, Mercedes, Ford, </li></ul></ul><ul><ul><li>Modèle Série 3, Série 5, …, Mustang, etc. </li></ul></ul><ul><ul><li>Description une belle voiture…, </li></ul></ul><ul><ul><li>Couleur rouge, bleu, blanc, etc. </li></ul></ul><ul><ul><li>Prix 70000, 15000 </li></ul></ul>Saïd Radhouani © 2010
  14. 14. Configuration - Champs (fields) - Exemple <ul><li>Exemple: une partie de schema.xml </li></ul>Saïd Radhouani © 2010 <field> <field name=&quot;id&quot; type=&quot;string&quot; indexed=&quot;true&quot; stored=&quot;true&quot; required=&quot;true&quot; /> <field name=&quot;marque&quot; type=&quot;string&quot; indexed=&quot;true&quot; stored=&quot;true&quot; required=&quot;true&quot; /> <field name=&quot;modele&quot; type=&quot;string&quot; indexed=&quot;true&quot; stored=&quot;true&quot;/> <field name=&quot;description&quot; type=&quot;text&quot; indexed=&quot;true&quot; stored=&quot;true&quot; /> <field name=&quot;couleur&quot; type=&quot;string&quot; indexed=&quot;true&quot; stored=&quot;true&quot;/> <field name=&quot;prix&quot; type=&quot;tint&quot; indexed=&quot;true&quot; stored=&quot;true&quot;/> </field> <uniqueKey>id</uniqueKey> <defaultSearchField>description</defaultSearchField> <solrQueryParser defaultOperator=&quot;OR&quot;/> schema.xml
  15. 15. Préparation des documents <ul><li>Respecter le schéma défini dans schema.xml </li></ul><ul><ul><li>noms des champs </li></ul></ul><ul><ul><li>valeurs correspondantes aux types des champs </li></ul></ul><ul><ul><li>obligatoire vs. optionnel </li></ul></ul><ul><li>Plusieurs documents dans le même fichier xml </li></ul><ul><li>Entourés par les balises <add> et </add> </li></ul>Saïd Radhouani © 2010 <ul><li><add> </li></ul><ul><ul><li><doc> </li></ul></ul><ul><ul><ul><li><field name=&quot;champ 1&quot;>valeur du champ 1</field> </li></ul></ul></ul><ul><ul><ul><li><field name=&quot; champ 2 &quot;> valeur du champ 2 </field> </li></ul></ul></ul><ul><ul><ul><li>… </li></ul></ul></ul><ul><ul><ul><li><field name=&quot; champ n &quot;> valeur du champ n </field> </li></ul></ul></ul><ul><ul><li></doc> </li></ul></ul><ul><ul><li><doc> </li></ul></ul><ul><ul><li>… </li></ul></ul><ul><ul><li></doc> </li></ul></ul><ul><ul><li>… </li></ul></ul><ul><li></add> </li></ul>documents.xml
  16. 16. Préparation des documents - exemple <ul><li>Exemple de données à indexer </li></ul>Saïd Radhouani © 2010 <ul><li><add> </li></ul><ul><ul><li><doc> </li></ul></ul><ul><ul><ul><li><field name=&quot;id&quot;>1</field> </li></ul></ul></ul><ul><ul><ul><li><field name=&quot; marque &quot;>BMW</field> </li></ul></ul></ul><ul><ul><ul><li><field name=&quot; modele &quot;>X5</field> </li></ul></ul></ul><ul><ul><ul><li><field name=&quot; description &quot;>Une jolie X5 en très bon état…</field> </li></ul></ul></ul><ul><ul><ul><li><field name=&quot; couleur &quot;>Gris</field> </li></ul></ul></ul><ul><ul><ul><li><field name=&quot;prix&quot;>45000</field> </li></ul></ul></ul><ul><ul><li></doc> </li></ul></ul><ul><ul><li><doc> </li></ul></ul><ul><ul><ul><li><field name=&quot;id”>2</field> </li></ul></ul></ul><ul><ul><ul><li><field name=&quot;marque”>Volkswagen</field> </li></ul></ul></ul><ul><ul><ul><li><field name=&quot;modele&quot;>Golf6</field> </li></ul></ul></ul><ul><ul><ul><li><field name=&quot;description&quot;>Une Golf6 toutes options…</field> </li></ul></ul></ul><ul><ul><ul><li><field name=&quot;couleur&quot;>Noir</field> </li></ul></ul></ul><ul><ul><ul><li><field name=&quot;prix&quot;>21000</field> </li></ul></ul></ul><ul><ul><li></doc> </li></ul></ul><ul><li>… </li></ul><ul><li></add> </li></ul>voitures.xml
  17. 17. Indexation des documents Saïd Radhouani © 2010 <ul><ul><ul><li>Communiquer avec Solr en utilisant une requête HTTP et update </li></ul></ul></ul><ul><ul><ul><li>Utilisation du logiciel curl </li></ul></ul></ul><ul><ul><ul><li>curl http:// adresse_du_serveur /solr/ update -H &quot;Content-type:text/xml&quot; --data-binary @ documents.xml </li></ul></ul></ul><ul><ul><ul><ul><li>Exemple – Solr sur le serveur local </li></ul></ul></ul></ul><ul><ul><ul><ul><li>curl http://localhost:8983/solr/update -H &quot;Content-type:text/xml&quot; --data-binary @voitures.xml </li></ul></ul></ul></ul><ul><ul><ul><li>Solr contient deux scripts qui permettent d’envoyer des reqêtes HTTP à Solr (Post.sh et Post.jar). Pour les utiliser, il suffit d’indiquer </li></ul></ul></ul><ul><ul><ul><ul><li>l’adresse du serveur hébergeant Solr </li></ul></ul></ul></ul><ul><ul><ul><ul><li>le ou les fichiers xml qui contiennent les documents à indexer </li></ul></ul></ul></ul>
  18. 18. Indexation – suppression de documents Saïd Radhouani © 2010 <ul><li>Suppression par l’identifiant (ID) </li></ul><delete><id>1</id></delete> <ul><li>Suppression par une requête (plusieurs documents à la fois) </li></ul><delete> <query>marque:Peugeot</query> </delete> Supprimer-par-id.xml Supprimer-par-requete.xml
  19. 19. Mise à jour de l’index – commit/optimize Saïd Radhouani © 2010 <ul><li>Commit </li></ul><ul><ul><li>met à jour le contenu de l’index en fonction des modifications effectuées </li></ul></ul><ul><ul><li>rend les modifications visibles </li></ul></ul>curl $URL --data-binary '<commit/>' -H 'Content-type:text/xml; charset=utf-8’ <ul><li>Optimize : en plus de ce que fait commit, optimise l’index </li></ul><ul><ul><li>fusionne les segments de l’index créé par Lucene </li></ul></ul><ul><ul><li>rend la recherche plus rapide </li></ul></ul><ul><li>Documentation: http://wiki.apache.org/solr/UpdateXmlMessages </li></ul>curl $URL --data-binary '<optimize/>' -H 'Content-type:text/xml; charset=utf-8’
  20. 20. Interrogation : Correspondance document-requête (Matching) Saïd Radhouani © 2010 une voiture une voiture WhitespaceTokenizer StopFilter ignoreCase=true un automobile pas cher WhitespaceTokenizer SynonymFilter ignoreCase=true expand=true StopFilter ignoreCase=true Requête Correspondance Document un automobile pas <ul><li>Analyse des champs au moment de l’interrogation </li></ul>cher un automobile pas cher voiture automobile cher voiture voiture
  21. 21. Interrogation – Syntaxe de la requête <ul><ul><ul><li>Communiquer avec Solr en utilisant une requête HTTP, select et une requête </li></ul></ul></ul><ul><li>http:// adresse_du_serveur /solr/ select ? q= </li></ul><ul><ul><li>q définit la requête &quot;principale&quot; </li></ul></ul><ul><li>*:* retourne tous les documents présents dans l’index </li></ul><ul><li>+ le mot qui suit est obligatoire </li></ul><ul><li>- le mot qui suit est interdit </li></ul><ul><li>&quot;&quot; chercher une expression exacte </li></ul><ul><li>champ:valeur - ex. modele:&quot;Série 5&quot; </li></ul><ul><li>prix:[* TO 10000] </li></ul><ul><li>volks?agen, ?olks?agen, auto* </li></ul>Saïd Radhouani © 2010
  22. 22. Interrogation – Paramètres <ul><ul><ul><li>Communiquer avec Solr en utilisant une requête HTTP, select et un ensemble de paramètres </li></ul></ul></ul><ul><li>http:// adresse_du_serveur /solr/ select ?q=& ensemble-de-parametres-valeurs </li></ul><ul><li>Sort (Par défaut, score desc ): classement des documents retrouvés </li></ul><ul><li>ex. classer dans l’ordre décroissant par &quot;enStock&quot;, ensuite croissant par &quot;prix&quot; : </li></ul><ul><li>sort= enStock desc, prix asc </li></ul><ul><li>rows (Par défaut, 10): pagination des résultats </li></ul><ul><ul><li>Nombre de documents à retourner par page de résultats </li></ul></ul><ul><li>start (Par défaut, 0): pagination des résultats </li></ul><ul><ul><li>Numéro du document-réponse par lequel on commence l’affichage des résultats </li></ul></ul>Saïd Radhouani © 2010
  23. 23. Interrogation – Paramètres <ul><li>fq (filter query) </li></ul><ul><ul><li>Spécifier une requête qui peut être utilisée pour filtrer les documents à retournés </li></ul></ul><ul><ul><li>ex. Chercher les voiture de marque BMW dont le prix est inférieur à 15000 </li></ul></ul><ul><ul><li>fq=price:[* TO 15000]&fq=marque:BMW </li></ul></ul><ul><li>fl (field limiting) </li></ul><ul><ul><li>Spécifier l’ensemble des champs à retourner dans les réponses </li></ul></ul><ul><ul><li>ex. Retourner seulement la marque, le prix et la couleur </li></ul></ul><ul><ul><li>fl=marque,prix,colour </li></ul></ul><ul><li>Autres paramètres: http://wiki.apache.org/solr/CommonQueryParameters http://wiki.apache.org/solr/FilterQueryGuidance </li></ul>Saïd Radhouani © 2010
  24. 24. Interrogation – Requête/Réponse Saïd Radhouani © 2010 <ul><li>http://localhost:8983/solr/select?q= marque:BMW &start=0&rows=10&fl= marque,modele,prix </li></ul><response> <lst name=&quot;responseHeader&quot;> <int name=&quot;status&quot;>0</int> <int name=&quot;QTime&quot;>0</int> <str name=&quot;q&quot;> marque:BMW </str> <str name=“fl&quot;> marque,modele,prix </str> </lst> <result name=&quot;response&quot; numFound=&quot;1&quot; start=&quot;0&quot;> <doc> <str name=” marque &quot;>BMW</str> <str name=” modele &quot;>X5</str> <str name=” prix &quot;>46000</str> </doc> </result> </response>
  25. 25. Démo – Contenu du répertoire de solr Saïd Radhouani © 2010 Programme pour démarrer Solr Répertoire contenant les fichiers de configuration <ul><li>Télécharger Solr depuis http://mirror.switch.ch/mirror/apache/dist/lucene/solr/1.4.0/ </li></ul><ul><li>En décompressant le fichier téléchargé, vous auriez un répertoire nommé &quot; apache-solr-1.4.0&quot;, ayant la structure suivante </li></ul>
  26. 26. Démo – Contenu du répertoire de solr Saïd Radhouani © 2010 Répertoire contenant les documents à indexer Programmes pour insérer les documents dans l’index
  27. 27. Démo - Démarrage / Arrêt de Solr <ul><li>En utilisant l’invite de commandes, aller sur le répertoire ~/ apache-solr-1.4.0/example/, qui contient le fichier start.jar </li></ul><ul><li>Pour démarrer Sorl, taper: java –jar start.jar, puis Entrée </li></ul><ul><li>Si tout se passe bien, vous verrez la ligne suivant à la fin du démarrage </li></ul><ul><li>… ::INFO: Started SocketConnector @ 0.0.0.0:8983 </li></ul><ul><li>Pour arrêter le serveur, appuyer sur les touches ctr+c </li></ul>Saïd Radhouani © 2010
  28. 28. Démo – Solr démarré Saïd Radhouani © 2010
  29. 29. Saïd Radhouani © 2010 Démo – Page d’administration de Solr
  30. 30. Saïd Radhouani © 2010 Démo – Page d’administration de Solr
  31. 31. Démo – Ma première requête Saïd Radhouani © 2010
  32. 32. Saïd Radhouani © 2010 Démo – Ma première réponse
  33. 33. Démo – Préparation de schema.xml <ul><li>Ouvrez le fichier schema.xml situé dans ~apache-solr-1.4.0/example/solr/conf/ </li></ul><ul><li>Définir les champs entre les balises <fields> </fields> </li></ul><ul><li>Spécifier la clé unique et le champ de recherche par défaut </li></ul><ul><li>Sauvegarder </li></ul><ul><li>(Re)démarrer Solr pour appliquer les modifications </li></ul>Saïd Radhouani © 2010
  34. 34. Démo – Préparation des documents <ul><li>Créer le fichier voitures.xml et sauvegarder-le sous le répertoire des documents à indexer ~apache-solr-1.4.0/example/exampledocs/ </li></ul>Saïd Radhouani © 2010 …
  35. 35. Démo - Indexation des documents <ul><li>En utilisant l’invite de commandes, aller sur le répertoire ~apache-solr-1.4.0/example/exampledocs/ </li></ul><ul><li>Taper java –jar post.jar voitures.xml, ensuite Entrée </li></ul><ul><li>Si tout se passe bien, vous verrez quelque chose qui ressemble à ça </li></ul>Saïd Radhouani © 2010
  36. 36. Démo – Interrogation Saïd Radhouani © 2010
  37. 37. Démo – Contenu de mon index Saïd Radhouani © 2010
  38. 38. Démo – Contenu de mon index Saïd Radhouani © 2010
  39. 39. Démo – Analyse des types définis Saïd Radhouani © 2010 Schema.xml Tokenizer Stemmer Stop words Synonyms Protected words
  40. 40. Liens <ul><li>Site officiel d'Apache Solr : http://lucene.apache.org/solr </li></ul><ul><li>Wiki : http://wiki.apache.org/solr </li></ul><ul><li>Mailing list : http://lucene.apache.org/solr/mailing_lists.html </li></ul><ul><li>Tutoriel: </li></ul><ul><ul><li>http://lucene.apache.org/solr/tutorial.html </li></ul></ul><ul><ul><li>http://www.ibm.com/developerworks/java/library/j-solr1/ </li></ul></ul><ul><ul><li>http://www.ibm.com/developerworks/java/library/j-solr2/ </li></ul></ul><ul><li>Livres: Solr 1.4 Enterprise Search Server (Paperback) </li></ul><ul><li>Base de connaissances: http://www.lucidimagination.com/search/?q = </li></ul>Saïd Radhouani © 2010

×