Moteurs de recherche : un oeil sous le capot avec Elastic Search

Preview:

DESCRIPTION

Introduction to Lucene-based search engines with ElasticSearch

Citation preview

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