Moteurs de recherche
un oeil sous le capot
/me
@Audrey_Neveu
@Programatoo @Devoxx4KidsFR
@
Un moteur de recherche pour quoi faire ?
Un moteur de recherche pour quoi faire ?
● cas d’école : site de e-commerce
● mais aussi réseaux sociaux, sites de
streaming … sites à “contenus”.
● pour apporter de la recherche “Google like”
à nos utilisateurs de SI.
Architecture type e-commerce
Site BUs Site web
Apache Lucene
écrit en Java, lancé en 2000
Elastic Search vs Solr
API Scalabilité Communauté
SIMPLICITE
Recherche
Use Case
Magasin de livres en ligne.curl -XPUT 'http://localhost:9200/store/book/1' -d
'{
"titre" : "H2G2 Le Guide du voyageur galactique, Tome 1 Le guide du voyageur galactique",
"auteur" : ["Douglas Adams"],
"editeur" : "Gallimard",
"genre" : "Science-Fiction",
"ISBN" : "2070437434",
"date de parution" : "11/03/2010",
"prix" : "6.27"
}'
Démo #1
Architecture type e-commerce
Site BUs Site web
Rivers
Plugin qui automatise l’indexation des documents
Rivers
Plugin qui automatise l’indexation des documents
Rivers
Plugin qui automatise l’indexation des documents
Rivers
Plugin qui automatise l’indexation des documents
Rivers
Plugin qui automatise l’indexation des documents
Architecture type e-commerce
Site BUs Site web
Avant de pouvoir rechercher
Un peu de config :
● les index
● les analyseurs
● le mapping
Prérequis : une bonne connaissance du métier
Les index regroupent des documents de même nature pour faciliter leur recherche.
Step 1/ J’indexe
Step 2/ J’analyse
“L’indexation repose sur un Analyzer,
qui n’est autre qu’un ensemble
de Tokenizers
et de TokenFilters.”
Les analyseurs
● Un tokenizer retourne une liste de tokens.
● Un filtre va modifier ou supprimer un token.
● Un analyzer = tokenizer + 0 … *
tokenFilters.
Analyseur standard
Analyzer = Tokenizer + TokenFilter"analyzer" : {
"myFrenchAnalyzer" : {
"type" : "custom",
"tokenizer" : "standard",
"filter" : [ "lowercase", "elision", "frenchStopWord" ]
}
},
"filter" : {
"elision" : {
"type" : "elision",
"articles" : [ "l" , "j" , "d" , "m" , "n" , "s" , "c" , "qu" , "t" ]
} ,
"frenchStopWord" : {
"type" : "stop",
"stopwords" : [ "_french_" ]
}
}
Démo #2
Testons l’indexation
L’indexation repose sur un Analyzer,
qui n’est autre qu’un ensemble
de Tokenizers
et de TokenFilters.
Standard Token Filter
L’indexation repose sur un Analyzer,
qui n’est autre qu’un ensemble
de Tokenizers
et de TokenFilters.
Lower Case Token Filter
l’indexation repose sur un analyzer,
qui n’est autre qu’un ensemble
de tokenizers
et de tokenfilters.
Elision Token Filter
l’indexation repose sur un analyzer,
qui n’est autre qu’un ensemble
de tokenizers
et de tokenfilters.
Stop Token Filter
l’indexation repose sur un analyzer,
qui n’est autre qu’un ensemble
de tokenizers
et de tokenfilters.
Résultat
L’indexation repose sur un Analyzer, qui n’est autre qu’un
ensemble de Tokenizers et de TokenFilters.
indexation repose analyzer autre ensemble tokenizers
tokenfilters
Le mapping
● Le mapping définit la façon dont les fields seront indexés.
● Le mapping par défaut d’ES va gérer dynamiquement tous les types.
● Mais il peut parfois être utile de définir soi même le mapping ...
Les fields_uid id + type
_id id
type field type du document
_source JSON passé à l’indexation
_all tous les champs
_analyzer l’analyseur à utiliser pour indexer le document
_ttl date d’expiration (time to live)
...
Les types
String Objects
Integer / Long Multi Fields
Float / Double IP
Boolean Geo Point
Date Geo Shape
Null attachment
Array ...
Custom Mapping{
"titre" : "H2G2 Le Guide du voyageur
galactique, Tome 1 Le guide
du voyageur galactique",
"auteur" : ["Douglas Adams"],
"editeur" : "Gallimard",
"genre" : "Science-Fiction",
"ISBN" : "2070437434",
"date de parution" : "11/03/2010",
"prix” : "6.27"
}
curl -XPUT 'http://localhost:9200/store/book/_mapping'
-d '{
"book" : {
"properties" : {
"genre" : {
"type" : "string",
"analyzer" : "keyword"
},
"_source" : {
"enabled" : false
}
}
}
}'
Step 3/ Je recherche !
Où l’on va parler ...
● query
● filters
● facets
● mais aussi sort, pagination, boost, score ...
Contenu de l’index
science fiction
fantasy
jeunesse
Livres
Comics
aventure
fantasy
AuteursYX Z
YY
X
X
X
Y
Y
Y
X
X
Z
Y
Y
Y
X
X
X
X
X
X
X
X
X
X
X
X
X
X
Z
Z
Z
Z
Objectif
Démo #3
Stay tuned
http://www.elasticsearch.org/
@ElasticsearchFR@Dadoonet (David Pilato)
https://groups.google.com/forum/#!forum/elasticsearch-fr