40
Introduction à Solr Saïd Radhouani Juin 2010

Apprendre Solr en deux heures

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: Apprendre Solr en deux heures

Introduction à Solr

Saïd RadhouaniJuin 2010

Page 2: Apprendre Solr en deux heures

Saïd Radhouani © 2010 2

Recherche d’Information - Rappel

Documents Requête

Correspondance ?

Interrogation ?

?

Indexation ?

Index ?

Page 3: Apprendre Solr en deux heures

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

Page 4: Apprendre Solr en deux heures

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

Page 5: Apprendre Solr en deux heures

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

Page 6: Apprendre Solr en deux heures

Principe de Solr

Saïd Radhouani © 2010 6

document requête documentdocumentdocument

Lucene

Solr

http://… http://…

….xml

….txt

http://…

Page 7: Apprendre Solr en deux heures

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

Page 8: Apprendre Solr en deux heures

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

Page 9: Apprendre Solr en deux heures

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.

Page 10: Apprendre Solr en deux heures

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

Page 11: Apprendre Solr en deux heures

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

Page 12: Apprendre Solr en deux heures

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

Page 13: Apprendre Solr en deux heures

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

Page 14: Apprendre Solr en deux heures

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

Page 15: Apprendre Solr en deux heures

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

Page 16: Apprendre Solr en deux heures

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

Page 17: Apprendre Solr en deux heures

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

Page 18: Apprendre Solr en deux heures

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

Page 19: Apprendre Solr en deux heures

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’

Page 20: Apprendre Solr en deux heures

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

Page 21: Apprendre Solr en deux heures

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

Page 22: Apprendre Solr en deux heures

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

Page 23: Apprendre Solr en deux heures

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

Page 24: Apprendre Solr en deux heures

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>

Page 25: Apprendre Solr en deux heures

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

Page 26: Apprendre Solr en deux heures

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

Page 27: Apprendre Solr en deux heures

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

Page 28: Apprendre Solr en deux heures

Démo – Solr démarré

Saïd Radhouani © 2010 28

Page 29: Apprendre Solr en deux heures

Saïd Radhouani © 2010 29

Démo – Page d’administration de Solr

Page 30: Apprendre Solr en deux heures

Saïd Radhouani © 2010 30

Démo – Page d’administration de Solr

Page 31: Apprendre Solr en deux heures

Démo – Ma première requête

Saïd Radhouani © 2010 31

Page 32: Apprendre Solr en deux heures

Démo – Ma première réponse

Page 33: Apprendre Solr en deux heures

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

Page 34: Apprendre Solr en deux heures

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

Page 35: Apprendre Solr en deux heures

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

Page 36: Apprendre Solr en deux heures

Démo – Interrogation

Saïd Radhouani © 2010 36

Page 37: Apprendre Solr en deux heures

Démo – Contenu de mon index

Saïd Radhouani © 2010 37

Page 38: Apprendre Solr en deux heures

Démo – Contenu de mon index

Saïd Radhouani © 2010 38

Page 39: Apprendre Solr en deux heures

Démo – Analyse des types définis

Saïd Radhouani © 2010 39

Schema.xml

Tokenizer

Stemmer

Stop words

Synonyms

Protected words

Page 40: Apprendre Solr en deux heures

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