Your SlideShare is downloading. ×
0
Solr overview presentation
Solr overview presentation
Solr overview presentation
Solr overview presentation
Solr overview presentation
Solr overview presentation
Solr overview presentation
Solr overview presentation
Solr overview presentation
Solr overview presentation
Solr overview presentation
Solr overview presentation
Solr overview presentation
Solr overview presentation
Solr overview presentation
Solr overview presentation
Solr overview presentation
Solr overview presentation
Solr overview presentation
Solr overview presentation
Solr overview presentation
Solr overview presentation
Solr overview presentation
Solr overview presentation
Solr overview presentation
Solr overview presentation
Solr overview presentation
Solr overview presentation
Solr overview presentation
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Solr overview presentation

208

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.

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
208
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 0
  • 2. Armand Abric Développeur chez Virtual-Expo, Marseille forgebinaire.net / @spyseth / github.com/spy-seth
  • 3. Introduction
  • 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. Interface d'administration
  • 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. Structure interne Solr
  • 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. 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. 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. Indexation
  • 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. 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. Text analysis
  • 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. 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. Va chercher !
  • 18. Présentation de la synthaxe ht:/oahs:93sl/cr][eusHnlr?prm] tp/lclot88/or[oe/rqetade][aas
  • 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. 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. Recherches avancées
  • 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. 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. 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. Faceting
  • 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. 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. Exemples d'autre modules SpellCheck Suggester (aka Autocomplete) Recherche spaciale
  • 29. Fin

×