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