0
Armand Abric
Développeur chez Virtual-Expo, Marseille
forgebinaire.net / @spyseth / github.com/spy-seth
Introduction
Solr ?
Moteur de recherche fulltext utilisant l'algorithme Lucene
= Base de données non relationnelle spécialisée dans la ...
Interface d'administration
Communications
API REST en JSON/XML
De nombreuses librairies dans de nombreux languages :
Java, C, Ruby, Python...
...et e...
Structure interne Solr
schema.xml
<xlvrin"."ecdn=UF8 ?
?m eso=10 noig"T-" >
<ceanm=soe vrin"."
shm ae"tr" eso=15>
<ye>
tps
<iltp nm=srn"cas"orSri...
Solr vs SGBD relationnels
Principales différences à l'usage :
Pas de jointure complexe, mais des jointures simples
Pas de ...
Solr dans le SI
Un moteur de recherche vient en supplément de BDD existantes
(relationnelle, NoSQL, fichier...)
Il ne peut...
Indexation
Indexation
L'indexation consiste à stocker des données au sein de Solr
C'est durant cette phase que Solr construit ses ind...
Le processus d'indexation
Il existe trois méthodes pour gérer l'indexation :
Full indexation : un bach d'indexation ré-ind...
Text analysis
Un vrai fieldType
<xlvrin"."ecdn=UF8 ?
?m eso=10 noig"T-" >
<- [.]->
!- .. <ilTp nm=tx_n cas"orTxFed>
fedye ae"ete" ls=sl....
fieldType bis
Une partie du travail de recherche se prépare au moment de l'indexation
Il faut préparer les données pour si...
Va chercher !
Présentation de la synthaxe
ht:/oahs:93sl/cr][eusHnlr?prm]
tp/lclot88/or[oe/rqetade][aas
Paramètres de base
q : coeur de la requête de recherche
fq : clause "where" de filtre des résultats (plusieurs autorisés)
...
Requêtes simples
ht:/oahs:93sl/rilsslc?=:
tp/lclot88/oratce/eetq**
ht:/oahs:93sl/rilsslc?=otn:ateil
tp/lclot88/oratce/eetq...
Recherches
avancées
Search revelancy
Scoring : Personaliser l'importance des clauses de match de la requête
(uniquement le paramètre "q")
ht:/...
Debugging et aspirine
Relançons la requête précédente en affichant les informations de débug
"& e u Q e y t u "
dbgur=re
h...
Grouping
Le groupement Solr est équivalant au groupement SQL
Au détail près que l'on ne peut pas grouper sur le plusieurs ...
Faceting
Faceting
ht:/oahs:93sl/rilsslc
tp/lclot88/oratce/eet
?=:
q**
&os0
rw=
&ae=re
fcttu
&ae.il=uhri
fctfedato_d
ht:/oahs:93sl/r...
Highlight
Mise en avant des termes recherchés au sein du contenus d'un champs
texte.
ht:/oahs:93sl/rilsslc
tp/lclot88/orat...
Exemples d'autre modules
SpellCheck
Suggester (aka Autocomplete)
Recherche spaciale
Fin
Upcoming SlideShare
Loading in …5
×

Solr overview presentation

601 views

Published on

Présentation générale de Solr : concept de base, indexation, requêtes simples, conception d'index, exemples de requêtes plus complexes.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
601
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Solr overview presentation

  1. 1. 0
  2. 2. Armand Abric Développeur chez Virtual-Expo, Marseille forgebinaire.net / @spyseth / github.com/spy-seth
  3. 3. Introduction
  4. 4. Solr ? Moteur de recherche fulltext utilisant l'algorithme Lucene = Base de données non relationnelle spécialisée dans la recherche textuelle Développé par la Fondation Apache Actuellement en version 4.6.1
  5. 5. Interface d'administration
  6. 6. Communications API REST en JSON/XML De nombreuses librairies dans de nombreux languages : Java, C, Ruby, Python... ...et en PHP : Une extention PECL... ...et même des bundles Symfony 2 PECL / Solarium / NelmioSolariumBundle / SolrBundle
  7. 7. Structure interne Solr
  8. 8. schema.xml <xlvrin"."ecdn=UF8 ? ?m eso=10 noig"T-" > <ceanm=soe vrin"." shm ae"tr" eso=15> <ye> tps <iltp nm=srn"cas"orSril"/ fedye ae"tig ls=sl.tFed > <ilTp nm=it cas"orItil"/ fedye ae"n" ls=sl.nFed > <ilTp nm=dul"cas"orDulFed / fedye ae"obe ls=sl.obeil" > <ilTp nm=lto"cas"orLtoTp"[.]/ fedye ae"aLn ls=sl.aLnye .. > <tps /ye> <ils fed> <il nm=i"tp=it idxd"re soe=tu"rqie=tu"/ fed ae"d ye"n" nee=tu" trd"re eurd"re > <il nm=nm"tp=srn"idxd"re soe=fle rqie=tu"/ fed ae"ae ye"tig nee=tu" trd"as" eurd"re > <il nm=onri"tp=it idxd"re soe=tu"mliaud"re rqie=tu"/ fed ae"we_d ye"n" nee=tu" trd"re utVle=tu" eurd"re > <il nm=codnts tp=lto"idxd"re soe=fle rqie=tu"/ fed ae"oriae" ye"aLn nee=tu" trd"as" eurd"re > [.] .. <fed> /ils <nqee>d/nqee> uiuKyi<uiuKy <orurPre dfutprtr"R / slQeyasr ealOeao=O" > <shm> /cea
  9. 9. Solr vs SGBD relationnels Principales différences à l'usage : Pas de jointure complexe, mais des jointures simples Pas de sous-requêtes Transactionnel aux coeurs du logiciel : toutes modifications de données se fait dans une transaction (commit/rollback obligatoire) La notion "d'égalité" varie en fonction du core et du champs sur lequel on travaille Un changement dans le fichier schema.xml entraine une ré-indexation complète des données
  10. 10. Solr dans le SI Un moteur de recherche vient en supplément de BDD existantes (relationnelle, NoSQL, fichier...) Il ne peut pas et ne doit pas remplacer une BDD "long terme"
  11. 11. Indexation
  12. 12. Indexation L'indexation consiste à stocker des données au sein de Solr C'est durant cette phase que Solr construit ses index internes qui lui pemettent d'être très performant Pour indexer des données il suffit de faire une requête HTTP sur un requestHandler d'update du core Les données doivent être envoyé en XML ou JSON <d> ad <o> dc <il nm=i"S21N/il> fed ae"d>P54<fed <il nm=nm"SmugSiPitP2 S21N-hr die-20G<fed fed ae"ae>asn pnon 10 P54 ad rv 5 B/il> <il nm=ct>lcrnc<fed fed ae"a"eetois/il> <il nm=ct>addie/il> fed ae"a"hr rv<fed <il nm=faue"70RM 8Bcce IEUtaAA13/il> fed ae"etrs>20P, M ah, D lr T-3<fed <il nm=faue"Nieur,SlnSe tcnlg<fed fed ae"etrs>osGad ietek ehooy/il> <il nm=pie>2/il> fed ae"rc"9<fed <il nm=pplrt"6/il> fed ae"ouaiy><fed <il nm=iSok>re/il> fed ae"ntc"tu<fed <dc /o> <o> dc [.] .. <dc /o> <ad /d>
  13. 13. Le processus d'indexation Il existe trois méthodes pour gérer l'indexation : Full indexation : un bach d'indexation ré-indexe toutes les données à interval régulier Indexation incrémentale : un bach d'indexation indexe les changements depuis la dernière indexation Indexation en live : lors de la sauvegarde d'une entité dans le reste du SI, on déclanche la mise à jour des données de l'entité au sein de Solr Aucune n'est parfaite. Il faut choisir en fonction de ses besoins. Plusieurs de ces techniques peuvent (doivent) être utiliser en paralelle : il est toujours utile de pouvoir ré-indexer tout un core à partir de zéro.
  14. 14. Text analysis
  15. 15. Un vrai fieldType <xlvrin"."ecdn=UF8 ? ?m eso=10 noig"T-" > <- [.]-> !- .. <ilTp nm=tx_n cas"orTxFed> fedye ae"ete" ls=sl.etil" <nlzrtp=idx> aaye ye"ne" <oeie cas"orWiepcTknzratr"/ tknzr ls=sl.htsaeoeieFcoy > <itrcas"orSnnmitratr"snnm=snnm_ntt inrCs=tu" fle ls=sl.yoyFleFcoy yoys"yoyse.x" goeae"re epn=tu"/ xad"re > <itrcas"orSoFleFcoy inrCs=tu"wrs"tpod_ntt fle ls=sl.tpitratr" goeae"re od=sowrse.x" ealPstoIceet=tu"/ nbeoiinnrmns"re > <itrcas"orWrDlmtritratr"gnrtWrPrs"" fle ls=sl.odeiieFleFcoy eeaeodat=1 gnrtNmePrs""ctntWrs""ctntNmes""ctntAl"" eeaeubrat=1 aeaeod=1 aeaeubr=1 aeael=0 sltnaehne""/ piOCsCag=1 > <itrcas"orLwraeitratr"/ fle ls=sl.oeCsFleFcoy > <itrcas"orACIodnFleFcoy/ fle ls=sl.SIFligitratr"> <itrcas"orSoblPreFleFcoy lnug=Egih / fle ls=sl.nwalotritratr" agae"nls" > <aaye> /nlzr <nlzrtp=qey> aaye ye"ur" <oeie cas"orWiepcTknzratr"/ tknzr ls=sl.htsaeoeieFcoy > <itrcas"orSoFleFcoy inrCs=tu"wrs"tpod_ntt fle ls=sl.tpitratr" goeae"re od=sowrse.x" ealPstoIceet=tu"/ nbeoiinnrmns"re > <itrcas"orWrDlmtritratr"gnrtWrPrs"" fle ls=sl.odeiieFleFcoy eeaeodat=1 gnrtNmePrs""ctntWrs""ctntNmes""ctntAl"" eeaeubrat=1 aeaeod=0 aeaeubr=0 aeael=0 sltnaehne""/ piOCsCag=1 > <itrcas"orLwraeitratr"/ fle ls=sl.oeCsFleFcoy > <itrcas"orACIodnFleFcoy/ fle ls=sl.SIFligitratr"> <itrcas"orSoblPreFleFcoy lnug=Egih / fle ls=sl.nwalotritratr" agae"nls" > <aaye> /nlzr <fedye /ilTp> <- [.]-> !- .. -
  16. 16. fieldType bis Une partie du travail de recherche se prépare au moment de l'indexation Il faut préparer les données pour simplifier le travail de requête : nettoyer les caractères spéciaux gérer des synonymes retirer les balises HTML gérer les accents en fonction de la langue ...
  17. 17. Va chercher !
  18. 18. Présentation de la synthaxe ht:/oahs:93sl/cr][eusHnlr?prm] tp/lclot88/or[oe/rqetade][aas
  19. 19. Paramètres de base q : coeur de la requête de recherche fq : clause "where" de filtre des résultats (plusieurs autorisés) fl : liste des champs du document a retourner rows : limit start : offset sort : ordonancement des résulats
  20. 20. Requêtes simples ht:/oahs:93sl/rilsslc?=: tp/lclot88/oratce/eetq** ht:/oahs:93sl/rilsslc?=otn:ateil tp/lclot88/oratce/eetqcnetbtlfed &li,otn f=dcnet ht:/oahs:93sl/rilsslc tp/lclot88/oratce/eet ?=otn:btlfedDC) qcnet(ateil IE &li,otn f=dcnet ht:/oahs:93sl/rilsslc tp/lclot88/oratce/eet ?=otn:btlfedDC" qcnet"ateil IE &li,otn f=dcnet ht:/oahs:93sl/rilsslc tp/lclot88/oratce/eet ?=otn:btlfedDC"1 qcnet"ateil IE~0 &li,otn f=dcnet ht:/oahs:93sl/rilsslc tp/lclot88/oratce/eet ?=otn:ateil ADato_d2 qcnetbtlfed N uhri: &li,otn,uhri f=dcnetato_d
  21. 21. Recherches avancées
  22. 22. Search revelancy Scoring : Personaliser l'importance des clauses de match de la requête (uniquement le paramètre "q") ht:/oahs:93sl/rilsslc tp/lclot88/oratce/eet ?=otn:ateil AD(uhri: O ato_d3O ato_d4 qcnetbtlfed N ato_d2 R uhri: R uhri:) &li,otn,uhri f=dcnetato_d Favorisons l'auteur #2 : "a t o _ d 2 1 0 uhri:^0" ht:/oahs:93sl/rilsslc tp/lclot88/oratce/eet ?=otn:ateil AD(uhri:^0 O ato_d3O ato_d4 qcnetbtlfed N ato_d210 R uhri: R uhri:) &li,otn,uhri f=dcnetato_d
  23. 23. Debugging et aspirine Relançons la requête précédente en affichant les informations de débug "& e u Q e y t u " dbgur=re ht:/oahs:93sl/rilsslc tp/lclot88/oratce/eet ?=otn:ateil AD(uhri:^0 O ato_d3O ato_d4 qcnetbtlfed N ato_d210 R uhri: R uhri:) &li,otn,uhri f=dcnetato_d &euQeytu dbgur=re &nettu idn=re
  24. 24. Grouping Le groupement Solr est équivalant au groupement SQL Au détail près que l'on ne peut pas grouper sur le plusieurs champs. Par contre on peut faire plusieurs groupement différent en une requête. ht:/oahs:93sl/rilsslc tp/lclot88/oratce/eet ?=otn:ateil qcnetbtlfed &ru=re goptu &ru.il=aei gopfedgm_d &ru.ii= goplmt3 &li,otn f=dcnet
  25. 25. Faceting
  26. 26. Faceting ht:/oahs:93sl/rilsslc tp/lclot88/oratce/eet ?=: q** &os0 rw= &ae=re fcttu &ae.il=uhri fctfedato_d ht:/oahs:93sl/rilsslc tp/lclot88/oratce/eet ?=: q** &os0 rw= &ae=re fcttu &ae.il=uhri fctfedato_d &ae.ii= fctlmt3
  27. 27. Highlight Mise en avant des termes recherchés au sein du contenus d'un champs texte. ht:/oahs:93sl/rilsslc tp/lclot88/oratce/eet ?=otn:ateil qcnetbtlfed &lcnet f=otn ht:/oahs:93sl/rilsslc tp/lclot88/oratce/eet ?=otn:ateil qcnetbtlfed &lcnet f=otn &ltu h=re &lqcnetbtlfed h.=otn:ateil &lf=otn h.lcnet
  28. 28. Exemples d'autre modules SpellCheck Suggester (aka Autocomplete) Recherche spaciale
  29. 29. Fin

×