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"