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
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
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"
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.
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
...
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
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
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
<u
h=re
&lqcnetbtlfed
h.=otn:ateil
&lf=otn
h.lcnet