Solr overview presentation

29
0

description

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

Transcript of Solr overview presentation

Page 1: Solr overview presentation

0

Page 2: Solr overview presentation

Développeur chez , Marseille

Armand Abric

Virtual-Expo

/ @ / forgebinaire.net spyseth github.com/spy-seth

Page 3: Solr overview presentation

Introduction

Page 4: Solr overview presentation

Solr ?Moteur de recherche fulltext utilisant l'algorithme Lucene

= Base de données non relationnelle spécialisée dans la recherchetextuelle

Développé par la Fondation Apache

Actuellement en version 4.6.1

Page 5: Solr overview presentation

Interface d'administration

Page 6: Solr overview presentation

CommunicationsAPI 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

Page 7: Solr overview presentation

Structure interne Solr

Page 8: Solr overview presentation

schema.xml<?xml version="1.0" encoding="UTF-8" ?><schema name="store" version="1.5"> <types> <fieldtype name="string" class="solr.StrField" /> <fieldType name="int" class="solr.IntField" /> <fieldType name="double" class="solr.DoubleField" /> <fieldType name="latLon" class="solr.LatLonType" [...] /> </types>

<fields> <field name="id" type="int" indexed="true" stored="true" required="true" /> <field name="name" type="string" indexed="true" stored="false" required="true" /> <field name="owner_id" type="int" indexed="true" stored="true" multiValued="true" required="true" /> <field name="coordinates" type="latLon" indexed="true" stored="false" required="true" />

[...] </fields>

<uniqueKey>id</uniqueKey> <solrQueryParser defaultOperator="OR" /></schema>

Page 9: Solr overview presentation

Solr vs SGBD relationnelsPrincipales différences à l'usage :

Pas de jointure complexe, mais des jointures simplesPas de sous-requêtesTransactionnel aux coeurs du logiciel : toutes modifications dedonnées se fait dans une transaction (commit/rollback obligatoire)La notion "d'égalité" varie en fonction du core et du champs surlequel on travailleUn changement dans le fichier schema.xml entraine une ré-indexationcomplète des données

Page 10: Solr overview presentation

Solr dans le SIUn 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"

Page 11: Solr overview presentation

Indexation

Page 12: Solr overview presentation

IndexationL'indexation consiste à stocker des données au sein de Solr

C'est durant cette phase que Solr construit ses index internes qui luipemettent d'être très performant

Pour indexer des données il suffit de faire une requête HTTP sur unrequestHandler d'update du core

Les données doivent être envoyé en XML ou JSON<add> <doc> <field name="id">SP2514N</field> <field name="name">Samsung SpinPoint P120 SP2514N - hard drive - 250 GB</field> <field name="cat">electronics</field> <field name="cat">hard drive</field> <field name="features">7200RPM, 8MB cache, IDE Ultra ATA-133</field> <field name="features">NoiseGuard, SilentSeek technology</field> <field name="price">92</field> <field name="popularity">6</field> <field name="inStock">true</field> </doc> <doc> [...] </doc></add>

Page 13: Solr overview presentation

Le processus d'indexationIl existe trois méthodes pour gérer l'indexation :

Full indexation : un bach d'indexation ré-indexe toutes les données àinterval régulierIndexation incrémentale : un bach d'indexation indexe leschangements depuis la dernière indexationIndexation en live : lors de la sauvegarde d'une entité dans le reste duSI, 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.

Page 14: Solr overview presentation

Text analysis

Page 15: Solr overview presentation

Un vrai fieldType<?xml version="1.0" encoding="UTF-8" ?><!-- [...] --><fieldType name="text_en" class="solr.TextField"> <analyzer type="index"> <tokenizer class="solr.WhitespaceTokenizerFactory" /> <filter class="solr.SynonymFilterFactory" synonyms="synonyms_en.txt" ignoreCase="true" expand="true" /> <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_en.txt" enablePositionIncrements="true" /> <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1" /> <filter class="solr.LowerCaseFilterFactory" /> <filter class="solr.ASCIIFoldingFilterFactory"/> <filter class="solr.SnowballPorterFilterFactory" language="English" /> </analyzer> <analyzer type="query"> <tokenizer class="solr.WhitespaceTokenizerFactory" /> <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_en.txt" enablePositionIncrements="true" /> <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1" /> <filter class="solr.LowerCaseFilterFactory" /> <filter class="solr.ASCIIFoldingFilterFactory"/> <filter class="solr.SnowballPorterFilterFactory" language="English" /> </analyzer></fieldType><!-- [...] -->

Page 16: Solr overview presentation

fieldType bisUne 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éciauxgérer des synonymesretirer les balises HTMLgérer les accents en fonction de la langue...

Page 17: Solr overview presentation

Va chercher !

Page 18: Solr overview presentation

Présentation de la synthaxehttp://localhost:8983/solr/[core]/[requestHandler]?[params]

Page 19: Solr overview presentation

Paramètres de baseq : coeur de la requête de recherchefq : clause "where" de filtre des résultats (plusieurs autorisés)fl : liste des champs du document a retournerrows : limitstart : offsetsort : ordonancement des résulats

Page 20: Solr overview presentation

Requêtes simples

http://localhost:8983/solr/articles/select?q=*:*

http://localhost:8983/solr/articles/select?q=content:battlefield

&fl=id,content

http://localhost:8983/solr/articles/select

?q=content:(battlefield DICE)

&fl=id,content

http://localhost:8983/solr/articles/select

?q=content:"battlefield DICE"

&fl=id,content

http://localhost:8983/solr/articles/select

?q=content:"battlefield DICE"~10

&fl=id,content

http://localhost:8983/solr/articles/select

?q=content:battlefield AND author_id:2

&fl=id,content,author_id

Page 21: Solr overview presentation

Recherchesavancées

Page 22: Solr overview presentation

Search revelancy

Scoring : Personaliser l'importance des clauses de match de la requête(uniquement le paramètre "q")

http://localhost:8983/solr/articles/select

?q=content:battlefield AND (author_id:2 OR author_id:3 OR author_id:4)

&fl=id,content,author_id

Favorisons l'auteur #2 : "author_id:2̂100"

http://localhost:8983/solr/articles/select

?q=content:battlefield AND (author_id:2̂100 OR author_id:3 OR author_id:4)

&fl=id,content,author_id

Page 23: Solr overview presentation

Debugging et aspirineRelançons la requête précédente en affichant les informations de débug

"&debugQuery=true"

http://localhost:8983/solr/articles/select

?q=content:battlefield AND (author_id:2̂100 OR author_id:3 OR author_id:4)

&fl=id,content,author_id

&debugQuery=true

&indent=true

Page 24: Solr overview presentation

GroupingLe groupement Solr est équivalant au groupement SQL

Au détail près que l'on ne peut pas grouper sur le plusieurs champs. Parcontre on peut faire plusieurs groupement différent en une requête.

http://localhost:8983/solr/articles/select

?q=content:battlefield

&group=true

&group.field=game_id

&group.limit=3

&fl=id,content

Page 25: Solr overview presentation

Faceting

Page 26: Solr overview presentation

Facetinghttp://localhost:8983/solr/articles/select

?q=*:*

&rows=0

&facet=true

&facet.field=author_id

http://localhost:8983/solr/articles/select

?q=*:*

&rows=0

&facet=true

&facet.field=author_id

&facet.limit=3

Page 27: Solr overview presentation

HighlightMise en avant des termes recherchés au sein du contenus d'un champs

texte.

http://localhost:8983/solr/articles/select

?q=content:battlefield

&fl=content

http://localhost:8983/solr/articles/select

?q=content:battlefield

&fl=content

&hl=true

&hl.q=content:battlefield

&hl.fl=content

Page 28: Solr overview presentation

Exemples d'autre modulesSpellCheckSuggester (aka Autocomplete)Recherche spaciale

Page 29: Solr overview presentation

Fin