SlideShare a Scribd company logo
1 of 28
Download to read offline
@xebiconfr #xebiconfr
Advanced querying
With Elasticsearch
Ivan Beauvais / Gérôme Egron
@xebiconfr
KNOWLEDGE SHOULD BE FOR ALL
1
@xebiconfr #xebiconfr
Présentation des speakers
2
@xebiconfr #xebiconfr
Différents types de recherche
1. Recherche Full Text
2. Recherche Exacte
3. Aggrégation
3
@xebiconfr #xebiconfr
Recherche Full text
1
4
@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
@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
@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
@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
@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
@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
@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
@xebiconfr #xebiconfr
Recherche Exacte
2
12
@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
@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
@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
@xebiconfr #xebiconfr
Bool query : must
GET _search
{
"query": {
"bool": {
"must": [
{
"match": {
"content": {
"value": "La Xebicon"
}
}
},
{
"match": {
"content": "Xebia"
}
}
]
}
}
}
16
@xebiconfr #xebiconfr
Bool query : should
GET _search
{
"query": {
"bool": {
"should": [
{
"match": {
"content": {
"value": "La Xebicon"
}
}
},
{
"match": {
"content": "Xebia"
}
}
]
}
}
}
17
@xebiconfr #xebiconfr
Bool query : must_not
GET _search
{
"query": {
"bool": {
"must_not": [
{
"match": {
"content": {
"value": "2015"
}
}
}
]
}
}
}
18
@xebiconfr #xebiconfr
Bool query : filter
GET _search
{
"query": {
"bool": {
"filter": [
{
"term": {
"age": {
"value": 12
}
}
}
]
}
}
}
19
@xebiconfr #xebiconfr
Aggregation
3
20
@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
@xebiconfr #xebiconfr
Bucket aggregation
"name" : "Pierre",
"age" : 12
"name" : "Paul",
"age" : 16
"name" : "Jacques",
"age" : 8
Pierre count : 2
Paul count : 1
Jacques count : 1
"name" : "Pierre",
"age" : 20
Term
aggregation
sur "name"
22
@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
@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 : 16
Jacques avg : 8
Pierre
Paul
Jacques
24
@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 : 16
Jacques avg : 8
Pipeline
aggregation
average sur
"age par nom"
25
@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
@xebiconfr #xebiconfr
Hand’s on !
https://gegron.github.io/es-requests/
27
@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

More Related Content

Viewers also liked

XebiCon'16 : Les coulisses de Xebia Studio. Par Ludovic Perot et Nicolas Joz...
XebiCon'16 : Les coulisses de Xebia Studio.  Par Ludovic Perot et Nicolas Joz...XebiCon'16 : Les coulisses de Xebia Studio.  Par Ludovic Perot et Nicolas Joz...
XebiCon'16 : Les coulisses de Xebia Studio. Par Ludovic Perot et Nicolas Joz...Publicis Sapient Engineering
 
XebiCon'16 : Xebia Labs : Les outils de déploiement sont morts avec les Conta...
XebiCon'16 : Xebia Labs : Les outils de déploiement sont morts avec les Conta...XebiCon'16 : Xebia Labs : Les outils de déploiement sont morts avec les Conta...
XebiCon'16 : Xebia Labs : Les outils de déploiement sont morts avec les Conta...Publicis Sapient Engineering
 
XebiCon'16 : Thiga - Vendre un produit en SaaS - 5 techniques de Pricing !
XebiCon'16 : Thiga - Vendre un produit en SaaS - 5 techniques de Pricing !XebiCon'16 : Thiga - Vendre un produit en SaaS - 5 techniques de Pricing !
XebiCon'16 : Thiga - Vendre un produit en SaaS - 5 techniques de Pricing !Publicis Sapient Engineering
 
XebiCon'16 : PMU et le Big Data - d'une approche mono projet à une démarche e...
XebiCon'16 : PMU et le Big Data - d'une approche mono projet à une démarche e...XebiCon'16 : PMU et le Big Data - d'une approche mono projet à une démarche e...
XebiCon'16 : PMU et le Big Data - d'une approche mono projet à une démarche e...Publicis Sapient Engineering
 
XebiCon'16 : Le futur de la télévision, les applications ! Par Fabien Mirault...
XebiCon'16 : Le futur de la télévision, les applications ! Par Fabien Mirault...XebiCon'16 : Le futur de la télévision, les applications ! Par Fabien Mirault...
XebiCon'16 : Le futur de la télévision, les applications ! Par Fabien Mirault...Publicis Sapient Engineering
 
XebiCon'16 : La programmation concurrente en Go. Par Jérome Doucet et Diana O...
XebiCon'16 : La programmation concurrente en Go. Par Jérome Doucet et Diana O...XebiCon'16 : La programmation concurrente en Go. Par Jérome Doucet et Diana O...
XebiCon'16 : La programmation concurrente en Go. Par Jérome Doucet et Diana O...Publicis Sapient Engineering
 
XebiCon'16 : The Physical Web : un coup d'oeil sur le futur d'IoT et de la mo...
XebiCon'16 : The Physical Web : un coup d'oeil sur le futur d'IoT et de la mo...XebiCon'16 : The Physical Web : un coup d'oeil sur le futur d'IoT et de la mo...
XebiCon'16 : The Physical Web : un coup d'oeil sur le futur d'IoT et de la mo...Publicis Sapient Engineering
 
XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services Par Al...
XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services  Par Al...XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services  Par Al...
XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services Par Al...Publicis Sapient Engineering
 
XebiCon'16 : Altares et Thiga - La finance à l’ère de la Fintech et du digital.
XebiCon'16 : Altares et Thiga - La finance à l’ère de la Fintech et du digital.XebiCon'16 : Altares et Thiga - La finance à l’ère de la Fintech et du digital.
XebiCon'16 : Altares et Thiga - La finance à l’ère de la Fintech et du digital.Publicis Sapient Engineering
 
XebiCon'16 : NodeJS x Craftsmanship - Comment faire un projet dans les règles...
XebiCon'16 : NodeJS x Craftsmanship - Comment faire un projet dans les règles...XebiCon'16 : NodeJS x Craftsmanship - Comment faire un projet dans les règles...
XebiCon'16 : NodeJS x Craftsmanship - Comment faire un projet dans les règles...Publicis Sapient Engineering
 
XebiCon'16 : GraphQL et Falcor, un nouveau regard sur les architectures REST ...
XebiCon'16 : GraphQL et Falcor, un nouveau regard sur les architectures REST ...XebiCon'16 : GraphQL et Falcor, un nouveau regard sur les architectures REST ...
XebiCon'16 : GraphQL et Falcor, un nouveau regard sur les architectures REST ...Publicis Sapient Engineering
 
XebiCon'16 : Data Lake Done Right ! Par Matthieu Blanc, Data Architect chez X...
XebiCon'16 : Data Lake Done Right ! Par Matthieu Blanc, Data Architect chez X...XebiCon'16 : Data Lake Done Right ! Par Matthieu Blanc, Data Architect chez X...
XebiCon'16 : Data Lake Done Right ! Par Matthieu Blanc, Data Architect chez X...Publicis Sapient Engineering
 
XebiCon'16 : Air France KLM - Le Big Data au service de la relation client pe...
XebiCon'16 : Air France KLM - Le Big Data au service de la relation client pe...XebiCon'16 : Air France KLM - Le Big Data au service de la relation client pe...
XebiCon'16 : Air France KLM - Le Big Data au service de la relation client pe...Publicis Sapient Engineering
 
Breizh JUG (mar 2011) - NoSQL : Des Grands du Web aux Entreprises
Breizh JUG (mar 2011) - NoSQL : Des Grands du Web aux EntreprisesBreizh JUG (mar 2011) - NoSQL : Des Grands du Web aux Entreprises
Breizh JUG (mar 2011) - NoSQL : Des Grands du Web aux EntreprisesMichaël Figuière
 
Securing Java EE Web Apps
Securing Java EE Web AppsSecuring Java EE Web Apps
Securing Java EE Web AppsFrank Kim
 
Annotation Processor, trésor caché de la JVM
Annotation Processor, trésor caché de la JVMAnnotation Processor, trésor caché de la JVM
Annotation Processor, trésor caché de la JVMRaphaël Brugier
 
Open xke kanban à grande échelle
Open xke kanban à grande échelleOpen xke kanban à grande échelle
Open xke kanban à grande échelleYannick Quenec'hdu
 
L'agilité en quelques slides
L'agilité en quelques slidesL'agilité en quelques slides
L'agilité en quelques slidesNicolas Deverge
 

Viewers also liked (20)

XebiCon'16 : Les coulisses de Xebia Studio. Par Ludovic Perot et Nicolas Joz...
XebiCon'16 : Les coulisses de Xebia Studio.  Par Ludovic Perot et Nicolas Joz...XebiCon'16 : Les coulisses de Xebia Studio.  Par Ludovic Perot et Nicolas Joz...
XebiCon'16 : Les coulisses de Xebia Studio. Par Ludovic Perot et Nicolas Joz...
 
XebiCon'16 : Xebia Labs : Les outils de déploiement sont morts avec les Conta...
XebiCon'16 : Xebia Labs : Les outils de déploiement sont morts avec les Conta...XebiCon'16 : Xebia Labs : Les outils de déploiement sont morts avec les Conta...
XebiCon'16 : Xebia Labs : Les outils de déploiement sont morts avec les Conta...
 
Xebicon'16 : Comment j'ai piloté mon train ?
Xebicon'16 : Comment j'ai piloté mon train ?Xebicon'16 : Comment j'ai piloté mon train ?
Xebicon'16 : Comment j'ai piloté mon train ?
 
XebiCon'16 : Thiga - Vendre un produit en SaaS - 5 techniques de Pricing !
XebiCon'16 : Thiga - Vendre un produit en SaaS - 5 techniques de Pricing !XebiCon'16 : Thiga - Vendre un produit en SaaS - 5 techniques de Pricing !
XebiCon'16 : Thiga - Vendre un produit en SaaS - 5 techniques de Pricing !
 
XebiCon'16 : PMU et le Big Data - d'une approche mono projet à une démarche e...
XebiCon'16 : PMU et le Big Data - d'une approche mono projet à une démarche e...XebiCon'16 : PMU et le Big Data - d'une approche mono projet à une démarche e...
XebiCon'16 : PMU et le Big Data - d'une approche mono projet à une démarche e...
 
XebiCon'16 : Le futur de la télévision, les applications ! Par Fabien Mirault...
XebiCon'16 : Le futur de la télévision, les applications ! Par Fabien Mirault...XebiCon'16 : Le futur de la télévision, les applications ! Par Fabien Mirault...
XebiCon'16 : Le futur de la télévision, les applications ! Par Fabien Mirault...
 
XebiCon'16 : La programmation concurrente en Go. Par Jérome Doucet et Diana O...
XebiCon'16 : La programmation concurrente en Go. Par Jérome Doucet et Diana O...XebiCon'16 : La programmation concurrente en Go. Par Jérome Doucet et Diana O...
XebiCon'16 : La programmation concurrente en Go. Par Jérome Doucet et Diana O...
 
XebiCon'16 : The Physical Web : un coup d'oeil sur le futur d'IoT et de la mo...
XebiCon'16 : The Physical Web : un coup d'oeil sur le futur d'IoT et de la mo...XebiCon'16 : The Physical Web : un coup d'oeil sur le futur d'IoT et de la mo...
XebiCon'16 : The Physical Web : un coup d'oeil sur le futur d'IoT et de la mo...
 
XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services Par Al...
XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services  Par Al...XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services  Par Al...
XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services Par Al...
 
XebiCon'16 : Altares et Thiga - La finance à l’ère de la Fintech et du digital.
XebiCon'16 : Altares et Thiga - La finance à l’ère de la Fintech et du digital.XebiCon'16 : Altares et Thiga - La finance à l’ère de la Fintech et du digital.
XebiCon'16 : Altares et Thiga - La finance à l’ère de la Fintech et du digital.
 
XebiCon'16 : NodeJS x Craftsmanship - Comment faire un projet dans les règles...
XebiCon'16 : NodeJS x Craftsmanship - Comment faire un projet dans les règles...XebiCon'16 : NodeJS x Craftsmanship - Comment faire un projet dans les règles...
XebiCon'16 : NodeJS x Craftsmanship - Comment faire un projet dans les règles...
 
XebiCon'16 : GraphQL et Falcor, un nouveau regard sur les architectures REST ...
XebiCon'16 : GraphQL et Falcor, un nouveau regard sur les architectures REST ...XebiCon'16 : GraphQL et Falcor, un nouveau regard sur les architectures REST ...
XebiCon'16 : GraphQL et Falcor, un nouveau regard sur les architectures REST ...
 
XebiCon'16 : Data Lake Done Right ! Par Matthieu Blanc, Data Architect chez X...
XebiCon'16 : Data Lake Done Right ! Par Matthieu Blanc, Data Architect chez X...XebiCon'16 : Data Lake Done Right ! Par Matthieu Blanc, Data Architect chez X...
XebiCon'16 : Data Lake Done Right ! Par Matthieu Blanc, Data Architect chez X...
 
XebiCon'16 : Air France KLM - Le Big Data au service de la relation client pe...
XebiCon'16 : Air France KLM - Le Big Data au service de la relation client pe...XebiCon'16 : Air France KLM - Le Big Data au service de la relation client pe...
XebiCon'16 : Air France KLM - Le Big Data au service de la relation client pe...
 
Breizh JUG (mar 2011) - NoSQL : Des Grands du Web aux Entreprises
Breizh JUG (mar 2011) - NoSQL : Des Grands du Web aux EntreprisesBreizh JUG (mar 2011) - NoSQL : Des Grands du Web aux Entreprises
Breizh JUG (mar 2011) - NoSQL : Des Grands du Web aux Entreprises
 
Securing Java EE Web Apps
Securing Java EE Web AppsSecuring Java EE Web Apps
Securing Java EE Web Apps
 
Comment manager des geeks - Devoxx 2015
Comment manager des geeks - Devoxx 2015Comment manager des geeks - Devoxx 2015
Comment manager des geeks - Devoxx 2015
 
Annotation Processor, trésor caché de la JVM
Annotation Processor, trésor caché de la JVMAnnotation Processor, trésor caché de la JVM
Annotation Processor, trésor caché de la JVM
 
Open xke kanban à grande échelle
Open xke kanban à grande échelleOpen xke kanban à grande échelle
Open xke kanban à grande échelle
 
L'agilité en quelques slides
L'agilité en quelques slidesL'agilité en quelques slides
L'agilité en quelques slides
 

Similar to XebiCon'16 : Les requêtes avancées dans ElasticSearch Par Gérome Egron et Ivan Beauvais, Développeurs Java chez Xebia

Why elasticsearch rocks!
Why elasticsearch rocks!Why elasticsearch rocks!
Why elasticsearch rocks!tlrx
 
Paris data geek - Elasticsearch
Paris data geek - ElasticsearchParis data geek - Elasticsearch
Paris data geek - ElasticsearchDavid Pilato
 
Hands on lab Elasticsearch
Hands on lab ElasticsearchHands on lab Elasticsearch
Hands on lab ElasticsearchDavid Pilato
 
Elasticsearch - Esme sudria
Elasticsearch - Esme sudriaElasticsearch - Esme sudria
Elasticsearch - Esme sudriaDavid Pilato
 
Elasticsearch - Montpellier JUG
Elasticsearch - Montpellier JUGElasticsearch - Montpellier JUG
Elasticsearch - Montpellier JUGDavid Pilato
 
Lyon JUG - Elasticsearch
Lyon JUG - ElasticsearchLyon JUG - Elasticsearch
Lyon JUG - ElasticsearchDavid Pilato
 
Elasticsearch - OSDC France 2012
Elasticsearch - OSDC France 2012Elasticsearch - OSDC France 2012
Elasticsearch - OSDC France 2012David Pilato
 
Présentation de ElasticSearch / Digital apéro du 12/11/2014
Présentation de ElasticSearch / Digital apéro du 12/11/2014Présentation de ElasticSearch / Digital apéro du 12/11/2014
Présentation de ElasticSearch / Digital apéro du 12/11/2014Silicon Comté
 

Similar to XebiCon'16 : Les requêtes avancées dans ElasticSearch Par Gérome Egron et Ivan Beauvais, Développeurs Java chez Xebia (10)

Why elasticsearch rocks!
Why elasticsearch rocks!Why elasticsearch rocks!
Why elasticsearch rocks!
 
JSON-LD
JSON-LDJSON-LD
JSON-LD
 
Paris data geek - Elasticsearch
Paris data geek - ElasticsearchParis data geek - Elasticsearch
Paris data geek - Elasticsearch
 
Hands on lab Elasticsearch
Hands on lab ElasticsearchHands on lab Elasticsearch
Hands on lab Elasticsearch
 
Elasticsearch - Esme sudria
Elasticsearch - Esme sudriaElasticsearch - Esme sudria
Elasticsearch - Esme sudria
 
Elasticsearch - Montpellier JUG
Elasticsearch - Montpellier JUGElasticsearch - Montpellier JUG
Elasticsearch - Montpellier JUG
 
Lyon JUG - Elasticsearch
Lyon JUG - ElasticsearchLyon JUG - Elasticsearch
Lyon JUG - Elasticsearch
 
Elasticsearch - OSDC France 2012
Elasticsearch - OSDC France 2012Elasticsearch - OSDC France 2012
Elasticsearch - OSDC France 2012
 
Présentation de ElasticSearch / Digital apéro du 12/11/2014
Présentation de ElasticSearch / Digital apéro du 12/11/2014Présentation de ElasticSearch / Digital apéro du 12/11/2014
Présentation de ElasticSearch / Digital apéro du 12/11/2014
 
zxczxc
zxczxczxczxc
zxczxc
 

More from Publicis Sapient Engineering

XebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humain
XebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humainXebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humain
XebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humainPublicis Sapient Engineering
 
Xebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveur
Xebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveurXebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveur
Xebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveurPublicis Sapient Engineering
 
XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...
XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...
XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...Publicis Sapient Engineering
 
XebiCon'18 - Des notebook pour le monitoring avec Zeppelin
XebiCon'18 - Des notebook pour le monitoring avec Zeppelin XebiCon'18 - Des notebook pour le monitoring avec Zeppelin
XebiCon'18 - Des notebook pour le monitoring avec Zeppelin Publicis Sapient Engineering
 
XebiCon'18 - Event Sourcing et RGPD, incompatibles ?
XebiCon'18 - Event Sourcing et RGPD, incompatibles ?XebiCon'18 - Event Sourcing et RGPD, incompatibles ?
XebiCon'18 - Event Sourcing et RGPD, incompatibles ?Publicis Sapient Engineering
 
XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?
XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?
XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?Publicis Sapient Engineering
 
XebiCon'18 - Boostez vos modèles avec du Deep Learning distribué
XebiCon'18 - Boostez vos modèles avec du Deep Learning distribuéXebiCon'18 - Boostez vos modèles avec du Deep Learning distribué
XebiCon'18 - Boostez vos modèles avec du Deep Learning distribuéPublicis Sapient Engineering
 
XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...
XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...
XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...Publicis Sapient Engineering
 
XebiCon'18 - Les utilisateurs finaux, les oubliés de nos produits !
XebiCon'18 - Les utilisateurs finaux, les oubliés de nos produits !XebiCon'18 - Les utilisateurs finaux, les oubliés de nos produits !
XebiCon'18 - Les utilisateurs finaux, les oubliés de nos produits !Publicis Sapient Engineering
 
XebiCon'18 - Comment fausser l'interprétation de vos résultats avec des dataviz
XebiCon'18 - Comment fausser l'interprétation de vos résultats avec des datavizXebiCon'18 - Comment fausser l'interprétation de vos résultats avec des dataviz
XebiCon'18 - Comment fausser l'interprétation de vos résultats avec des datavizPublicis Sapient Engineering
 
XebiCon'18 - Architecturer son application mobile pour la durabilité
XebiCon'18 - Architecturer son application mobile pour la durabilitéXebiCon'18 - Architecturer son application mobile pour la durabilité
XebiCon'18 - Architecturer son application mobile pour la durabilitéPublicis Sapient Engineering
 
XebiCon'18 - Sécuriser son API avec OpenID Connect
XebiCon'18 - Sécuriser son API avec OpenID ConnectXebiCon'18 - Sécuriser son API avec OpenID Connect
XebiCon'18 - Sécuriser son API avec OpenID ConnectPublicis Sapient Engineering
 
XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...
XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...
XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...Publicis Sapient Engineering
 
XebiCon'18 - La sécurité, douce illusion même en 2018
XebiCon'18 - La sécurité, douce illusion même en 2018XebiCon'18 - La sécurité, douce illusion même en 2018
XebiCon'18 - La sécurité, douce illusion même en 2018Publicis Sapient Engineering
 
XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...
XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...
XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...Publicis Sapient Engineering
 
XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...
XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...
XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...Publicis Sapient Engineering
 

More from Publicis Sapient Engineering (20)

XebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humain
XebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humainXebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humain
XebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humain
 
Xebicon'18 - IoT: From Edge to Cloud
Xebicon'18 - IoT: From Edge to CloudXebicon'18 - IoT: From Edge to Cloud
Xebicon'18 - IoT: From Edge to Cloud
 
Xebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveur
Xebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveurXebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveur
Xebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveur
 
XebiCon'18 - Modern Infrastructure
XebiCon'18 - Modern InfrastructureXebiCon'18 - Modern Infrastructure
XebiCon'18 - Modern Infrastructure
 
XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...
XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...
XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...
 
XebiCon'18 - Des notebook pour le monitoring avec Zeppelin
XebiCon'18 - Des notebook pour le monitoring avec Zeppelin XebiCon'18 - Des notebook pour le monitoring avec Zeppelin
XebiCon'18 - Des notebook pour le monitoring avec Zeppelin
 
XebiCon'18 - Event Sourcing et RGPD, incompatibles ?
XebiCon'18 - Event Sourcing et RGPD, incompatibles ?XebiCon'18 - Event Sourcing et RGPD, incompatibles ?
XebiCon'18 - Event Sourcing et RGPD, incompatibles ?
 
XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?
XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?
XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?
 
XebiCon'18 - Boostez vos modèles avec du Deep Learning distribué
XebiCon'18 - Boostez vos modèles avec du Deep Learning distribuéXebiCon'18 - Boostez vos modèles avec du Deep Learning distribué
XebiCon'18 - Boostez vos modèles avec du Deep Learning distribué
 
XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...
XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...
XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...
 
XebiCon'18 - Les utilisateurs finaux, les oubliés de nos produits !
XebiCon'18 - Les utilisateurs finaux, les oubliés de nos produits !XebiCon'18 - Les utilisateurs finaux, les oubliés de nos produits !
XebiCon'18 - Les utilisateurs finaux, les oubliés de nos produits !
 
XebiCon'18 - Comment fausser l'interprétation de vos résultats avec des dataviz
XebiCon'18 - Comment fausser l'interprétation de vos résultats avec des datavizXebiCon'18 - Comment fausser l'interprétation de vos résultats avec des dataviz
XebiCon'18 - Comment fausser l'interprétation de vos résultats avec des dataviz
 
XebiCon'18 - Le développeur dans la Pop Culture
XebiCon'18 - Le développeur dans la Pop Culture XebiCon'18 - Le développeur dans la Pop Culture
XebiCon'18 - Le développeur dans la Pop Culture
 
XebiCon'18 - Architecturer son application mobile pour la durabilité
XebiCon'18 - Architecturer son application mobile pour la durabilitéXebiCon'18 - Architecturer son application mobile pour la durabilité
XebiCon'18 - Architecturer son application mobile pour la durabilité
 
XebiCon'18 - Sécuriser son API avec OpenID Connect
XebiCon'18 - Sécuriser son API avec OpenID ConnectXebiCon'18 - Sécuriser son API avec OpenID Connect
XebiCon'18 - Sécuriser son API avec OpenID Connect
 
XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...
XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...
XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...
 
XebiCon'18 - Spark NLP, un an après
XebiCon'18 - Spark NLP, un an aprèsXebiCon'18 - Spark NLP, un an après
XebiCon'18 - Spark NLP, un an après
 
XebiCon'18 - La sécurité, douce illusion même en 2018
XebiCon'18 - La sécurité, douce illusion même en 2018XebiCon'18 - La sécurité, douce illusion même en 2018
XebiCon'18 - La sécurité, douce illusion même en 2018
 
XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...
XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...
XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...
 
XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...
XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...
XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...
 

XebiCon'16 : Les requêtes avancées dans ElasticSearch Par Gérome Egron et Ivan Beauvais, Développeurs Java chez Xebia

  • 1. @xebiconfr #xebiconfr Advanced querying With Elasticsearch Ivan Beauvais / Gérôme Egron @xebiconfr KNOWLEDGE SHOULD BE FOR ALL 1
  • 3. @xebiconfr #xebiconfr Différents types de recherche 1. Recherche Full Text 2. Recherche Exacte 3. Aggrégation 3
  • 5. @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
  • 6. @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
  • 7. @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
  • 8. @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
  • 9. @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
  • 10. @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
  • 11. @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
  • 13. @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
  • 14. @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
  • 15. @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
  • 16. @xebiconfr #xebiconfr Bool query : must GET _search { "query": { "bool": { "must": [ { "match": { "content": { "value": "La Xebicon" } } }, { "match": { "content": "Xebia" } } ] } } } 16
  • 17. @xebiconfr #xebiconfr Bool query : should GET _search { "query": { "bool": { "should": [ { "match": { "content": { "value": "La Xebicon" } } }, { "match": { "content": "Xebia" } } ] } } } 17
  • 18. @xebiconfr #xebiconfr Bool query : must_not GET _search { "query": { "bool": { "must_not": [ { "match": { "content": { "value": "2015" } } } ] } } } 18
  • 19. @xebiconfr #xebiconfr Bool query : filter GET _search { "query": { "bool": { "filter": [ { "term": { "age": { "value": 12 } } } ] } } } 19
  • 21. @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
  • 22. @xebiconfr #xebiconfr Bucket aggregation "name" : "Pierre", "age" : 12 "name" : "Paul", "age" : 16 "name" : "Jacques", "age" : 8 Pierre count : 2 Paul count : 1 Jacques count : 1 "name" : "Pierre", "age" : 20 Term aggregation sur "name" 22
  • 23. @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
  • 24. @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 : 16 Jacques avg : 8 Pierre Paul Jacques 24
  • 25. @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 : 16 Jacques avg : 8 Pipeline aggregation average sur "age par nom" 25
  • 26. @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
  • 27. @xebiconfr #xebiconfr Hand’s on ! https://gegron.github.io/es-requests/ 27
  • 28. @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