1 of 24

ElasticSearch

2 of 24

Contacts

Tanguy Leroux

Consultant et Formateur @ Zenika

Elasticsearch Addict

@tlrx

http://github.com/tlrx

tlrx.dev@gmail.com

Hugo Lassiège

Associé chez Lateral-Thoughts

Utilise ElasticSearch chez Hopwork

@hugolassiege

hlassiege at gmail

3 of 24

La recherche, enjeu du SI

Exemple copyright by Habib Guerguachi @DevoxxFrance

4 of 24

La recherche, enjeu du SI

Exemple copyright by Habib Guerguachi @DevoxxFrance

5 of 24

Mettons en pratique

6 of 24

Agenda

  • Mise en place

  • Indexation

  • Recherche

  • Facettes

7 of 24

Mise en place

Prérequis : Java > 6

  • Download : http://www.elasticsearch.org/download/
  • Unzip
  • Lancement elasticsearch.sh/bat
  • Check : http://localhost:9200/
  • Ouvrez le fichier elasticsearch.yml et éditez le nom de votre cluster pour y mettre votre trigramme.

Exemple :

cluster.name: elasticsearch-HLA

8 of 24

ElasticSearch

  • Indexation de document JSON

  • une API REST

  • agnostique au langage

  • Cloud Ready

  • Distribué

Et on va illustrer tout ça !

9 of 24

API REST / JSON

http://host:port/index(s)/type(s)/_action|id

Méthodes HTTP: GET, PUT, POST, DELETE

10 of 24

Quelques exemples

Indexer un document

PUT http://host:port/mediatheque/film/1

POST http://host:port/mediatheque/film/

Récupérer un document

GET http://host:port/mediatheque/film/1

Supprimer un document

DELETE http://host:port/mediatheque/film/1

Créer un index

POST http://host:port/mediatheque/musique

Rechercher

GET http://host:port/mediatheque/film/_search?q=django

GET http://host:port/_search?q=django

11 of 24

Mise en pratique :

indexer un document

Utiliser votre client REST préféré sur l'url http://localhost:9200

1. Envoyez une requête POST avec le document JSON d'un film (voir sur Github le fichier json)

2. Trouvez comment indexer le même document sans augmenter le nombre de documents dans l'index

3. Utilisez le fichier bulk.json pour indexer les 350 films

12 of 24

Mise en pratique :

rechercher un document

1. Trouvez le nombre de films comportant Django

2. Trouvez le nombre de films contenant "York" dans le champ filming_locations

3. Trouvez le nombre de films contenant "york" uniquement dans le filming_locations. Le résultat est-il différent ?

4. Trouvez le nombre de films contenant "Manhattan" puis "Manhatton" uniquement dans le champ filming_locations. Le résultat est-il différent ?

5. Corrigez la recherche précédente pour que la réponse ait le plus de résultats possibles

Bonus : En utilisant la recherche fuzzy de la dernière question, faire une recherche sur le champ filming_locations avec "Yark".

13 of 24

Mise en pratique :

rechercher un document

1. Quel est le premier film quand on recherche les films par le critère : "English" avec un boost de -1.5 sur le résumé du film ? Et sans ce boost ?

2. Moduler le score des résultats en faisant intervenir la note du film et le nombre de votes via la formule suivante : si nombre de note > 36000 alors ajout d'un bonus correspondant à la moyenne des notes (le champ rating)

3. Quel est le premier élément renvoyé avec un tri par note ?

4. Combien obtient-on d'élément si on filtre les films avec une note < 8.1 ?

14 of 24

Les facettes

Les facettes permettent d'agréger des résultats de recherche

Elle sont utilisées pour

  • classer et analyser des résultats
  • améliorer la navigation dans les résultats

ElasticSearch propose 9 types de facettes

L'idée est de faire parler les données en les regardant sous différentes facettes!

15 of 24

Terms Facet

GET 'http://localhost:9200/_search'

{

"query": {

"match": {

"titre": "django" }

},

"facets": {

"facet_genres": {

"terms": {

"field": "genre",

"size" : 10

}

}

}

}

}

16 of 24

Terms Facet (Réponse)

{

"hits":{...},

"facets":{

"facet_genres":{

"_type":"terms",

"missing":0,

"total":2,

"other":0,

"terms":[

{

"term":"western", "count":1

},

{

"term":"action", "count":1

}

]

}}}

17 of 24

Terms Facet (Réponse)

{

"hits":{...},

"facets":{

"facet_genres":{

"_type":"terms",

"missing":0,

"total":2,

"other":0,

"terms":[

{

"term":"western", "count":1

},

{

"term":"action", "count":1

}

]

}}}

18 of 24

Histogram Facet

GET 'http://localhost:9200/film/_search'

{

"query": {

"match_all": {}

},

"facets": {

"facet_entrees": {

"histogram": {

"field": "nb_entrees",

"interval": "1000000"

}

}

}

}

19 of 24

Histogram Facet (Réponse)

{

"hits": { ... },

"facets": {

"facet_entrees": {

"_type": "histogram",

"entries": [

{ "key": 1000000, "count": 1 },

{ "key": 2000000, "count": 1 },

{ "key": 3000000, "count": 1 }

]

}

}

}

20 of 24

Histogram Facet (Réponse)

{

"hits": { ... },

"facets": {

"facet_entrees": {

"_type": "histogram",

"entries": [

{ "key": 1000000, "count": 1 },

{ "key": 2000000, "count": 1 },

{ "key": 3000000, "count": 1 }

]

}

}

}

21 of 24

Date Histogram Facet

GET 'http://localhost:9200/film/_search'

{

"query": {...},

"facets": {

"facet_sortie_par_annee": {

"date_histogram": {

"field": "date_sortie", "interval": "year"

}

},

"facet_sortie_par_mois": {

"date_histogram": {

"field": "date_sortie", "interval": "month"

}

}

}

}

22 of 24

Date Histogram Facet (Réponse)

{ "hits" : {…},

"facets" : {

"facet_sortie_par_annee" : {

"_type" : "date_histogram",

"entries" : [

{ "time" : 1072915200000, "count" : 1 },

{ "time" : 1230768000000, "count" : 1 },

{ "time" : 1293840000000, "count" : 2 },

{ "time" : 1325376000000, "count" : 2 }

]

},

"facet_sortie_par_mois" : {

"_type" : "date_histogram",

"entries" : [

{ "time" : 1072915200000, "count" : 1 },...

]

}

}

}

23 of 24

Et aussi...

  • Range
  • Filter
  • Query
  • Statistical
  • Terms Stats
  • Geo Distance

24 of 24

Mise en pratique :

Les facettes

1. Quels sont les 5 genres de films les plus représentés dans le jeu de données?

2. Quels sont les différents genres des films contenant "New York" dans le titre?

3. Construire la requête contenant la facette suivante: "5 films ont une note de 1, 7 films ont une note de 2, etc"

4. Rechercher tous les films d'action et comptabiliser ceux qui ont une note comprise entre 0 et 5, 5 et 8 et plus de 8

5. Calculer les statistiques du champ "rating_count" des films contenant le mot clé "Manhattan"

6. Rechercher tous les films d'action et comptabiliser ceux qui ont un acteur ou une actrice dont le nom est "Keaton"