SlideShare una empresa de Scribd logo
1 de 41
Hands On Elasticsearch
    Malloum Laya / David Pilato
Qui ?
      $ curl http://localhost:9200/talk/speaker/TheMalloum
{
    "nom" : "Malloum Laya",
    "jobs" : [
     { "boite" : "Logica", "mission" : "développeur", "duree" : 3 },
     { "boite" : "DGDDI (douane)", "mission" : "chef de projets", "duree" : 4 } ],
    "passions" : [ "famille", "informatique", "rap français" ],
    "blog" : "http://malloum.fr/",
    "twitter" : [ "@TheMalloum", "@scrutmydocs" ],
    "email" : "malloum.laya@gmail.com"
}
Qui ?
      $ curl http://localhost:9200/talk/speaker/TheMalloum
{
    "nom" : "Malloum Laya",
    "jobs" : [
     { "boite" : "Logica", "mission" : "développeur", "duree" : 3 },
     { "boite" : "DGDDI (douane)", "mission" : "chef de projets", "duree" : 4 } ],
    "passions" : [ "famille", "informatique", "rap français" ],
    "blog" : "http://malloum.fr/",
    "twitter" : [ "@TheMalloum", "@scrutmydocs" ],
    "email" : "malloum.laya@gmail.com"
}
Qui ?
      $ curl http://localhost:9200/talk/speaker/TheMalloum
{
    "nom" : "Malloum Laya",
    "jobs" : [
     { "boite" : "Logica", "mission" : "développeur", "duree" : 3 },
     { "boite" : "DGDDI (douane)", "mission" : "chef de projets", "duree" : 4 } ],
    "passions" : [ "famille", "informatique", "rap français" ],
    "blog" : "http://malloum.fr/",
    "twitter" : [ "@TheMalloum", "@scrutmydocs" ],
    "email" : "malloum.laya@gmail.com"
}




      $ curl http://localhost:9200/talk/speaker/dpilato
{
    "nom" : "David Pilato",
    "jobs" : [
     { "boite" : "SRA Europe (SSII)", "mission" : "bon à tout faire", "duree" : 3 },
     { "boite" : "SFR", "mission" : "touche à tout", "duree" : 3 },
     { "boite" : "e-Brands / Vivendi", "mission" : "chef de projets", "duree" : 4 },
     { "boite" : "DGDDI (douane)", "mission" : "mouton à 5 pattes", "duree" : 8 },
     { "boite" : "IDEO Technologies", "mission" : "directeur technique", "duree" : 0 } ],
    "passions" : [ "famille", "job", "deejay" ],
    "blog" : "http://dev.david.pilato.fr/",
    "twitter" : [ "@dadoonet", "@elasticsearchfr", "@scrutmydocs" ],
    "email" : "david@pilato.fr"
}
Agenda
Agenda

Aperçu d'Elasticsearch

Atelier 1 : indexons

Atelier 2 : cherchons

Atelier 3 : analysons
Elasticsearch
 Les fondamentaux
Un moteur de
        recherche


un moteur d’indexation de "documents"

un moteur de recherche sur les index
Elasticsearch
Moteur de recherche pour la génération NoSQL

Basé sur le standard Apache Lucene

Masque la complexité Java/Lucene à l’aide de services
standards HTTP / RESTful / JSON

Utilisable à partir de n’importe quelle technologie

Ajoute la couche cloud manquante à Lucene avec distribution,
réplication, fail over

Très performant : distribution des calculs sur plusieurs nœuds

C’est un moteur, pas une interface graphique !
Penser document !
Changement de paradigme :

  On ne pense plus SQL !

  On indexe ce qu'on veut trouver !

Un document, c'est :

  Un objet JSON

  Des propriétés simples (String, boolean, number)

  Des propriétés complexes (array, object)

  Des propriétés évoluées (geoloc, binary, attachments)
Ranger ses
                          documents
{
  "text": "Bienvenue au Hands On Lab #elasticsearch pour #jduchess",
  "created_at": "2012-04-06T20:45:36.000Z",
  "source": "Twitter for iPad",
  "truncated": false,
  "retweet_count": 0,
  "hashtag": [ { "text": "elasticsearch", "start": 27, "end": 40 },
               { "text": "jduchess", "start": 47, "end": 55 } ],
  "user": { "id": 51172224, "name": "David Pilato",
            "screen_name": "dadoonet", "location": "France",
            "description": "Soft Architect, Project Manager, Senior Developper.rnAt this time, enjoying
NoSQL world : CouchDB, ElasticSearch.rnDeeJay 4 times a year, just for fun !" }
}


       Elasticsearch met à notre disposition

           Des types de document

           Des index

       Le document 1 de type Tweet dans l’index Twitter
Agir avec
               Elasticsearch
API REST : http://host:port/[index]/[type]/[_action/id]
Méthodes HTTP : GET, POST, PUT, DELETE

Documents

 •   curl -XPUT http://localhost:9200/twitter/tweet/1 -d ‘{....}’
 •   curl -XGET http://localhost:9200/twitter/tweet/1
 •   curl -XDELETE http://localhost:9200/twitter/tweet/1

Recherche

 •   curl -XPOST http://localhost:9200/twitter/tweet/_search -d ‘{....}’
 •   curl -XPOST http://localhost:9200/twitter/_search -d ‘{....}’
 •   curl -XPOST http://localhost:9200/_search -d ‘{....}’

Meta données Elasticsearch

 •   curl -XGET http://localhost:9200/twitter/_status
 •   curl -XPOST http://localhost:9200/_shutdown
Atelier 0
On prépare le terrain
Quelques notions
Quelques notions


• Nœud (node) : Une instance d'Elasticsearch (~ machine ?)
Quelques notions


• Nœud (node) : Une instance d'Elasticsearch (~ machine ?)
• Cluster : Un ensemble de nœuds
Quelques notions


• Nœud (node) : Une instance d'Elasticsearch (~ machine ?)
• Cluster : Un ensemble de nœuds
• Partition (shard) : permet de découper un index en
 plusieurs parties pour y distribuer les documents
Quelques notions


• Nœud (node) : Une instance d'Elasticsearch (~ machine ?)
• Cluster : Un ensemble de nœuds
• Partition (shard) : permet de découper un index en
  plusieurs parties pour y distribuer les documents
• Réplication (replica) : recopie d’une partition en une ou
  plusieurs copies dans l'ensemble du cluster
Agir en Java
// Création du noeud. Il s’agit d’une instance d’Elasticsearch complète !
Node node = NodeBuilder.nodeBuilder().node();

// Les opérations courantes (put, get, search, delete)
// se font à l’aide d’un client !
Client client = node.client();

// On peut aussi faire des opérations d’administration
// (état du cluster, suppression index, ...) !
AdminClient client = client.admin();
Atelier 0
Récupérer la distribution Elasticsearch
ES 0.19.9, elasticsearch.yml modifié, plugins : MOBZ Head, BigDesk, Paramedic
curl -OL -k https://github.com/downloads/elasticsearchfr/hands-on/elasticsearch-0.19.9-
handson.zip



Cloner le repository
git clone https://github.com/elasticsearchfr/hands-on.git



Regarder les sources du test 0
src/test/java/org/elasticsearchfr/handson/ex0/NodeTest.java



Instructions dans la javadoc et
https://github.com/elasticsearchfr/hands-on#test-0-just-start-a-node
Atelier 1
On indexe des bières ;-)
Indexer en Java
// On peut fabriquer du json à la main
String json = "{ "field":"value" }";

// En utilisant le XContent d’Elasticsearch
XContentBuilder xcb = XContentFactory.jsonBuilder()
    .startObject()
         .field("field", "value")
    .endObject();
String json = xcb.toString();

// Sérialiser JavaBean en JSon
// On peut utiliser Jackson : http://wiki.fasterxml.com/JacksonHome
Beer beer = new Beer("Heineken", Colour.PALE, 0.33, 3);
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(beer);

// On peut indexer !
client.prepareIndex("index", "type").setSource(json).execute().actionGet();
client.prepareIndex("index", "type", "id").setSource(xcb).execute().actionGet();

// Insérer en mode Bulk
BulkRequestBuilder brb = client.prepareBulk();

// Ajouter des actions à réaliser
brb.add(new IndexRequest("index", "type").source(json));

// Exécuter le bulk
brb.execute().actionGet();
Récupérer en Java
// Récupérer
GetResponse gr = client.prepareGet("index", "type", "id").execute().actionGet();

// Désérialiser de JSon vers JavaBean
ObjectMapper mapper = new ObjectMapper();
Beer beer = mapper.readValue(gr.getSourceAsBytes(), Beer.class);
Effacer en Java
// Effacer
client.prepareDelete("index", "type", "id").execute().actionGet();



// Effacer en mode Bulk
BulkRequestBuilder brb = client.prepareBulk();

// Ajouter des actions à réaliser
brb.add(new DeleteRequest("index", "type", "id"));

// Exécuter le bulk
brb.execute().actionGet();
Atelier 1


Regarder les sources du test 1
src/test/java/org/elasticsearchfr/handson/ex1/IndexTest.java



Instructions dans la javadoc et
https://github.com/elasticsearchfr/hands-on#test-1-indexget-and-delete-some-documents
Atelier 2
On cherche des bières ;-)
Query DSL
   Type                                             Description



 Match All    Recherche tout le contenu



QueryString   Recherche « à la google » : syntaxe Lucene possible +, -, FROM, TO, ^



   Bool       Recherche multi-critères (MUST, MUST NOT, SHOULD)



   Term       Recherche d'un terme précis dans un champ donné



  Match       Recherche « à la google » dans le contenu d’un champ



  Range       Recherche par intervalle (>, >=, <, <=) dans un champ
Chercher en Java
// Fabriquer un QueryBuilder (qb)
// MatchAll
QueryBuilder qb = QueryBuilders.matchAllQuery();

// TermQuery
QueryBuilder qb = QueryBuilders.termQuery("field", "value");

// MatchQuery
QueryBuilder qb = QueryBuilders.matchQuery("field", "you can enter a text here");

// QueryString
QueryBuilder qb = QueryBuilders.queryString("you can enter a text here");

// RangeQuery
QueryBuilder qb = QueryBuilders.rangeQuery("field").from(5).to(10);

// BoolQuery
QueryBuilder qb = QueryBuilders.boolQuery()
	 .must(QueryBuilders.termQuery("field1", "value"))
	 .mustNot(QueryBuilders.termQuery("field2", "value"))
	 .should(QueryBuilders.rangeQuery("field3").from(0).to(5));
Les résultats
// Lancer une recherche
SearchResponse sr = client.prepareSearch().setQuery(qb).execute().actionGet();

// Récupérer le temps d’exécution
long execTime = sr.getTookInMillis();

// Récupérer le nombre de hits
long nbHits = sr.getHits().getTotalHits();

// Récupérer les hits
SearchHit[] hits = sr.getHits().getHits();
SearchHit hit = hits[0];

// Récupérer les coordonnées du document
hit.getIndex();
hit.getType();
hit.getId();

// Récupérer la pertinence du document
hit.getScore();

// Récupérer le document source au format Json
hit.getSourceAsString();
Atelier 2


Regarder les sources du test 2
src/test/java/org/elasticsearchfr/handson/ex2/SearchTest.java



Instructions dans la javadoc et
https://github.com/elasticsearchfr/hands-on#test-2-searching-for-documents
Atelier 3
La bière vue sous un autre angle
          Les facettes
Les facettes

ID    Marque      Taille   Prix
1     Heineken    0.25     3.50
2    Grimbergen   0.25     4.00
3      Kriek      0.25     3.80
4     Heineken     0.5     6.80
5    Grimbergen    0.5     7.80
6      Kriek       0.5     7.50
7     Heineken      1      12.00
8    Grimbergen     1      14.00
9      Kriek        1      14.00
Term Facet

ID    Marque      Taille   Prix
1     Heineken    0.25     3.50
2    Grimbergen   0.25     4.00
3      Kriek      0.25     3.80
4     Heineken     0.5     6.80
5    Grimbergen    0.5     7.80
6      Kriek       0.5     7.50
7     Heineken      1      12.00
8    Grimbergen     1      14.00
9      Kriek        1      14.00
Term Facet

ID    Marque      Taille                 Prix
1     Heineken    0.25                   3.50
2    Grimbergen   0.25                   4.00
3      Kriek      0.25 Marque      Count3.80
4     Heineken     0.5 Heineken      3 6.80
5    Grimbergen    0.5Grimbergen     3   7.80
6      Kriek       0.5 Kriek         3   7.50
7     Heineken      1                    12.00
8    Grimbergen     1                    14.00
9      Kriek        1                    14.00
TermFacet en Java
// Fabriquer une TermFacet (facet)
AbstractFacetBuilder facet = FacetBuilders.termsFacet("bybrand").field("marque");

// Avec la recherche
SearchResponse sr = client.prepareSearch()
     .setQuery(qb)
     .addFacet(facet)
  .execute().actionGet();

// Facette en retour
TermsFacet bybrand = sr.getFacets().facet("bybrand");
for (TermsFacet.Entry entry : bybrand) {
   String marque = entry.getTerm();
   int nb = entry.count();
}
Range Facet

ID    Marque      Taille   Prix
1     Heineken    0.25     3.50
2    Grimbergen   0.25     4.00
3      Kriek      0.25     3.80
4     Heineken     0.5     6.80
5    Grimbergen    0.5     7.80
6      Kriek       0.5     7.50
7     Heineken      1      12.00
8    Grimbergen     1      14.00
9      Kriek        1      14.00
Range Facet

        ID             Marque                      Taille   Prix
        1              Heineken                    0.25     3.50
        2             Grimbergen                   0.25     4.00
      3
 Ranges       Count     Kriek
                         Min       Max     Moy     0.25
                                                   Total    3.80
   x<54         3        3.50
                       Heineken    4.00    3.77    11.30
                                                    0.5     6.80
5 <= x < 10
         5      3     Grimbergen 7.80
                         6.80              7.37    22.10
                                                    0.5     7.80
 10 <= x6       3       12.00
                        Kriek      14.00   13.33   40.00
                                                    0.5     7.50
        7              Heineken                      1      12.00
        8             Grimbergen                     1      14.00
        9               Kriek                        1      14.00
RangeFacet en Java
// Fabriquer une TermFacet (facet)
AbstractFacetBuilder facet = FacetBuilders.rangeFacet("byprice")
   .field("price")
   .addUnboundedFrom(5)
   .addRange(5, 10)
   .addUnboundedTo(10);

// Avec la recherche
SearchResponse sr = client.prepareSearch()
     .setQuery(qb)
     .addFacet(facet)
  .execute().actionGet();

// Facette en retour
RangeFacet byprice = sr.getFacets().facet("byprice");
for (RangeFacet.Entry entry : byprice) {
   entry.to();
   entry.from();
   entry.min();
   entry.max();
   entry.mean();
   entry.count();
}
Atelier 3


Regarder les sources du test 3
src/test/java/org/elasticsearchfr/handson/ex3/FacetTest.java



Instructions dans la javadoc et
https://github.com/elasticsearchfr/hands-on#test-3-analyzing-documents-with-facets
Mailing List ES France
  elasticsearch-fr@googlegroups.com
Mailing List ES France
                elasticsearch-fr@googlegroups.com
Slides sur http://fr.slideshare.net/dadoonet   Sources sur https://github.com/elasticsearchfr/hands-on

Más contenido relacionado

La actualidad más candente

Elasticsearch - Esme sudria
Elasticsearch - Esme sudriaElasticsearch - Esme sudria
Elasticsearch - Esme sudriaDavid Pilato
 
Poitou charentes JUG - Elasticsearch
Poitou charentes JUG - ElasticsearchPoitou charentes JUG - Elasticsearch
Poitou charentes JUG - ElasticsearchDavid Pilato
 
Moteurs de recherche : un oeil sous le capot avec Elastic Search
Moteurs de recherche : un oeil sous le capot avec Elastic SearchMoteurs de recherche : un oeil sous le capot avec Elastic Search
Moteurs de recherche : un oeil sous le capot avec Elastic SearchAudrey Neveu
 
Introduction à ElasticSearch
Introduction à ElasticSearchIntroduction à ElasticSearch
Introduction à ElasticSearchFadel Chafai
 
Migrer une application existante vers Elasticsearch - Nuxeo Tour 2014 - workshop
Migrer une application existante vers Elasticsearch - Nuxeo Tour 2014 - workshopMigrer une application existante vers Elasticsearch - Nuxeo Tour 2014 - workshop
Migrer une application existante vers Elasticsearch - Nuxeo Tour 2014 - workshopNuxeo
 
Solr and Elasticsearch in Action (at Breizhcamp)
Solr and Elasticsearch in Action (at Breizhcamp)Solr and Elasticsearch in Action (at Breizhcamp)
Solr and Elasticsearch in Action (at Breizhcamp)Lucian Precup
 
Besoin de rien Envie de Search - Presentation Lucene Solr ElasticSearch
Besoin de rien Envie de Search - Presentation Lucene Solr ElasticSearchBesoin de rien Envie de Search - Presentation Lucene Solr ElasticSearch
Besoin de rien Envie de Search - Presentation Lucene Solr ElasticSearchfrancelabs
 
A la recherche d'ElasticSearch
A la recherche d'ElasticSearchA la recherche d'ElasticSearch
A la recherche d'ElasticSearchNinnir
 
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é
 
Tirer le meilleur de ses données avec ElasticSearch
Tirer le meilleur de ses données avec ElasticSearchTirer le meilleur de ses données avec ElasticSearch
Tirer le meilleur de ses données avec ElasticSearchSéven Le Mesle
 
Breizhcamp 2015 - Comment (ne pas réussir à) modéliser ses data dans elastics...
Breizhcamp 2015 - Comment (ne pas réussir à) modéliser ses data dans elastics...Breizhcamp 2015 - Comment (ne pas réussir à) modéliser ses data dans elastics...
Breizhcamp 2015 - Comment (ne pas réussir à) modéliser ses data dans elastics...Bruno Bonnin
 
Oxalide Workshop #3 - Elasticearch, an overview
Oxalide Workshop #3 - Elasticearch, an overviewOxalide Workshop #3 - Elasticearch, an overview
Oxalide Workshop #3 - Elasticearch, an overviewLudovic Piot
 
Tunis big data_meetup__21_nov2015__aymenzaafouri
Tunis big data_meetup__21_nov2015__aymenzaafouriTunis big data_meetup__21_nov2015__aymenzaafouri
Tunis big data_meetup__21_nov2015__aymenzaafouriAymen ZAAFOURI
 
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?Sébastien Prunier
 
Solr retour d'experience
Solr retour d'experienceSolr retour d'experience
Solr retour d'experienceCrossknowledge
 
Tout ce que le getting started mongo db ne vous dira pas
Tout ce que le getting started mongo db ne vous dira pasTout ce que le getting started mongo db ne vous dira pas
Tout ce que le getting started mongo db ne vous dira pasPierre-Alban DEWITTE
 
Solr, c'est simple et Big Data ready - prez au Lyon jug Fév 2014
Solr, c'est simple et Big Data ready - prez au Lyon jug Fév 2014Solr, c'est simple et Big Data ready - prez au Lyon jug Fév 2014
Solr, c'est simple et Big Data ready - prez au Lyon jug Fév 2014francelabs
 

La actualidad más candente (20)

Elasticsearch - Esme sudria
Elasticsearch - Esme sudriaElasticsearch - Esme sudria
Elasticsearch - Esme sudria
 
Poitou charentes JUG - Elasticsearch
Poitou charentes JUG - ElasticsearchPoitou charentes JUG - Elasticsearch
Poitou charentes JUG - Elasticsearch
 
Moteurs de recherche : un oeil sous le capot avec Elastic Search
Moteurs de recherche : un oeil sous le capot avec Elastic SearchMoteurs de recherche : un oeil sous le capot avec Elastic Search
Moteurs de recherche : un oeil sous le capot avec Elastic Search
 
Introduction à ElasticSearch
Introduction à ElasticSearchIntroduction à ElasticSearch
Introduction à ElasticSearch
 
Migrer une application existante vers Elasticsearch - Nuxeo Tour 2014 - workshop
Migrer une application existante vers Elasticsearch - Nuxeo Tour 2014 - workshopMigrer une application existante vers Elasticsearch - Nuxeo Tour 2014 - workshop
Migrer une application existante vers Elasticsearch - Nuxeo Tour 2014 - workshop
 
Solr and Elasticsearch in Action (at Breizhcamp)
Solr and Elasticsearch in Action (at Breizhcamp)Solr and Elasticsearch in Action (at Breizhcamp)
Solr and Elasticsearch in Action (at Breizhcamp)
 
Besoin de rien Envie de Search - Presentation Lucene Solr ElasticSearch
Besoin de rien Envie de Search - Presentation Lucene Solr ElasticSearchBesoin de rien Envie de Search - Presentation Lucene Solr ElasticSearch
Besoin de rien Envie de Search - Presentation Lucene Solr ElasticSearch
 
A la recherche d'ElasticSearch
A la recherche d'ElasticSearchA la recherche d'ElasticSearch
A la recherche d'ElasticSearch
 
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
 
Tirer le meilleur de ses données avec ElasticSearch
Tirer le meilleur de ses données avec ElasticSearchTirer le meilleur de ses données avec ElasticSearch
Tirer le meilleur de ses données avec ElasticSearch
 
Breizhcamp 2015 - Comment (ne pas réussir à) modéliser ses data dans elastics...
Breizhcamp 2015 - Comment (ne pas réussir à) modéliser ses data dans elastics...Breizhcamp 2015 - Comment (ne pas réussir à) modéliser ses data dans elastics...
Breizhcamp 2015 - Comment (ne pas réussir à) modéliser ses data dans elastics...
 
Oxalide Workshop #3 - Elasticearch, an overview
Oxalide Workshop #3 - Elasticearch, an overviewOxalide Workshop #3 - Elasticearch, an overview
Oxalide Workshop #3 - Elasticearch, an overview
 
Tunis big data_meetup__21_nov2015__aymenzaafouri
Tunis big data_meetup__21_nov2015__aymenzaafouriTunis big data_meetup__21_nov2015__aymenzaafouri
Tunis big data_meetup__21_nov2015__aymenzaafouri
 
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?
 
Solr retour d'experience
Solr retour d'experienceSolr retour d'experience
Solr retour d'experience
 
JSON-LD
JSON-LDJSON-LD
JSON-LD
 
Tout ce que le getting started mongo db ne vous dira pas
Tout ce que le getting started mongo db ne vous dira pasTout ce que le getting started mongo db ne vous dira pas
Tout ce que le getting started mongo db ne vous dira pas
 
Solr, c'est simple et Big Data ready - prez au Lyon jug Fév 2014
Solr, c'est simple et Big Data ready - prez au Lyon jug Fév 2014Solr, c'est simple et Big Data ready - prez au Lyon jug Fév 2014
Solr, c'est simple et Big Data ready - prez au Lyon jug Fév 2014
 

Destacado

Practical Elasticsearch - real world use cases
Practical Elasticsearch - real world use casesPractical Elasticsearch - real world use cases
Practical Elasticsearch - real world use casesItamar
 
Spark meetup v2.0.5
Spark meetup v2.0.5Spark meetup v2.0.5
Spark meetup v2.0.5Yan Zhou
 
Elasticsearch Distributed search & analytics on BigData made easy
Elasticsearch Distributed search & analytics on BigData made easyElasticsearch Distributed search & analytics on BigData made easy
Elasticsearch Distributed search & analytics on BigData made easyItamar
 
Apache HBase + Spark: Leveraging your Non-Relational Datastore in Batch and S...
Apache HBase + Spark: Leveraging your Non-Relational Datastore in Batch and S...Apache HBase + Spark: Leveraging your Non-Relational Datastore in Batch and S...
Apache HBase + Spark: Leveraging your Non-Relational Datastore in Batch and S...DataWorks Summit/Hadoop Summit
 
Apache Storm 0.9 basic training - Verisign
Apache Storm 0.9 basic training - VerisignApache Storm 0.9 basic training - Verisign
Apache Storm 0.9 basic training - VerisignMichael Noll
 

Destacado (6)

Practical Elasticsearch - real world use cases
Practical Elasticsearch - real world use casesPractical Elasticsearch - real world use cases
Practical Elasticsearch - real world use cases
 
Spark meetup v2.0.5
Spark meetup v2.0.5Spark meetup v2.0.5
Spark meetup v2.0.5
 
Elasticsearch Distributed search & analytics on BigData made easy
Elasticsearch Distributed search & analytics on BigData made easyElasticsearch Distributed search & analytics on BigData made easy
Elasticsearch Distributed search & analytics on BigData made easy
 
Apache HBase + Spark: Leveraging your Non-Relational Datastore in Batch and S...
Apache HBase + Spark: Leveraging your Non-Relational Datastore in Batch and S...Apache HBase + Spark: Leveraging your Non-Relational Datastore in Batch and S...
Apache HBase + Spark: Leveraging your Non-Relational Datastore in Batch and S...
 
ElasticSearch Hands On
ElasticSearch Hands OnElasticSearch Hands On
ElasticSearch Hands On
 
Apache Storm 0.9 basic training - Verisign
Apache Storm 0.9 basic training - VerisignApache Storm 0.9 basic training - Verisign
Apache Storm 0.9 basic training - Verisign
 

Similar a Hands on lab Elasticsearch

Grails from scratch to prod - MixIT 2011
Grails from scratch to prod - MixIT 2011Grails from scratch to prod - MixIT 2011
Grails from scratch to prod - MixIT 2011Aurélien Maury
 
Oxalide Academy : Workshop #3 Elastic Search
Oxalide Academy : Workshop #3 Elastic SearchOxalide Academy : Workshop #3 Elastic Search
Oxalide Academy : Workshop #3 Elastic SearchOxalide
 
SSL 2011 : Présentation de 2 bases noSQL
SSL 2011 : Présentation de 2 bases noSQLSSL 2011 : Présentation de 2 bases noSQL
SSL 2011 : Présentation de 2 bases noSQLHervé Leclerc
 
Cours j query-id1575
Cours j query-id1575Cours j query-id1575
Cours j query-id1575kate2013
 
2014 04-09-fr - app dev series - session 4 - indexing
2014 04-09-fr - app dev series - session 4 - indexing2014 04-09-fr - app dev series - session 4 - indexing
2014 04-09-fr - app dev series - session 4 - indexingMongoDB
 
Microservices-DDD-Telosys-Devoxx-FR-2022
Microservices-DDD-Telosys-Devoxx-FR-2022Microservices-DDD-Telosys-Devoxx-FR-2022
Microservices-DDD-Telosys-Devoxx-FR-2022Laurent Guérin
 
Tout ce que le getting started MongoDB ne vous dira pas
Tout ce que le getting started MongoDB ne vous dira pasTout ce que le getting started MongoDB ne vous dira pas
Tout ce que le getting started MongoDB ne vous dira pasBruno Bonnin
 
Construisez votre première application MongoDB
Construisez votre première application MongoDBConstruisez votre première application MongoDB
Construisez votre première application MongoDBMongoDB
 
La mobilité dans Drupal
La mobilité dans DrupalLa mobilité dans Drupal
La mobilité dans DrupalAdyax
 
Devoxx: Tribulation d'un développeur sur le Cloud
Devoxx: Tribulation d'un développeur sur le CloudDevoxx: Tribulation d'un développeur sur le Cloud
Devoxx: Tribulation d'un développeur sur le CloudTugdual Grall
 
Introduction à Sinatra
Introduction à SinatraIntroduction à Sinatra
Introduction à SinatraRémi Prévost
 
Atelier : Développement rapide d&rsquo;une application basée surXWiki
Atelier : Développement rapide d&rsquo;une application basée surXWikiAtelier : Développement rapide d&rsquo;une application basée surXWiki
Atelier : Développement rapide d&rsquo;une application basée surXWikiKorteby Farouk
 
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -introNosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -introOlivier Mallassi
 
Présentation de Django @ Orange Labs (FR)
Présentation de Django @ Orange Labs (FR)Présentation de Django @ Orange Labs (FR)
Présentation de Django @ Orange Labs (FR)Martin Latrille
 
Réu technodejs
Réu technodejsRéu technodejs
Réu technodejsnaholyr
 
Jug algeria x wiki-atelier
Jug algeria x wiki-atelierJug algeria x wiki-atelier
Jug algeria x wiki-atelierAlgeria JUG
 

Similar a Hands on lab Elasticsearch (20)

Grails from scratch to prod - MixIT 2011
Grails from scratch to prod - MixIT 2011Grails from scratch to prod - MixIT 2011
Grails from scratch to prod - MixIT 2011
 
Oxalide Academy : Workshop #3 Elastic Search
Oxalide Academy : Workshop #3 Elastic SearchOxalide Academy : Workshop #3 Elastic Search
Oxalide Academy : Workshop #3 Elastic Search
 
SSL 2011 : Présentation de 2 bases noSQL
SSL 2011 : Présentation de 2 bases noSQLSSL 2011 : Présentation de 2 bases noSQL
SSL 2011 : Présentation de 2 bases noSQL
 
Cours j query-id1575
Cours j query-id1575Cours j query-id1575
Cours j query-id1575
 
2014 04-09-fr - app dev series - session 4 - indexing
2014 04-09-fr - app dev series - session 4 - indexing2014 04-09-fr - app dev series - session 4 - indexing
2014 04-09-fr - app dev series - session 4 - indexing
 
Microservices-DDD-Telosys-Devoxx-FR-2022
Microservices-DDD-Telosys-Devoxx-FR-2022Microservices-DDD-Telosys-Devoxx-FR-2022
Microservices-DDD-Telosys-Devoxx-FR-2022
 
L'avenir de LAMP
L'avenir de LAMPL'avenir de LAMP
L'avenir de LAMP
 
Tout ce que le getting started MongoDB ne vous dira pas
Tout ce que le getting started MongoDB ne vous dira pasTout ce que le getting started MongoDB ne vous dira pas
Tout ce que le getting started MongoDB ne vous dira pas
 
Construisez votre première application MongoDB
Construisez votre première application MongoDBConstruisez votre première application MongoDB
Construisez votre première application MongoDB
 
Elastic serach
Elastic serachElastic serach
Elastic serach
 
La mobilité dans Drupal
La mobilité dans DrupalLa mobilité dans Drupal
La mobilité dans Drupal
 
Devoxx: Tribulation d'un développeur sur le Cloud
Devoxx: Tribulation d'un développeur sur le CloudDevoxx: Tribulation d'un développeur sur le Cloud
Devoxx: Tribulation d'un développeur sur le Cloud
 
Introduction à Sinatra
Introduction à SinatraIntroduction à Sinatra
Introduction à Sinatra
 
Atelier : Développement rapide d&rsquo;une application basée surXWiki
Atelier : Développement rapide d&rsquo;une application basée surXWikiAtelier : Développement rapide d&rsquo;une application basée surXWiki
Atelier : Développement rapide d&rsquo;une application basée surXWiki
 
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -introNosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
 
mix-it 2011
mix-it 2011mix-it 2011
mix-it 2011
 
Spark - Ippevent 19-02-2015
Spark - Ippevent 19-02-2015Spark - Ippevent 19-02-2015
Spark - Ippevent 19-02-2015
 
Présentation de Django @ Orange Labs (FR)
Présentation de Django @ Orange Labs (FR)Présentation de Django @ Orange Labs (FR)
Présentation de Django @ Orange Labs (FR)
 
Réu technodejs
Réu technodejsRéu technodejs
Réu technodejs
 
Jug algeria x wiki-atelier
Jug algeria x wiki-atelierJug algeria x wiki-atelier
Jug algeria x wiki-atelier
 

Más de David Pilato

2018-10-02 - Un moteur de recherche NoSQL pour chercher^H^H^H^H^H^H^H^H trouv...
2018-10-02 - Un moteur de recherche NoSQL pour chercher^H^H^H^H^H^H^H^H trouv...2018-10-02 - Un moteur de recherche NoSQL pour chercher^H^H^H^H^H^H^H^H trouv...
2018-10-02 - Un moteur de recherche NoSQL pour chercher^H^H^H^H^H^H^H^H trouv...David Pilato
 
Managing your black friday logs Voxxed Luxembourg
Managing your black friday logs Voxxed LuxembourgManaging your black friday logs Voxxed Luxembourg
Managing your black friday logs Voxxed LuxembourgDavid Pilato
 
Un moteur de recherche NoSQL pour chercher^H^H^H^H^H^H^H^H trouver...
Un moteur de recherche NoSQL pour chercher^H^H^H^H^H^H^H^H trouver...Un moteur de recherche NoSQL pour chercher^H^H^H^H^H^H^H^H trouver...
Un moteur de recherche NoSQL pour chercher^H^H^H^H^H^H^H^H trouver...David Pilato
 
Managing your Black Friday Logs NDC Oslo
Managing your  Black Friday Logs NDC OsloManaging your  Black Friday Logs NDC Oslo
Managing your Black Friday Logs NDC OsloDavid Pilato
 
Managing your black friday logs - Code Europe
Managing your black friday logs - Code EuropeManaging your black friday logs - Code Europe
Managing your black friday logs - Code EuropeDavid Pilato
 
Managing your black Friday logs - CloudConf.IT
Managing your black Friday logs - CloudConf.ITManaging your black Friday logs - CloudConf.IT
Managing your black Friday logs - CloudConf.ITDavid Pilato
 
Elasticsearch in 15 minutes
Elasticsearch in 15 minutesElasticsearch in 15 minutes
Elasticsearch in 15 minutesDavid Pilato
 
Elastify you application: from SQL to NoSQL in less than one hour!
Elastify you application: from SQL to NoSQL in less than one hour!Elastify you application: from SQL to NoSQL in less than one hour!
Elastify you application: from SQL to NoSQL in less than one hour!David Pilato
 
Elasticsearch - Devoxx France 2012 - English version
Elasticsearch - Devoxx France 2012 - English versionElasticsearch - Devoxx France 2012 - English version
Elasticsearch - Devoxx France 2012 - English versionDavid Pilato
 

Más de David Pilato (9)

2018-10-02 - Un moteur de recherche NoSQL pour chercher^H^H^H^H^H^H^H^H trouv...
2018-10-02 - Un moteur de recherche NoSQL pour chercher^H^H^H^H^H^H^H^H trouv...2018-10-02 - Un moteur de recherche NoSQL pour chercher^H^H^H^H^H^H^H^H trouv...
2018-10-02 - Un moteur de recherche NoSQL pour chercher^H^H^H^H^H^H^H^H trouv...
 
Managing your black friday logs Voxxed Luxembourg
Managing your black friday logs Voxxed LuxembourgManaging your black friday logs Voxxed Luxembourg
Managing your black friday logs Voxxed Luxembourg
 
Un moteur de recherche NoSQL pour chercher^H^H^H^H^H^H^H^H trouver...
Un moteur de recherche NoSQL pour chercher^H^H^H^H^H^H^H^H trouver...Un moteur de recherche NoSQL pour chercher^H^H^H^H^H^H^H^H trouver...
Un moteur de recherche NoSQL pour chercher^H^H^H^H^H^H^H^H trouver...
 
Managing your Black Friday Logs NDC Oslo
Managing your  Black Friday Logs NDC OsloManaging your  Black Friday Logs NDC Oslo
Managing your Black Friday Logs NDC Oslo
 
Managing your black friday logs - Code Europe
Managing your black friday logs - Code EuropeManaging your black friday logs - Code Europe
Managing your black friday logs - Code Europe
 
Managing your black Friday logs - CloudConf.IT
Managing your black Friday logs - CloudConf.ITManaging your black Friday logs - CloudConf.IT
Managing your black Friday logs - CloudConf.IT
 
Elasticsearch in 15 minutes
Elasticsearch in 15 minutesElasticsearch in 15 minutes
Elasticsearch in 15 minutes
 
Elastify you application: from SQL to NoSQL in less than one hour!
Elastify you application: from SQL to NoSQL in less than one hour!Elastify you application: from SQL to NoSQL in less than one hour!
Elastify you application: from SQL to NoSQL in less than one hour!
 
Elasticsearch - Devoxx France 2012 - English version
Elasticsearch - Devoxx France 2012 - English versionElasticsearch - Devoxx France 2012 - English version
Elasticsearch - Devoxx France 2012 - English version
 

Hands on lab Elasticsearch

  • 1. Hands On Elasticsearch Malloum Laya / David Pilato
  • 2. Qui ? $ curl http://localhost:9200/talk/speaker/TheMalloum { "nom" : "Malloum Laya", "jobs" : [ { "boite" : "Logica", "mission" : "développeur", "duree" : 3 }, { "boite" : "DGDDI (douane)", "mission" : "chef de projets", "duree" : 4 } ], "passions" : [ "famille", "informatique", "rap français" ], "blog" : "http://malloum.fr/", "twitter" : [ "@TheMalloum", "@scrutmydocs" ], "email" : "malloum.laya@gmail.com" }
  • 3. Qui ? $ curl http://localhost:9200/talk/speaker/TheMalloum { "nom" : "Malloum Laya", "jobs" : [ { "boite" : "Logica", "mission" : "développeur", "duree" : 3 }, { "boite" : "DGDDI (douane)", "mission" : "chef de projets", "duree" : 4 } ], "passions" : [ "famille", "informatique", "rap français" ], "blog" : "http://malloum.fr/", "twitter" : [ "@TheMalloum", "@scrutmydocs" ], "email" : "malloum.laya@gmail.com" }
  • 4. Qui ? $ curl http://localhost:9200/talk/speaker/TheMalloum { "nom" : "Malloum Laya", "jobs" : [ { "boite" : "Logica", "mission" : "développeur", "duree" : 3 }, { "boite" : "DGDDI (douane)", "mission" : "chef de projets", "duree" : 4 } ], "passions" : [ "famille", "informatique", "rap français" ], "blog" : "http://malloum.fr/", "twitter" : [ "@TheMalloum", "@scrutmydocs" ], "email" : "malloum.laya@gmail.com" } $ curl http://localhost:9200/talk/speaker/dpilato { "nom" : "David Pilato", "jobs" : [ { "boite" : "SRA Europe (SSII)", "mission" : "bon à tout faire", "duree" : 3 }, { "boite" : "SFR", "mission" : "touche à tout", "duree" : 3 }, { "boite" : "e-Brands / Vivendi", "mission" : "chef de projets", "duree" : 4 }, { "boite" : "DGDDI (douane)", "mission" : "mouton à 5 pattes", "duree" : 8 }, { "boite" : "IDEO Technologies", "mission" : "directeur technique", "duree" : 0 } ], "passions" : [ "famille", "job", "deejay" ], "blog" : "http://dev.david.pilato.fr/", "twitter" : [ "@dadoonet", "@elasticsearchfr", "@scrutmydocs" ], "email" : "david@pilato.fr" }
  • 6. Agenda Aperçu d'Elasticsearch Atelier 1 : indexons Atelier 2 : cherchons Atelier 3 : analysons
  • 8. Un moteur de recherche un moteur d’indexation de "documents" un moteur de recherche sur les index
  • 9. Elasticsearch Moteur de recherche pour la génération NoSQL Basé sur le standard Apache Lucene Masque la complexité Java/Lucene à l’aide de services standards HTTP / RESTful / JSON Utilisable à partir de n’importe quelle technologie Ajoute la couche cloud manquante à Lucene avec distribution, réplication, fail over Très performant : distribution des calculs sur plusieurs nœuds C’est un moteur, pas une interface graphique !
  • 10. Penser document ! Changement de paradigme : On ne pense plus SQL ! On indexe ce qu'on veut trouver ! Un document, c'est : Un objet JSON Des propriétés simples (String, boolean, number) Des propriétés complexes (array, object) Des propriétés évoluées (geoloc, binary, attachments)
  • 11. Ranger ses documents { "text": "Bienvenue au Hands On Lab #elasticsearch pour #jduchess", "created_at": "2012-04-06T20:45:36.000Z", "source": "Twitter for iPad", "truncated": false, "retweet_count": 0, "hashtag": [ { "text": "elasticsearch", "start": 27, "end": 40 }, { "text": "jduchess", "start": 47, "end": 55 } ], "user": { "id": 51172224, "name": "David Pilato", "screen_name": "dadoonet", "location": "France", "description": "Soft Architect, Project Manager, Senior Developper.rnAt this time, enjoying NoSQL world : CouchDB, ElasticSearch.rnDeeJay 4 times a year, just for fun !" } } Elasticsearch met à notre disposition Des types de document Des index Le document 1 de type Tweet dans l’index Twitter
  • 12. Agir avec Elasticsearch API REST : http://host:port/[index]/[type]/[_action/id] Méthodes HTTP : GET, POST, PUT, DELETE Documents • curl -XPUT http://localhost:9200/twitter/tweet/1 -d ‘{....}’ • curl -XGET http://localhost:9200/twitter/tweet/1 • curl -XDELETE http://localhost:9200/twitter/tweet/1 Recherche • curl -XPOST http://localhost:9200/twitter/tweet/_search -d ‘{....}’ • curl -XPOST http://localhost:9200/twitter/_search -d ‘{....}’ • curl -XPOST http://localhost:9200/_search -d ‘{....}’ Meta données Elasticsearch • curl -XGET http://localhost:9200/twitter/_status • curl -XPOST http://localhost:9200/_shutdown
  • 13. Atelier 0 On prépare le terrain
  • 15. Quelques notions • Nœud (node) : Une instance d'Elasticsearch (~ machine ?)
  • 16. Quelques notions • Nœud (node) : Une instance d'Elasticsearch (~ machine ?) • Cluster : Un ensemble de nœuds
  • 17. Quelques notions • Nœud (node) : Une instance d'Elasticsearch (~ machine ?) • Cluster : Un ensemble de nœuds • Partition (shard) : permet de découper un index en plusieurs parties pour y distribuer les documents
  • 18. Quelques notions • Nœud (node) : Une instance d'Elasticsearch (~ machine ?) • Cluster : Un ensemble de nœuds • Partition (shard) : permet de découper un index en plusieurs parties pour y distribuer les documents • Réplication (replica) : recopie d’une partition en une ou plusieurs copies dans l'ensemble du cluster
  • 19. Agir en Java // Création du noeud. Il s’agit d’une instance d’Elasticsearch complète ! Node node = NodeBuilder.nodeBuilder().node(); // Les opérations courantes (put, get, search, delete) // se font à l’aide d’un client ! Client client = node.client(); // On peut aussi faire des opérations d’administration // (état du cluster, suppression index, ...) ! AdminClient client = client.admin();
  • 20. Atelier 0 Récupérer la distribution Elasticsearch ES 0.19.9, elasticsearch.yml modifié, plugins : MOBZ Head, BigDesk, Paramedic curl -OL -k https://github.com/downloads/elasticsearchfr/hands-on/elasticsearch-0.19.9- handson.zip Cloner le repository git clone https://github.com/elasticsearchfr/hands-on.git Regarder les sources du test 0 src/test/java/org/elasticsearchfr/handson/ex0/NodeTest.java Instructions dans la javadoc et https://github.com/elasticsearchfr/hands-on#test-0-just-start-a-node
  • 21. Atelier 1 On indexe des bières ;-)
  • 22. Indexer en Java // On peut fabriquer du json à la main String json = "{ "field":"value" }"; // En utilisant le XContent d’Elasticsearch XContentBuilder xcb = XContentFactory.jsonBuilder() .startObject() .field("field", "value") .endObject(); String json = xcb.toString(); // Sérialiser JavaBean en JSon // On peut utiliser Jackson : http://wiki.fasterxml.com/JacksonHome Beer beer = new Beer("Heineken", Colour.PALE, 0.33, 3); ObjectMapper mapper = new ObjectMapper(); String json = mapper.writeValueAsString(beer); // On peut indexer ! client.prepareIndex("index", "type").setSource(json).execute().actionGet(); client.prepareIndex("index", "type", "id").setSource(xcb).execute().actionGet(); // Insérer en mode Bulk BulkRequestBuilder brb = client.prepareBulk(); // Ajouter des actions à réaliser brb.add(new IndexRequest("index", "type").source(json)); // Exécuter le bulk brb.execute().actionGet();
  • 23. Récupérer en Java // Récupérer GetResponse gr = client.prepareGet("index", "type", "id").execute().actionGet(); // Désérialiser de JSon vers JavaBean ObjectMapper mapper = new ObjectMapper(); Beer beer = mapper.readValue(gr.getSourceAsBytes(), Beer.class);
  • 24. Effacer en Java // Effacer client.prepareDelete("index", "type", "id").execute().actionGet(); // Effacer en mode Bulk BulkRequestBuilder brb = client.prepareBulk(); // Ajouter des actions à réaliser brb.add(new DeleteRequest("index", "type", "id")); // Exécuter le bulk brb.execute().actionGet();
  • 25. Atelier 1 Regarder les sources du test 1 src/test/java/org/elasticsearchfr/handson/ex1/IndexTest.java Instructions dans la javadoc et https://github.com/elasticsearchfr/hands-on#test-1-indexget-and-delete-some-documents
  • 26. Atelier 2 On cherche des bières ;-)
  • 27. Query DSL Type Description Match All Recherche tout le contenu QueryString Recherche « à la google » : syntaxe Lucene possible +, -, FROM, TO, ^ Bool Recherche multi-critères (MUST, MUST NOT, SHOULD) Term Recherche d'un terme précis dans un champ donné Match Recherche « à la google » dans le contenu d’un champ Range Recherche par intervalle (>, >=, <, <=) dans un champ
  • 28. Chercher en Java // Fabriquer un QueryBuilder (qb) // MatchAll QueryBuilder qb = QueryBuilders.matchAllQuery(); // TermQuery QueryBuilder qb = QueryBuilders.termQuery("field", "value"); // MatchQuery QueryBuilder qb = QueryBuilders.matchQuery("field", "you can enter a text here"); // QueryString QueryBuilder qb = QueryBuilders.queryString("you can enter a text here"); // RangeQuery QueryBuilder qb = QueryBuilders.rangeQuery("field").from(5).to(10); // BoolQuery QueryBuilder qb = QueryBuilders.boolQuery() .must(QueryBuilders.termQuery("field1", "value")) .mustNot(QueryBuilders.termQuery("field2", "value")) .should(QueryBuilders.rangeQuery("field3").from(0).to(5));
  • 29. Les résultats // Lancer une recherche SearchResponse sr = client.prepareSearch().setQuery(qb).execute().actionGet(); // Récupérer le temps d’exécution long execTime = sr.getTookInMillis(); // Récupérer le nombre de hits long nbHits = sr.getHits().getTotalHits(); // Récupérer les hits SearchHit[] hits = sr.getHits().getHits(); SearchHit hit = hits[0]; // Récupérer les coordonnées du document hit.getIndex(); hit.getType(); hit.getId(); // Récupérer la pertinence du document hit.getScore(); // Récupérer le document source au format Json hit.getSourceAsString();
  • 30. Atelier 2 Regarder les sources du test 2 src/test/java/org/elasticsearchfr/handson/ex2/SearchTest.java Instructions dans la javadoc et https://github.com/elasticsearchfr/hands-on#test-2-searching-for-documents
  • 31. Atelier 3 La bière vue sous un autre angle Les facettes
  • 32. Les facettes ID Marque Taille Prix 1 Heineken 0.25 3.50 2 Grimbergen 0.25 4.00 3 Kriek 0.25 3.80 4 Heineken 0.5 6.80 5 Grimbergen 0.5 7.80 6 Kriek 0.5 7.50 7 Heineken 1 12.00 8 Grimbergen 1 14.00 9 Kriek 1 14.00
  • 33. Term Facet ID Marque Taille Prix 1 Heineken 0.25 3.50 2 Grimbergen 0.25 4.00 3 Kriek 0.25 3.80 4 Heineken 0.5 6.80 5 Grimbergen 0.5 7.80 6 Kriek 0.5 7.50 7 Heineken 1 12.00 8 Grimbergen 1 14.00 9 Kriek 1 14.00
  • 34. Term Facet ID Marque Taille Prix 1 Heineken 0.25 3.50 2 Grimbergen 0.25 4.00 3 Kriek 0.25 Marque Count3.80 4 Heineken 0.5 Heineken 3 6.80 5 Grimbergen 0.5Grimbergen 3 7.80 6 Kriek 0.5 Kriek 3 7.50 7 Heineken 1 12.00 8 Grimbergen 1 14.00 9 Kriek 1 14.00
  • 35. TermFacet en Java // Fabriquer une TermFacet (facet) AbstractFacetBuilder facet = FacetBuilders.termsFacet("bybrand").field("marque"); // Avec la recherche SearchResponse sr = client.prepareSearch() .setQuery(qb) .addFacet(facet) .execute().actionGet(); // Facette en retour TermsFacet bybrand = sr.getFacets().facet("bybrand"); for (TermsFacet.Entry entry : bybrand) { String marque = entry.getTerm(); int nb = entry.count(); }
  • 36. Range Facet ID Marque Taille Prix 1 Heineken 0.25 3.50 2 Grimbergen 0.25 4.00 3 Kriek 0.25 3.80 4 Heineken 0.5 6.80 5 Grimbergen 0.5 7.80 6 Kriek 0.5 7.50 7 Heineken 1 12.00 8 Grimbergen 1 14.00 9 Kriek 1 14.00
  • 37. Range Facet ID Marque Taille Prix 1 Heineken 0.25 3.50 2 Grimbergen 0.25 4.00 3 Ranges Count Kriek Min Max Moy 0.25 Total 3.80 x<54 3 3.50 Heineken 4.00 3.77 11.30 0.5 6.80 5 <= x < 10 5 3 Grimbergen 7.80 6.80 7.37 22.10 0.5 7.80 10 <= x6 3 12.00 Kriek 14.00 13.33 40.00 0.5 7.50 7 Heineken 1 12.00 8 Grimbergen 1 14.00 9 Kriek 1 14.00
  • 38. RangeFacet en Java // Fabriquer une TermFacet (facet) AbstractFacetBuilder facet = FacetBuilders.rangeFacet("byprice") .field("price") .addUnboundedFrom(5) .addRange(5, 10) .addUnboundedTo(10); // Avec la recherche SearchResponse sr = client.prepareSearch() .setQuery(qb) .addFacet(facet) .execute().actionGet(); // Facette en retour RangeFacet byprice = sr.getFacets().facet("byprice"); for (RangeFacet.Entry entry : byprice) { entry.to(); entry.from(); entry.min(); entry.max(); entry.mean(); entry.count(); }
  • 39. Atelier 3 Regarder les sources du test 3 src/test/java/org/elasticsearchfr/handson/ex3/FacetTest.java Instructions dans la javadoc et https://github.com/elasticsearchfr/hands-on#test-3-analyzing-documents-with-facets
  • 40. Mailing List ES France elasticsearch-fr@googlegroups.com
  • 41. Mailing List ES France elasticsearch-fr@googlegroups.com Slides sur http://fr.slideshare.net/dadoonet Sources sur https://github.com/elasticsearchfr/hands-on

Notas del editor

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n