xebicon'16 : les requêtes avancées dans elasticsearch par gérome egron et ivan beauvais,...
TRANSCRIPT
![Page 1: XebiCon'16 : Les requêtes avancées dans ElasticSearch Par Gérome Egron et Ivan Beauvais, Développeurs Java chez Xebia](https://reader034.vdocuments.site/reader034/viewer/2022052308/587287eb1a28ab36118b459b/html5/thumbnails/1.jpg)
@xebiconfr #xebiconfr
Advanced queryingWith ElasticsearchIvan Beauvais / Gérôme Egron
@xebiconfr
KNOWLEDGE SHOULD BE FOR ALL
1
![Page 2: XebiCon'16 : Les requêtes avancées dans ElasticSearch Par Gérome Egron et Ivan Beauvais, Développeurs Java chez Xebia](https://reader034.vdocuments.site/reader034/viewer/2022052308/587287eb1a28ab36118b459b/html5/thumbnails/2.jpg)
@xebiconfr #xebiconfr
Présentation des speakers
2
![Page 3: XebiCon'16 : Les requêtes avancées dans ElasticSearch Par Gérome Egron et Ivan Beauvais, Développeurs Java chez Xebia](https://reader034.vdocuments.site/reader034/viewer/2022052308/587287eb1a28ab36118b459b/html5/thumbnails/3.jpg)
@xebiconfr #xebiconfr
Différents types de recherche
1. Recherche Full Text
2. Recherche Exacte
3. Aggrégation
3
![Page 4: XebiCon'16 : Les requêtes avancées dans ElasticSearch Par Gérome Egron et Ivan Beauvais, Développeurs Java chez Xebia](https://reader034.vdocuments.site/reader034/viewer/2022052308/587287eb1a28ab36118b459b/html5/thumbnails/4.jpg)
@xebiconfr #xebiconfr
Recherche Full text14
![Page 5: XebiCon'16 : Les requêtes avancées dans ElasticSearch Par Gérome Egron et Ivan Beauvais, Développeurs Java chez Xebia](https://reader034.vdocuments.site/reader034/viewer/2022052308/587287eb1a28ab36118b459b/html5/thumbnails/5.jpg)
@xebiconfr #xebiconfr
Indexation d’un document
POST http://localhost:9200/directory/company{ "name": "Xebia-France", "address": { "street": "156 Boulevard Haussmann", "postalCode": 75008, "city": "paris" }}
"properties": { "name": { "type": "string" }, "address": { "properties": { "city": { "type": "string" }, "postalCode": { "type": "long" }, "street": { "type": "string" } } } }
Document Mapping
5
![Page 6: XebiCon'16 : Les requêtes avancées dans ElasticSearch Par Gérome Egron et Ivan Beauvais, Développeurs Java chez Xebia](https://reader034.vdocuments.site/reader034/viewer/2022052308/587287eb1a28ab36118b459b/html5/thumbnails/6.jpg)
@xebiconfr #xebiconfr
Traitement d’un document
document
_source
fields
{ "name": "Xebia-France", "address": { "street": "156 Boulevard Haussmann", "postalCode": 75008, "city": "paris" }}
"name": "Xebia-France","address.street": "156 Boulevard Haussmann","address.postalCode": 75008,"address.city": "paris"
mapping
Index inversé
6
![Page 7: XebiCon'16 : Les requêtes avancées dans ElasticSearch Par Gérome Egron et Ivan Beauvais, Développeurs Java chez Xebia](https://reader034.vdocuments.site/reader034/viewer/2022052308/587287eb1a28ab36118b459b/html5/thumbnails/7.jpg)
@xebiconfr #xebiconfr
Index inversé
Term Frequency ID Document
xebia 1 1
france 1 1
voyages 1 2
sncf 2 2,3
"name": "Xebia-France"
"name": "Voyages-sncf""name": "sncf"
7
![Page 8: XebiCon'16 : Les requêtes avancées dans ElasticSearch Par Gérome Egron et Ivan Beauvais, Développeurs Java chez Xebia](https://reader034.vdocuments.site/reader034/viewer/2022052308/587287eb1a28ab36118b459b/html5/thumbnails/8.jpg)
@xebiconfr #xebiconfr
Analyse
● Dépend du mapping du champ● Effectué en 3 phases : Filter, Tokenizer, Token Filter● Appliqué sur les valeurs des champs avant l’enregistrement
dans l’index inversé● N’impacte pas le document original sauvegardé (_source)
8
![Page 9: XebiCon'16 : Les requêtes avancées dans ElasticSearch Par Gérome Egron et Ivan Beauvais, Développeurs Java chez Xebia](https://reader034.vdocuments.site/reader034/viewer/2022052308/587287eb1a28ab36118b459b/html5/thumbnails/9.jpg)
@xebiconfr #xebiconfr
Analyse : exemple
"Bienvenue à la XebiCon" Filter Tokenizer Index
"bienvenue a la xebicon"
["bienvenue", "a","la","xebicon"]
["bienvenue","xebicon”]
match: {title : "La xebicon"}Filter Tokenizer Token Filter query
match: {title : "la xebicon"}
match: {title : ["la", "xebicon"]}
match: {title : "xebicon"}
Recherche
Indexation
Token Filter
Stop word : a, la
9
![Page 10: XebiCon'16 : Les requêtes avancées dans ElasticSearch Par Gérome Egron et Ivan Beauvais, Développeurs Java chez Xebia](https://reader034.vdocuments.site/reader034/viewer/2022052308/587287eb1a28ab36118b459b/html5/thumbnails/10.jpg)
@xebiconfr #xebiconfr
Scoring des documents
● Term frequency : plus un terme est présent dans un champ plus le score est élevé
● Inverse document frequency : plus un terme est présent dans tous les documents de l’index moins le score est élevé
● Field-length norm : Plus le champ est court plus le score est élevé
10
![Page 11: XebiCon'16 : Les requêtes avancées dans ElasticSearch Par Gérome Egron et Ivan Beauvais, Développeurs Java chez Xebia](https://reader034.vdocuments.site/reader034/viewer/2022052308/587287eb1a28ab36118b459b/html5/thumbnails/11.jpg)
@xebiconfr #xebiconfr
Match query
GET my_index/company/_search{ "query": { "match": { "name": "La Xebicon" } }}
Result : { "_index": "my_index", "_type": "company", "_id": "1", "_score": 0.2169777, "_source": { "name": "Bienvenue à la XebiCon" }}
11
![Page 12: XebiCon'16 : Les requêtes avancées dans ElasticSearch Par Gérome Egron et Ivan Beauvais, Développeurs Java chez Xebia](https://reader034.vdocuments.site/reader034/viewer/2022052308/587287eb1a28ab36118b459b/html5/thumbnails/12.jpg)
@xebiconfr #xebiconfr
Recherche Exacte212
![Page 13: XebiCon'16 : Les requêtes avancées dans ElasticSearch Par Gérome Egron et Ivan Beauvais, Développeurs Java chez Xebia](https://reader034.vdocuments.site/reader034/viewer/2022052308/587287eb1a28ab36118b459b/html5/thumbnails/13.jpg)
@xebiconfr #xebiconfr
Recherche exacte
● Similaire à une clause "where" en SQL● Pas de score sur les documents : le document respecte la
condition ou ne la respecte pas● Coupler à la recherche full texte permet de réduire le nombre de
document à scorer● Mis en cache
13
![Page 14: XebiCon'16 : Les requêtes avancées dans ElasticSearch Par Gérome Egron et Ivan Beauvais, Développeurs Java chez Xebia](https://reader034.vdocuments.site/reader034/viewer/2022052308/587287eb1a28ab36118b459b/html5/thumbnails/14.jpg)
@xebiconfr #xebiconfr
Mapping
Recherche Full Text
"content": { "type": "string", "analyzer": "standard" "index" : "analyzed"}
Recherche exacte
"sendDate": { "type": "date", "format": "YYYYMMddHHmmss"}
"age": { "type": "integer"}
"author": { "type": "string", "index": "not_analyzed"}
14
![Page 15: XebiCon'16 : Les requêtes avancées dans ElasticSearch Par Gérome Egron et Ivan Beauvais, Développeurs Java chez Xebia](https://reader034.vdocuments.site/reader034/viewer/2022052308/587287eb1a28ab36118b459b/html5/thumbnails/15.jpg)
@xebiconfr #xebiconfr
Recherche full text vs Recherche exacte
analyze
Match query
Scope query
Scoring
Recherche Full Text
Not analyzed
term query
Scope filter
Bool result
Recherche exacte
15
![Page 16: XebiCon'16 : Les requêtes avancées dans ElasticSearch Par Gérome Egron et Ivan Beauvais, Développeurs Java chez Xebia](https://reader034.vdocuments.site/reader034/viewer/2022052308/587287eb1a28ab36118b459b/html5/thumbnails/16.jpg)
@xebiconfr #xebiconfr
Bool query : must
GET _search{ "query": { "bool": { "must": [ { "match": { "content": { "value": "La Xebicon" } } }, { "match": { "content": "Xebia" } } ] } }}
16
![Page 17: XebiCon'16 : Les requêtes avancées dans ElasticSearch Par Gérome Egron et Ivan Beauvais, Développeurs Java chez Xebia](https://reader034.vdocuments.site/reader034/viewer/2022052308/587287eb1a28ab36118b459b/html5/thumbnails/17.jpg)
@xebiconfr #xebiconfr
Bool query : should
GET _search{ "query": { "bool": { "should": [ { "match": { "content": { "value": "La Xebicon" } } }, { "match": { "content": "Xebia" } } ] } }}
17
![Page 18: XebiCon'16 : Les requêtes avancées dans ElasticSearch Par Gérome Egron et Ivan Beauvais, Développeurs Java chez Xebia](https://reader034.vdocuments.site/reader034/viewer/2022052308/587287eb1a28ab36118b459b/html5/thumbnails/18.jpg)
@xebiconfr #xebiconfr
Bool query : must_not
GET _search{ "query": { "bool": { "must_not": [ { "match": { "content": { "value": "2015" } } } ] } }}
18
![Page 19: XebiCon'16 : Les requêtes avancées dans ElasticSearch Par Gérome Egron et Ivan Beauvais, Développeurs Java chez Xebia](https://reader034.vdocuments.site/reader034/viewer/2022052308/587287eb1a28ab36118b459b/html5/thumbnails/19.jpg)
@xebiconfr #xebiconfr
Bool query : filter
GET _search{ "query": { "bool": { "filter": [ { "term": { "age": { "value": 12 } } } ] } }}
19
![Page 20: XebiCon'16 : Les requêtes avancées dans ElasticSearch Par Gérome Egron et Ivan Beauvais, Développeurs Java chez Xebia](https://reader034.vdocuments.site/reader034/viewer/2022052308/587287eb1a28ab36118b459b/html5/thumbnails/20.jpg)
@xebiconfr #xebiconfr
Aggregation320
![Page 21: XebiCon'16 : Les requêtes avancées dans ElasticSearch Par Gérome Egron et Ivan Beauvais, Développeurs Java chez Xebia](https://reader034.vdocuments.site/reader034/viewer/2022052308/587287eb1a28ab36118b459b/html5/thumbnails/21.jpg)
@xebiconfr #xebiconfr
Aggregation
● Equivalent à "count", "groupBy", "Max" ... en SQL● On ne remonte plus des documents mais on collecte des
informations contenues dans les champs des documents● Utilisés conjointement aux filtres
21
![Page 22: XebiCon'16 : Les requêtes avancées dans ElasticSearch Par Gérome Egron et Ivan Beauvais, Développeurs Java chez Xebia](https://reader034.vdocuments.site/reader034/viewer/2022052308/587287eb1a28ab36118b459b/html5/thumbnails/22.jpg)
@xebiconfr #xebiconfr
Bucket aggregation
"name" : "Pierre","age" : 12
"name" : "Paul","age" : 16
"name" : "Jacques","age" : 8
Pierre count : 2 Paul count : 1Jacques count : 1
"name" : "Pierre","age" : 20 Term
aggregation sur "name"
22
![Page 23: XebiCon'16 : Les requêtes avancées dans ElasticSearch Par Gérome Egron et Ivan Beauvais, Développeurs Java chez Xebia](https://reader034.vdocuments.site/reader034/viewer/2022052308/587287eb1a28ab36118b459b/html5/thumbnails/23.jpg)
@xebiconfr #xebiconfr
Metrics aggregation
"name" : "Pierre","age" : 12
"name" : "Paul","age" : 16
"name" : "Jacques","age" : 8
Avg : 14
"name" : "Pierre","age" : 20 Avg
aggregation sur "age"
23
![Page 24: XebiCon'16 : Les requêtes avancées dans ElasticSearch Par Gérome Egron et Ivan Beauvais, Développeurs Java chez Xebia](https://reader034.vdocuments.site/reader034/viewer/2022052308/587287eb1a28ab36118b459b/html5/thumbnails/24.jpg)
@xebiconfr #xebiconfr
Sub aggregation
"name" : "Pierre","age" : 12
"name" : "Paul","age" : 16
"name" : "Jacques","age" : 8
"name" : "Pierre","age" : 20
Term aggregation sur "name"
Avg aggregation
sur "age"
Pierre avg : 16 Paul avg : 16Jacques avg : 8
Pierre Paul Jacques
24
![Page 25: XebiCon'16 : Les requêtes avancées dans ElasticSearch Par Gérome Egron et Ivan Beauvais, Développeurs Java chez Xebia](https://reader034.vdocuments.site/reader034/viewer/2022052308/587287eb1a28ab36118b459b/html5/thumbnails/25.jpg)
@xebiconfr #xebiconfr
Pipeline aggregation
Avg : 13.3
"name" : "Pierre","age" : 12
"name" : "Paul","age" : 16
"name" : "Jacques","age" : 8
"name" : "Pierre","age" : 20
Term aggregation sur
"name"
Avg aggregation sur "age"
Pierre Paul Jacques
Pierre avg : 16 Paul avg : 16Jacques avg : 8
Pipeline aggregation average sur
"age par nom"
25
![Page 26: XebiCon'16 : Les requêtes avancées dans ElasticSearch Par Gérome Egron et Ivan Beauvais, Développeurs Java chez Xebia](https://reader034.vdocuments.site/reader034/viewer/2022052308/587287eb1a28ab36118b459b/html5/thumbnails/26.jpg)
@xebiconfr #xebiconfr
Aggregation en pratique
● Moyenne, minimum, maximum des prix sur un scope de document
● Somme des valeurs d’un champ numérique de tous les documents
● Percentiles des temps de réponse stockés dans l’index● Toutes les valeurs possibles pour un champ● Nombre de document compris entre des plages de dates ou des
coordonnées GPS
26
![Page 27: XebiCon'16 : Les requêtes avancées dans ElasticSearch Par Gérome Egron et Ivan Beauvais, Développeurs Java chez Xebia](https://reader034.vdocuments.site/reader034/viewer/2022052308/587287eb1a28ab36118b459b/html5/thumbnails/27.jpg)
@xebiconfr #xebiconfr
Hand’s on !https://gegron.github.io/es-requests/
27
![Page 28: XebiCon'16 : Les requêtes avancées dans ElasticSearch Par Gérome Egron et Ivan Beauvais, Développeurs Java chez Xebia](https://reader034.vdocuments.site/reader034/viewer/2022052308/587287eb1a28ab36118b459b/html5/thumbnails/28.jpg)
@xebiconfr #xebiconfr
Vous avez vu
● Ajouter/Supprimer/Rechercher des documents● Utiliser la mapping afin de supprimer le code html du texte● Utiliser le mapping pour ajouter des synonymes● Rechercher avec une "Match" query● Filtrer sur un range de date● Faire une recherche sur plusieurs champs ● Faire de la suggestion en mode "fuzzy"● Agréger par term et par term de term ● Faire des requêtes géolocalisées● Faire des agrégations sur des distances à un point
28