Top Banner
Elastic Search Inutile de chercher ailleurs
69

Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Sep 13, 2018

Download

Documents

dinhdieu
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Elastic

Search Inutile de chercher ailleurs

Page 2: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Who's who

• Gérald Croës

• Thèse sur les bases de données fragmentées avec

indexations multiples et réparties.

• Expert en analyse comportementale dans les processus de

"recherche synchrone et asynchrone".

• Julien Salleyron

• Consultant moteurs de recherche depuis 15 ans.

• Lead du projet "Alpha Search", moteur de recherche en 4D.

Page 3: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Who's who

• Gérald Croës

• Thèse sur les bases de données fragmentées avec

indexations multiples et réparties.

• Expert en analyse comportementale dans les processus de

"recherche synchrone et asynchrone".

• Julien Salleyron

• Consultant moteurs de recherche depuis 15 ans.

• Lead du projet "Alpha Search", moteur de recherche en 4D.

Page 4: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Who’s who

Gérald Croës

@geraldcroes

www.croes.org/gerald/

[email protected]

Julien Salleyron

@juguul

[email protected]

Page 5: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Il n'y a pas si longtemps

Page 6: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

"Moi je veux Google"

Page 7: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

A la Google, c'est quoi ?

Page 8: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Inadapté…

Page 9: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Perdu ?

. Vous êtes ici

Page 10: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Les solutions…

Page 11: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

…Open Source…

Page 12: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

…Qu'on a compris en moins de 10 minutes.

Page 13: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

…Qu'on a compris en moins de 10 minutes.

Page 14: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

C'est du JAVA !?

Page 15: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

RESTez !

Page 16: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

En gros…

• Open Source (licence Apache 2)

• Orienté Document *

• Pas de schéma établi (schema less)

• Scalabilité (oui, c’est un Anglicisme)

• JSON

• Rapide

• Langage de requête puissant

* Un peu comme

Page 17: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Une base de

données orientée

recherche

Page 18: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Un peu de vocabulaire

• Index – Lieu de stockage pour un ensemble fonctionnel

(exemple : boutique contient des CD, Livres, DVD,

Aspirateurs, …)

• Type – Une famille de documents

• Document – Un élément typé et identifié

Page 19: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

L'exemple d'une boutique

Type

CD

Type

DVD Type

Livre

Page 20: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Avant de mettre

en pratique REST… tout le monde connait ?

Page 21: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Rappels sur la grammaire

REST*

* Le truc qui marche bien avec un file_get_contents

GET - Lecture

POST - Création

PUT - Modification

DELETE - Suppression

Page 22: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Vocabulaire en pratique

http://elastic_search:port/index/type/identifiant

http://elastic_search:port/boutique/livre/978-0201633610

{

Titre : Design Patterns

Auteurs : [Eric Gamma, Richard Helm, Ralph Johnson, John Vlissides]

}

Page 23: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

http://elastic_search:port/index/type/identifiant

http://elastic_search:port/boutique/dvd/B001E08UMU

{

Titre : Matrix 2 Reloaded

Minutes : 138

}

Vocabulaire en pratique

Page 24: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Remplir la base

Elastic Search

Page 25: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

POST = Demande de

Création

{

"ok" : true,

"_index" : "boutique",

"_type" : "cd",

"_id" : "B000031WBV",

"_version" : 1

}

RE

ST

curl -XPOST http://elastic_search:port/boutique/cd -d '{

"titre" : "19 Nocturnes",

"artiste" : "Arthur Rubinstein",

"compositeur" : "Fryderyk Chopin",

"genre" : "classique"

} '

Page 26: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

PUT= Demande de MAJ /

Création / Mise à jour

{

"ok" : true,

"_index" : "boutique",

"_type" : "cd",

"_id" : "B000031WBV",

"_version" : 2

}

RE

ST

curl -XPUT http://elastic_search:port/boutique/cd/B000031WBV -d '{

"titre" : "19 Nocturnes",

"artiste" : "Arthur Rubinstein",

"compositeur" : "Fryderyk Chopin",

"genre" : "classique"

} '

Page 27: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Une première

recherche ? Brute… mais recherche tout de même

Page 28: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Quels documents

concernent Chopin ?

{

"took" : 153,

"timed_out" : false,

"_shards":{"total":5,"successful":5,"failed":0},

"hits":

{

"total" : 1,

"max_score" : 0.11506981,

"hits":[{

"_index" : "boutique",

"_type" : "cd",

"_id" : "4J7iyPPvSXW1Rjufu0oJbg",

"_score" : 0.11506981,

"_source" : {

titre : "19 Nocturnes",

artiste : "Arthur Rubinstein",

compositeur : "Fryderyk Chopin",

genre : "classique"

}

}]

}

}

curl -XGET http://elastic_search:port/boutique/_search?q=Chopin

Dans ES, les actions sont préfixées de underscore "_"

Page 29: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

La magie dans les

coulisses Qui ne tient toutefois pas du miracle

Page 30: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Décrire les types avec

Json Schema

{

"cd" : {

"properties" : {

"titre" : {

"type" : "string"

},

"sortie" : {

"type" : "date",

"format" : "date_time_no_millis"

},

"disque" : {

"properties" : {

"piste" : string

}

}

}

}

}

Core Types

Implicite

Imbrication

Types • string

• number

• date

• boolean

• binary

• object

• array

• multi_field

• attachment Plus tard…

Page 31: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

elastichead

Page 32: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Mais ce n'est

toujours pas

suffisant… Indexation & Recherche

Page 33: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

La chaine

d'analyse Quand "WTF Dude ?" devient "Mais qu'est-ce

que cette chose étrange, très cher ami ?"

Page 34: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

CharFilter Pré-processeur sur la chaine de

charactères

Page 35: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

CharFilter - Mapping

[ ‘ph’=>’f’]

[ ‘qu’=>’k’]

Page 36: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

CharFilter - HTML Strip

<p>Texte

<strong>indexé</strong></p>

Texte indexé

Page 37: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Tokenizer Découpage de la chaine de caractère

en token

Page 38: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Tokenizer - Standard

Texte en token-standard

[Texte]

[en]

[token]

[standard]

Page 39: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Tokenizer - Whitespace

Texte en token-whitespace

[Texte]

[en]

[token-whitespace]

Page 40: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Tokenizer - Edge NGram

Texte ngram

[Te][Tex][Text][Texte]

[ng][ngr][ngra][ngram]

Page 41: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Tokenizer - NGram

Texte ngram

[Te][Tex][Text][Texte][ex][ext][exte]

[xt][xte] [te]

[ng][ngr][ngra][ngram]

[gr][gra][gram]

[ra][ram] [am]

Page 42: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Tokenizer - keyword

Texte en keyword

[Texte en keyword]

Page 43: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Tokenizer - path

hierarchy

/root/branch/leaf

[/root]

[/root/branch]

[/root/branch/leaf]

Page 44: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Token Filter Filtrage, Enrichissement et

Modification des tokens

Page 45: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Token Filter - Lowercase

[Texte][à][indexer]

[texte][à][indexer]

Page 46: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Token Filter - AsciiFolding

[texte][à][indexer]

[texte][a][indexer]

Page 47: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Token Filter – Length (ex.

3-5)

[texte][a][indexer]

[texte]

Page 48: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Token Filter - Stemmer

[indexe][indexer][indexation]

[index]

Page 49: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Token Filter - Ellision

[l’avion]

[avion]

Page 50: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Token Filter - Stop

[le][chien][est][noir]

[chien][noir]

Page 51: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Token Filter - Synonym

[Documentation]

[Documentation][Forum][Manuel][RTFM]

Page 52: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Token Filter

Hunspell

Kstem

Snowball

Phonetic

Page 53: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Dans l’ordre !

Char Filter

Tokenizer

Token Filter

HTMLStrip

<p>Mon super texte, avec

accents, créées</p>

Mon super texte, avec

accents , créées

Letter Tokenizer

Whitespace

• mon

• super

• texte

• avec

• accents

• créées

• super

• text

• accen

• cree

Stemmer

Ascii folding

Snowball

Page 54: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

La recherche Profiter du travail réalisé

Page 55: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Le langage de requête

curl -XPOST

curl –XGET

'http://elastic_search:port/boutique/_search' -d

{"query":

{"match":

{"titre" : "matrix reloaded"}

}

}

_search

Query DSL

Page 56: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

La réponse

{

"took" : 153, …

{

"total":2, "max_score":0.91506981,

"hits":[{

"_index" : "boutique",

"_type" : "dvd",

"_id":"5Gh3y…",

"_score":0.91506981,

"_source" : {

titre:"Matrix Reloaded", …

}

}, …]

}

}

Page 57: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Les tokens, toujours les tokens…

{ match:

{ ‘titre’: ‘Matrix reloaded’ }

}

[matrix] [reloaded]

Titre : Matrix Reloaded

Description : Neo apprend à mieux

contrôler ses dons naturels …

Page 58: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Un problème mis en lumière

{ match:

{ ‘titre.ngram’: ‘Matrix’ }

}

[ma] [mat] [matr] [matri] [matrix]

Titre : Matrix Reloaded

Description : Neo …

Titre : Maman j’ai raté la conf

Description : …

Page 59: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Forcer l'analyzer

{ match:

{ ‘titre.ngram’: {'query' : ‘Matri’,

‘analyzer’ : ’keyword’ }}

}

[matri]

Titre : Matrix Reloaded

Description : Neo …

Titre : Maman j’ai raté la conf

Description : …

Page 60: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Requête multi propriétés

{"query":

"bool":{

"should": [

{"match":

{"titre": "neo"}

},

{"match":

{"description": "neo"}

},

]

}

}

Page 61: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Ce qui donne

[

{ match: { ‘titre’: ‘neo’} },

{ match: { ‘description’: ‘neo’} },

]

Titre : Matrix Reloaded

Description : Neo …

Page 62: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Le plus important ?

[

{ match: { ‘titre’: ‘Matrix’} },

{ match: { ‘description’: ‘Matrix’} },

]

Titre : Matrix

Description : Neo …

Titre : Cloud atlas

Description : Par les réalisateurs de

Matrix, Matrix Reloaded …

Page 63: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

La pertinence

Page 64: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Boost

[

{ match: { ‘titre^4’: ‘Matrix’} },

{ match: { ‘description’: ‘Matrix’} },

]

Titre : Matrix

Description : Neo …

_score : 0.945

Titre : Cloud atlas

Description : Par les réalisateurs de

Matrix, Matrix Reloaded …

_score : 0.911

Page 65: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Et si seulement

c'était tout… Il existe tellement d'options que nous ne

pouvons pas tout citer

Page 66: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Des mots clefs à retenir

• Filter

• Facets

• Suggests

• Highlight

• River

• Plugins

• Fuzzy

• Like this

• Sharding

• …

Page 67: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Cerise sur le

globiboulga Un plugin existe pour gérer les documents

bureautiques classiques

Page 68: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Conclusion &

DEMO ! :-) Réalisée en une demi journée

Page 69: Elastic Search - Gerald's Blog | PHP & Technologies de … · – Une famille de documents •Document – Un élément typé et identifié . L'exemple d'une boutique Type CD Type

Questions ?