Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Elasticsearch.                     Le moteur de recherche                       élastique pour tousDavid Pilato, IDEO Tech...
Qui ?$ curl http://localhost:9200/talk/speaker/dpilato{ "nom" : "David Pilato", "jobs" : [  { "boite" : "SRA Europe (SSII)...
Qui ?$ curl http://localhost:9200/talk/speaker/dpilato{ "nom" : "David Pilato", "jobs" : [  { "boite" : "SRA Europe (SSII)...
ScrutMyDocs.org
Pour la démo Faites du bruit sur Twitter      avec le hashtag#elasticsearch
SQL Classique        Cherche moi un document de décembre 2011 portant sur la france      et contenant produit et davidEn S...
SQL Classique        Cherche moi un document de décembre 2011 portant sur la france      et contenant produit et davidEn S...
Les limites de la       recherche SQL• En général, on se limite aux champs  figés ou codifiés• Pas de tolérance aux fotes de...
Au final, on obtient             • Autrement dit :               tu as intérêt à               savoir ce que               ...
Un moteur de recherche• Un moteur de recherche est composé de :   • un moteur d’indexation de documents   • un moteur de r...
Elasticsearch
Elasticsearch   Your Data, your Search !
Elasticsearch• Moteur de recherche pour la génération NoSQL• Basé sur le standard Apache Lucene• Masque la complexité Java...
Points clés• Simple ! En quelques minutes (Zero Conf), on dispose   d’un moteur complet prêt à recevoir nos documents à   ...
Ranger ses données• Document : Un objet représentant les données (au sens   NoSQL).   Penser "recherche", cest oublier le ...
Ranger ses données        • Document : Un objet représentant les données (au sens             NoSQL).             Penser "...
Ranger ses données        • Document : Un objet représentant les données (au sens             NoSQL).             Penser "...
Ranger ses données        • Document : Un objet représentant les données (au sens             NoSQL).             Penser "...
Interagir avecElasticsearch
Interagir avec              Elasticsearch•   API REST : http://host:port/[index]/[type]/[_action/id]    Méthodes HTTP : GE...
Interagir avec              Elasticsearch•   API REST : http://host:port/[index]/[type]/[_action/id]    Méthodes HTTP : GE...
Interagir avec              Elasticsearch•   API REST : http://host:port/[index]/[type]/[_action/id]    Méthodes HTTP : GE...
Interagir avec              Elasticsearch•   API REST : http://host:port/[index]/[type]/[_action/id]    Méthodes HTTP : GE...
Interagir avec                Elasticsearch•   API REST : http://host:port/[index]/[type]/[_action/id]    Méthodes HTTP : ...
Interagir avec                Elasticsearch•   API REST : http://host:port/[index]/[type]/[_action/id]    Méthodes HTTP : ...
Interagir avec                Elasticsearch•   API REST : http://host:port/[index]/[type]/[_action/id]    Méthodes HTTP : ...
Interagir avec                Elasticsearch•   API REST : http://host:port/[index]/[type]/[_action/id]    Méthodes HTTP : ...
Interagir avec                Elasticsearch•   API REST : http://host:port/[index]/[type]/[_action/id]    Méthodes HTTP : ...
Indexer$ curl -XPUT localhost:9200/twitter/tweet/1 -d {   "text": "Bienvenue à la conférence #elasticsearch pour #ideobar"...
Indexer$ curl -XPUT localhost:9200/twitter/tweet/1 -d {   "text": "Bienvenue à la conférence #elasticsearch pour #ideobar"...
Chercher$ curl localhost:9200/twitter/tweet/_search?q=elasticsearch
Chercher    $ curl localhost:9200/twitter/tweet/_search?q=elasticsearch{    "took" : 24,    "timed_out" : false,    "_shar...
Chercher    $ curl localhost:9200/twitter/tweet/_search?q=elasticsearch{    "took" : 24,                      Nb de    "ti...
Chercher    $ curl localhost:9200/twitter/tweet/_search?q=elasticsearch{    "took" : 24,    "timed_out" : false,    "_shar...
Chercher    $ curl localhost:9200/twitter/tweet/_search?q=elasticsearch{    "took" : 24,    "timed_out" : false,    "_shar...
Chercher    $ curl localhost:9200/twitter/tweet/_search?q=elasticsearch{    "took" : 24,    "timed_out" : false,    "_shar...
Les résultats• Elasticsearch renvoie les 10 premiers  résultats. Il fournit l’API permettant  de naviguer de page en page ...
Query DSL• Requêtes précises : plutôt que de  chercher « à la google », on peut  utiliser des critères précis :
Query DSL• Requêtes précises : plutôt que de  chercher « à la google », on peut  utiliser des critères précis :  $ curl -X...
Injecter les données   Et au milieu coule une rivière
La collecte
La collecte    Stockage    Données
La collecteDoc          Stockage          Données
La collecte     Stockage     Données    Doc
La collecteDoc           Stockage           Données          Doc
La collecte     Stockage     Données    Doc   Doc
La collecte     Stockage     Données    Doc   Doc
La collecte     Stockage     Données    Doc   Doc
La collecte    Stockage    Données      Doc      Doc
La collecteDoc          Stockage          Données            Doc            Doc
La collecte    Stockage    Données      Doc      Doc
La collecte    Stockage    Données      Doc      Doc
Quelques Rivers...
Quelques Rivers...• CouchDB River
Quelques Rivers...• CouchDB River• MongoDB River
Quelques Rivers...• CouchDB River• MongoDB River• JDBC River
Quelques Rivers...• CouchDB River• MongoDB River• JDBC River• Wikipedia River
Quelques Rivers...• CouchDB River• MongoDB River• JDBC River• Wikipedia River• Twitter River
Quelques Rivers...• CouchDB River• MongoDB River• JDBC River• Wikipedia River• Twitter River• RabbitMQ River
Quelques Rivers...• CouchDB River• MongoDB River• JDBC River• Wikipedia River• Twitter River• RabbitMQ River• ActiveMQ River
Quelques Rivers...• CouchDB River• MongoDB River• JDBC River• Wikipedia River• Twitter River• RabbitMQ River• ActiveMQ Riv...
Quelques Rivers...• CouchDB River• MongoDB River• JDBC River• Wikipedia River• Twitter River• RabbitMQ River• ActiveMQ Riv...
Quelques Rivers...• CouchDB River• MongoDB River• JDBC River• Wikipedia River• Twitter River• RabbitMQ River• ActiveMQ Riv...
Quelques Rivers...• CouchDB River• MongoDB River• JDBC River• Wikipedia River• Twitter River• RabbitMQ River• ActiveMQ Riv...
Quelques Rivers...• CouchDB River• MongoDB River• JDBC River• Wikipedia River• Twitter River• RabbitMQ River• ActiveMQ Riv...
Analyser              La puissance des facettes !Faites parler vos données en les regardant sous différentes facettes !   ...
Des tweetsID    Username          Date      Hashtag1     dadoonet       2012-04-18     12        ideo        2012-04-18   ...
Term FacetD    Username          Date      Hashtag1    dadoonet       2012-04-18     12       ideo        2012-04-18     5...
Term FacetD    Username          Date             Hashtag1    dadoonet       2012-04-18            12       ideo        20...
Term FacetD    Username          Date      Hashtag1    dadoonet       2012-04-18     12       ideo        2012-04-18     5...
Term FacetD    Username          Date            Hashtag1    dadoonet       2012-04-18                            "facets"...
Term FacetD    Username          Date             Hashtag1    dadoonet       2012-04-18                            "facets...
Date Histogram Facet       Date      Hashtag    2012-04-18     1    2012-04-18     5h   2012-04-18     2    2012-04-18    ...
Date Histogram Facet       Date      Hashtag    2012-04-18     1                 Par mois    2012-04-18     5        Date ...
Date Histogram Facet       Date      Hashtag    2012-04-18     1                  Par mois    2012-04-18     5          Da...
Date Histogram Facet       Date      Hashtag    2012-04-18     1    2012-04-18     5h   2012-04-18     2    2012-04-18    ...
Date Histogram Facet       Date      Hashtag                       "facets" : {    2012-04-18     1     "perday" : {      ...
Date Histogram Facet       Date      Hashtag                       "facets" : {    2012-04-18     1     "perday" : {      ...
Range FacetHashtag  1  5  2  2  6  3  3  7  4
Range FacetHashtag  1  5  2        Hashtag      Count   Min   Max   Moy     Total  2          x<3         3      1      2 ...
Range FacetHashtag  1  5  2  2  6  3  3  7  4
Range Facet            "facets" : { "hashtags" : {              "range" : { "field" : "hashtags",              "ranges" : ...
Range Facet             "facets" : { "hashtags" : {               "range" : { "field" : "hashtags",               "ranges"...
Site marchand
Site marchand
Site marchand
Site marchand
Site marchand      Ranges      Term      Term     Ranges
Analyse temps-réel• Faire un matchAll sur lensemble des données• Actualiser toutes les x secondes• Indexer en même temps l...
FacettesCartographiques
Reprenons notre  formulaire
Reprenons notre  formulaire           Recherche Full Text
Reprenons notre  formulaire
Reprenons notre  formulaire
DémonstrationAvons-nous fait du bruit ?
Architecture
Architecture
Architecture          Twitter         Streaming            API
Architecture          Twitter         Streaming            API
Architecture                                    Twitter                    Twitter        Streaming                     Ri...
ArchitectureChrome                                        Twitter                        Twitter        Streaming         ...
ArchitectureUn peu plus de technique : partitions / réplications / scalabilité
Lexique
Lexique• Nœud (node) : Une instance dElasticsearch (~ machine ?)
Lexique• Nœud (node) : Une instance dElasticsearch (~ machine ?)• Cluster : Un ensemble de nœuds
Lexique• Nœud (node) : Une instance dElasticsearch (~ machine ?)• Cluster : Un ensemble de nœuds• Partition (shard) : perm...
Lexique• Nœud (node) : Une instance dElasticsearch (~ machine ?)• Cluster : Un ensemble de nœuds• Partition (shard) : perm...
Lexique• Nœud (node) : Une instance dElasticsearch (~ machine ?)• Cluster : Un ensemble de nœuds• Partition (shard) : perm...
Lexique• Nœud (node) : Une instance dElasticsearch (~ machine ?)• Cluster : Un ensemble de nœuds• Partition (shard) : perm...
Créons un index                    Cluster           Nœud 1                     Client                     CURL
Créons un index$ curl -XPUT localhost:9200/twitter -d {                                  Cluster     "index" : {          ...
Créons un index$ curl -XPUT localhost:9200/twitter -d {                                Cluster     "index" : {            ...
Réallocation dynamique                       Cluster   Nœud 1    Nœud 2   Shard 0   Shard 0   Shard 1   Shard 1
Réallocation dynamique                       Cluster   Nœud 1    Nœud 2              Nœud 3   Shard 0   Shard 0   Shard 1 ...
Réallocation dynamique                       Cluster   Nœud 1    Nœud 2              Nœud 3   Shard 0   Shard 0           ...
Réallocation dynamique                       Cluster   Nœud 1    Nœud 2              Nœud 3   Shard 0                     ...
Réallocation dynamique                       Cluster   Nœud 1    Nœud 2              Nœud 3   Shard 0                     ...
Réallocation dynamique                       Cluster   Nœud 1    Nœud 2              Nœud 3     Nœud 4   Shard 0          ...
Réallocation dynamique                       Cluster   Nœud 1    Nœud 2              Nœud 3     Nœud 4   Shard 0          ...
Réallocation dynamique                           Cluster       Nœud 1    Nœud 2              Nœud 3     Nœud 4       Shard...
Indexons un document                                       Cluster   Nœud 1                Nœud 2                     Nœud...
Indexons un document                                          Cluster   Nœud 1                   Nœud 2                   ...
Indexons un document                                          Cluster   Nœud 1                   Nœud 2                   ...
Indexons un document                                          Cluster   Nœud 1                   Nœud 2                   ...
Indexons un                                                           2ème   document                                     ...
Indexons un                                                           2ème   document                                     ...
Indexons un                                                           2ème   document                                     ...
Indexons un                                                           2ème   document                                     ...
Indexons un                                                           2ème   document                                     ...
Cherchons !                                     ClusterNœud 1                   Nœud 2                Nœud 3          Nœud...
Cherchons !                                     ClusterNœud 1                   Nœud 2                Nœud 3          Nœud...
Cherchons !                               ClusterNœud 1               Nœud 2              Nœud 3          Nœud 4          ...
Cherchons !                                   ClusterNœud 1                   Nœud 2              Nœud 3          Nœud 4  ...
Cherchons !                         {                                     Cluster                             "took" : 24,...
Cherchons encore !                                       Cluster  Nœud 1                   Nœud 2                Nœud 3   ...
Cherchons encore !                                       Cluster  Nœud 1                   Nœud 2                Nœud 3   ...
Cherchons encore !                                       Cluster  Nœud 1                   Nœud 2                Nœud 3   ...
Cherchons encore !                                       Cluster  Nœud 1                   Nœud 2                Nœud 3   ...
Cherchons encore !                                       Cluster  Nœud 1                   Nœud 2                Nœud 3   ...
Cherchons encore !                                     Cluster  Nœud 1                   Nœud 2              Nœud 3       ...
Cherchons encore !                                   Cluster  Nœud 1                 Nœud 2              Nœud 3           ...
Cherchons encore !                         {                                     Cluster                             "took...
La communauté~100 contributeurs directs au projet (+ de 2800 watchers et + de 470 forks)
La communauté~100 contributeurs directs au projet (+ de 2800 watchers et + de 470 forks)
Rejoignez le mouvement !         @ElasticsearchFR                                               www.elasticsearch.fr      ...
Elasticsearch - OSDC France 2012
Upcoming SlideShare
Loading in …5
×

Elasticsearch - OSDC France 2012

4,304 views

Published on

Les slides de mon talk le 13 octobre 2012 15h pour OSDC.fr : http://act.osdc.fr/osdc2012fr/talk/4300

Published in: Technology
  • Be the first to comment

Elasticsearch - OSDC France 2012

  1. 1. Elasticsearch. Le moteur de recherche élastique pour tousDavid Pilato, IDEO Technologies, Paris
  2. 2. Qui ?$ 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"}
  3. 3. Qui ?$ 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"}
  4. 4. ScrutMyDocs.org
  5. 5. Pour la démo Faites du bruit sur Twitter avec le hashtag#elasticsearch
  6. 6. SQL Classique Cherche moi un document de décembre 2011 portant sur la france et contenant produit et davidEn SQL :
  7. 7. SQL Classique Cherche moi un document de décembre 2011 portant sur la france et contenant produit et davidEn SQL :SELECT doc.*, pays.*FROM doc, paysWHERE doc.pays_code = pays.code AND doc.date_doc > to_date(2011-12, yyyy-mm) AND doc.date_doc < to_date(2012-01, yyyy-mm) AND lower(pays.libelle) = france AND lower(doc.commentaire) LIKE ‘%produit% AND lower(doc.commentaire) LIKE ‘%david%;
  8. 8. Les limites de la recherche SQL• En général, on se limite aux champs figés ou codifiés• Pas de tolérance aux fotes de frappe• Performances désastreuses sur du like % sur des millions de ligne• Plombe les performances de l’insertion• Recherche « google » impossible !
  9. 9. Au final, on obtient • Autrement dit : tu as intérêt à savoir ce que tu cherches ! • Fouiller est interdit !
  10. 10. Un moteur de recherche• Un moteur de recherche est composé de : • un moteur d’indexation de documents • un moteur de recherche sur les index• De fait, un moteur de recherche est énormément plus rapide qu’une base de données pour faire des recherches : c’est son métier !
  11. 11. Elasticsearch
  12. 12. Elasticsearch Your Data, your Search !
  13. 13. 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• C’est un moteur, pas une interface graphique !
  14. 14. Points clés• Simple ! En quelques minutes (Zero Conf), on dispose d’un moteur complet prêt à recevoir nos documents à indexer et à faire des recherches.• Efficace ! Il suffit de démarrer des nœuds Elasticsearch pour bénéficier immédiatement de la réplication, de l’équilibrage de charge.• Puissant ! Basé sur Lucene, il en parallélise les traitements pour donner des temps de réponse acceptables (en général inférieurs à 100ms)• Complet ! Beaucoup de fonctionnalités : analyse et facettes, percolation, rivières, plugins, …
  15. 15. Ranger ses données• Document : Un objet représentant les données (au sens NoSQL). Penser "recherche", cest oublier le SGBDR et penser "Documents"• Type : Regroupe des documents de même type• Index : Espace logique de stockage des documents dont les types sont fonctionnellement communs
  16. 16. Ranger ses données • Document : Un objet représentant les données (au sens NoSQL). Penser "recherche", cest oublier le SGBDR et penser "Documents"{ "text": "Bienvenue à la conférence #elasticsearch pour #ideobar", "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": "ideobar", "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 NoSQLworld : CouchDB, ElasticSearch.rnDeeJay 4 times a year, just for fun !" }} • Type : Regroupe des documents de même type • Index : Espace logique de stockage des documents dont les types sont fonctionnellement communs
  17. 17. Ranger ses données • Document : Un objet représentant les données (au sens NoSQL). Penser "recherche", cest oublier le SGBDR et penser "Documents"{ "text": "Bienvenue à la conférence #elasticsearch pour #ideobar", "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": "ideobar", "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 NoSQLworld : CouchDB, ElasticSearch.rnDeeJay 4 times a year, just for fun !" }} • Type : Regroupe des documents de même type
  18. 18. Ranger ses données • Document : Un objet représentant les données (au sens NoSQL). Penser "recherche", cest oublier le SGBDR et penser "Documents"{ "text": "Bienvenue à la conférence #elasticsearch pour #ideobar", "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": "ideobar", "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 NoSQLworld : CouchDB, ElasticSearch.rnDeeJay 4 times a year, just for fun !" }} • Type : Regroupe des documents de même type • Index : Espace logique de stockage des documents dont les types sont fonctionnellement communs
  19. 19. Interagir avecElasticsearch
  20. 20. Interagir avec Elasticsearch• API REST : http://host:port/[index]/[type]/[_action/id] Méthodes HTTP : GET, POST, PUT, DELETE
  21. 21. Interagir 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
  22. 22. Interagir 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 • curl -XGET http://localhost:9200/twitter/tweet/1
  23. 23. Interagir 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 • curl -XGET http://localhost:9200/twitter/tweet/1 • curl -XDELETE http://localhost:9200/twitter/tweet/1
  24. 24. Interagir 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 • 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
  25. 25. Interagir 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 • 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 • curl -XPOST http://localhost:9200/twitter/_search
  26. 26. Interagir 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 • 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 • curl -XPOST http://localhost:9200/twitter/_search • curl -XPOST http://localhost:9200/_search
  27. 27. Interagir 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 • 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 • curl -XPOST http://localhost:9200/twitter/_search • curl -XPOST http://localhost:9200/_search• Meta-données • curl -XGET http://localhost:9200/twitter/_status
  28. 28. Interagir 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 • 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 • curl -XPOST http://localhost:9200/twitter/_search • curl -XPOST http://localhost:9200/_search• Meta-données • curl -XGET http://localhost:9200/twitter/_status • curl -XPOST http://localhost:9200/_shutdown
  29. 29. Indexer$ curl -XPUT localhost:9200/twitter/tweet/1 -d { "text": "Bienvenue à la conférence #elasticsearch pour #ideobar", "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": "ideobar", "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 ayear, just for fun !" }}
  30. 30. Indexer$ curl -XPUT localhost:9200/twitter/tweet/1 -d { "text": "Bienvenue à la conférence #elasticsearch pour #ideobar", "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": "ideobar", "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 ayear, just for fun !" }}{ "ok":true, "_index":"twitter", "_type":"tweet", "_id":"1"}
  31. 31. Chercher$ curl localhost:9200/twitter/tweet/_search?q=elasticsearch
  32. 32. Chercher $ curl localhost:9200/twitter/tweet/_search?q=elasticsearch{ "took" : 24, "timed_out" : false, "_shards" : { "total" : 5, "successful" : 5, "failed" : 0 }, "hits" : { "total" : 1, "max_score" : 0.227, "hits" : [ { "_index" : "twitter", "_type" : "tweet", "_id" : "1", "_score" : 0.227, "_source" : { "text": "Bienvenue à la conférence #elasticsearch pour #ideobar", "created_at": "2012-04-06T20:45:36.000Z", "source": "Twitter for iPad", […] } } ] }}
  33. 33. Chercher $ curl localhost:9200/twitter/tweet/_search?q=elasticsearch{ "took" : 24, Nb de "timed_out" : false, documents "_shards" : { "total" : 5, "successful" : 5, "failed" : 0 }, "hits" : { "total" : 1, "max_score" : 0.227, "hits" : [ { "_index" : "twitter", "_type" : "tweet", "_id" : "1", "_score" : 0.227, "_source" : { "text": "Bienvenue à la conférence #elasticsearch pour #ideobar", "created_at": "2012-04-06T20:45:36.000Z", "source": "Twitter for iPad", […] } } ] }}
  34. 34. Chercher $ curl localhost:9200/twitter/tweet/_search?q=elasticsearch{ "took" : 24, "timed_out" : false, "_shards" : { "total" : 5, "successful" : 5, "failed" : 0 }, "hits" : { "total" : 1, "max_score" : 0.227, "hits" : [ { Coordonnées "_index" : "twitter", "_type" : "tweet", "_id" : "1", "_score" : 0.227, "_source" : { "text": "Bienvenue à la conférence #elasticsearch pour #ideobar", "created_at": "2012-04-06T20:45:36.000Z", "source": "Twitter for iPad", […] } } ] }}
  35. 35. Chercher $ curl localhost:9200/twitter/tweet/_search?q=elasticsearch{ "took" : 24, "timed_out" : false, "_shards" : { "total" : 5, "successful" : 5, "failed" : 0 }, "hits" : { "total" : 1, "max_score" : 0.227, "hits" : [ { "_index" : "twitter", "_type" : "tweet", "_id" : "1", "_score" : 0.227, "_source" : { "text": "Bienvenue à la conférence #elasticsearch pour #ideobar", "created_at": "2012-04-06T20:45:36.000Z", "source": "Twitter for iPad", […] } Pertinence } ] }}
  36. 36. Chercher $ curl localhost:9200/twitter/tweet/_search?q=elasticsearch{ "took" : 24, "timed_out" : false, "_shards" : { "total" : 5, "successful" : 5, "failed" : 0 }, "hits" : { "total" : 1, Document "max_score" : 0.227, "hits" : [ { source "_index" : "twitter", "_type" : "tweet", "_id" : "1", "_score" : 0.227, "_source" : { "text": "Bienvenue à la conférence #elasticsearch pour #ideobar", "created_at": "2012-04-06T20:45:36.000Z", "source": "Twitter for iPad", […] } } ] }}
  37. 37. Les résultats• Elasticsearch renvoie les 10 premiers résultats. Il fournit l’API permettant de naviguer de page en page (from, size)• Par défaut, le tri est réalisé sur le score de pertinence
  38. 38. Query DSL• Requêtes précises : plutôt que de chercher « à la google », on peut utiliser des critères précis :
  39. 39. Query DSL• Requêtes précises : plutôt que de chercher « à la google », on peut utiliser des critères précis : $ curl -XPOST localhost:9200/twitter/tweet/_search -d ’{ "bool" : { "must" : { "term" : { "user" : "kimchy" } }, "must_not" : { "range" : { "age" : { "from" : 10, "to" : 20 } } }, "should" : [ { "term" : { "tag" : "wow" } },{ "match" : { "tag" : "elasticsearch is cool" } } ] } }’
  40. 40. Injecter les données Et au milieu coule une rivière
  41. 41. La collecte
  42. 42. La collecte Stockage Données
  43. 43. La collecteDoc Stockage Données
  44. 44. La collecte Stockage Données Doc
  45. 45. La collecteDoc Stockage Données Doc
  46. 46. La collecte Stockage Données Doc Doc
  47. 47. La collecte Stockage Données Doc Doc
  48. 48. La collecte Stockage Données Doc Doc
  49. 49. La collecte Stockage Données Doc Doc
  50. 50. La collecteDoc Stockage Données Doc Doc
  51. 51. La collecte Stockage Données Doc Doc
  52. 52. La collecte Stockage Données Doc Doc
  53. 53. Quelques Rivers...
  54. 54. Quelques Rivers...• CouchDB River
  55. 55. Quelques Rivers...• CouchDB River• MongoDB River
  56. 56. Quelques Rivers...• CouchDB River• MongoDB River• JDBC River
  57. 57. Quelques Rivers...• CouchDB River• MongoDB River• JDBC River• Wikipedia River
  58. 58. Quelques Rivers...• CouchDB River• MongoDB River• JDBC River• Wikipedia River• Twitter River
  59. 59. Quelques Rivers...• CouchDB River• MongoDB River• JDBC River• Wikipedia River• Twitter River• RabbitMQ River
  60. 60. Quelques Rivers...• CouchDB River• MongoDB River• JDBC River• Wikipedia River• Twitter River• RabbitMQ River• ActiveMQ River
  61. 61. Quelques Rivers...• CouchDB River• MongoDB River• JDBC River• Wikipedia River• Twitter River• RabbitMQ River• ActiveMQ River• RSS River
  62. 62. Quelques Rivers...• CouchDB River• MongoDB River• JDBC River• Wikipedia River• Twitter River• RabbitMQ River• ActiveMQ River• RSS River• LDAP River
  63. 63. Quelques Rivers...• CouchDB River• MongoDB River• JDBC River• Wikipedia River• Twitter River• RabbitMQ River• ActiveMQ River• RSS River• LDAP River• FS River
  64. 64. Quelques Rivers...• CouchDB River• MongoDB River• JDBC River• Wikipedia River• Twitter River• RabbitMQ River• ActiveMQ River• RSS River• LDAP River• FS River• Dropbox River
  65. 65. Quelques Rivers...• CouchDB River• MongoDB River• JDBC River• Wikipedia River• Twitter River• RabbitMQ River• ActiveMQ River• RSS River• LDAP River• FS River• Dropbox River• Dick Rivers
  66. 66. Analyser La puissance des facettes !Faites parler vos données en les regardant sous différentes facettes ! (Et en temps quasi réel, s’il vous plait !)
  67. 67. Des tweetsID Username Date Hashtag1 dadoonet 2012-04-18 12 ideo 2012-04-18 53 elasticsearch 2012-04-18 24 dadoonet 2012-04-18 25 ideo 2012-04-18 66 elasticsearch 2012-04-19 37 dadoonet 2012-04-19 38 ideo 2012-04-19 79 elasticsearch 2012-04-20 4
  68. 68. Term FacetD Username Date Hashtag1 dadoonet 2012-04-18 12 ideo 2012-04-18 53 elasticsearch 2012-04-18 24 dadoonet 2012-04-18 25 ideo 2012-04-18 66 elasticsearch 2012-04-19 37 dadoonet 2012-04-19 38 ideo 2012-04-19 79 elasticsearch 2012-04-20 4
  69. 69. Term FacetD Username Date Hashtag1 dadoonet 2012-04-18 12 ideo 2012-04-18 53 elasticsearch 2012-04-18Username 2 Count4 dadoonet 2012-04-18dadoonet 2 35 ideo 2012-04-18 ideo 6 36 elasticsearch 2012-04-19 elasticsearch 3 37 dadoonet 2012-04-19 38 ideo 2012-04-19 79 elasticsearch 2012-04-20 4
  70. 70. Term FacetD Username Date Hashtag1 dadoonet 2012-04-18 12 ideo 2012-04-18 53 elasticsearch 2012-04-18 24 dadoonet 2012-04-18 25 ideo 2012-04-18 66 elasticsearch 2012-04-19 37 dadoonet 2012-04-19 38 ideo 2012-04-19 79 elasticsearch 2012-04-20 4
  71. 71. Term FacetD Username Date Hashtag1 dadoonet 2012-04-18 "facets" : { 1 "users" : { "terms" : {"field" : "username"} } }2 ideo 2012-04-18 53 elasticsearch 2012-04-18 24 dadoonet 2012-04-18 25 ideo 2012-04-18 66 elasticsearch 2012-04-19 37 dadoonet 2012-04-19 38 ideo 2012-04-19 79 elasticsearch 2012-04-20 4
  72. 72. Term FacetD Username Date Hashtag1 dadoonet 2012-04-18 "facets" : { 1 "users" : { "terms" : {"field" : "username"} } }2 ideo 2012-04-18 5 "facets" : {3 elasticsearch 2012-04-18 "users" : { 2 "_type" : "terms",4 dadoonet 2012-04-18"missing" : 0,2 "total": 9,5 ideo 2012-04-18"other": 0, 6 "terms" : [6 elasticsearch 2012-04-19 { "term" : "dadoonet", "count" },3 }, 3 { "term" : "ideo", "count" : 3 : { "term" : "elasticsearch", "count" : 3 }7 dadoonet 2012-04-19] 3 }8 ideo 2012-04-19 } 79 elasticsearch 2012-04-20 4
  73. 73. Date Histogram Facet Date Hashtag 2012-04-18 1 2012-04-18 5h 2012-04-18 2 2012-04-18 2 2012-04-18 6h 2012-04-19 3 2012-04-19 3 2012-04-19 7h 2012-04-20 4
  74. 74. Date Histogram Facet Date Hashtag 2012-04-18 1 Par mois 2012-04-18 5 Date Counth 2012-04-18 2 2012-04 9 2012-04-18 2 2012-04-18 6h 2012-04-19 3 2012-04-19 3 2012-04-19 7h 2012-04-20 4
  75. 75. Date Histogram Facet Date Hashtag 2012-04-18 1 Par mois 2012-04-18 5 Date Counth 2012-04-18 2 2012-04 9 2012-04-18 2 2012-04-18 6 Par jourh 2012-04-19 3 Date Count 2012-04-19 3 2012-04-18 5 2012-04-19 7 2012-04-19 3h 2012-04-20 4 2012-04-20 1
  76. 76. Date Histogram Facet Date Hashtag 2012-04-18 1 2012-04-18 5h 2012-04-18 2 2012-04-18 2 2012-04-18 6h 2012-04-19 3 2012-04-19 3 2012-04-19 7h 2012-04-20 4
  77. 77. Date Histogram Facet Date Hashtag "facets" : { 2012-04-18 1 "perday" : { "date_histogram" : { 2012-04-18 5 "field" : "date", "interval" : "day" }h 2012-04-18 2 } } 2012-04-18 2 2012-04-18 6h 2012-04-19 3 2012-04-19 3 2012-04-19 7h 2012-04-20 4
  78. 78. Date Histogram Facet Date Hashtag "facets" : { 2012-04-18 1 "perday" : { "date_histogram" : { 2012-04-18 5 "field" : "date", "interval" : "day" }h 2012-04-18 2 } } 2012-04-18 2 "facets" : { 2012-04-18 6 "perday" : { "_type" : "date_histogram",h 2012-04-19 3 "entries": [ { "time": 1334700000000, "count": 5 }, 2012-04-19 3 { "time": 1334786400000, "count": 3 }, { "time": 1334872800000, "count": 1 } 2012-04-19 7 } ] }h 2012-04-20 4
  79. 79. Range FacetHashtag 1 5 2 2 6 3 3 7 4
  80. 80. Range FacetHashtag 1 5 2 Hashtag Count Min Max Moy Total 2 x<3 3 1 2 1.667 5 6 3 <= x < 5 3 3 4 3.333 10 3 x >= 5 3 5 7 6 18 3 7 4
  81. 81. Range FacetHashtag 1 5 2 2 6 3 3 7 4
  82. 82. Range Facet "facets" : { "hashtags" : { "range" : { "field" : "hashtags", "ranges" : [ { "to" : 3 },Hashtag { "from" : 3, "to" : 5 }, { "from" : 5 } ] } } } 1 5 2 2 6 3 3 7 4
  83. 83. Range Facet "facets" : { "hashtags" : { "range" : { "field" : "hashtags", "ranges" : [ { "to" : 3 },Hashtag { "from" : 3, "to" : 5 }, { "from" : 5 } ] } } } 1 "facets" : { 5 "hashtags" : { "_type" : "range", 2 "ranges" : [ { "to": 3, 2 "count": 3, "min": 1, "max": 2, 6 "total": 5, "mean": 1.667 }, { "from":3, "to" : 5, 3 "count": 3, "min": 3, "max": 4, 3 "total": 10, "mean": 3.333 },{ 7 "from":5, "count": 3, 4 "min": 5, "max": 7, "total": 18, "mean": 6 } ] } }
  84. 84. Site marchand
  85. 85. Site marchand
  86. 86. Site marchand
  87. 87. Site marchand
  88. 88. Site marchand Ranges Term Term Ranges
  89. 89. Analyse temps-réel• Faire un matchAll sur lensemble des données• Actualiser toutes les x secondes• Indexer en même temps les nouvelles données Date histogram Term
  90. 90. FacettesCartographiques
  91. 91. Reprenons notre formulaire
  92. 92. Reprenons notre formulaire Recherche Full Text
  93. 93. Reprenons notre formulaire
  94. 94. Reprenons notre formulaire
  95. 95. DémonstrationAvons-nous fait du bruit ?
  96. 96. Architecture
  97. 97. Architecture
  98. 98. Architecture Twitter Streaming API
  99. 99. Architecture Twitter Streaming API
  100. 100. Architecture Twitter Twitter Streaming River API$ curl -XPUT localhost:9200/_river/twitter/_meta -d { "type" : "twitter", "twitter" : { "user" : "twitter_user", "password" : "twitter_password", "filter" : { "tracks" : ["elasticsearch"] } }}
  101. 101. ArchitectureChrome Twitter Twitter Streaming River API $ curl -XPUT localhost:9200/_river/twitter/_meta -d { "type" : "twitter", "twitter" : { "user" : "twitter_user", "password" : "twitter_password", "filter" : { "tracks" : ["elasticsearch"] } } }
  102. 102. ArchitectureUn peu plus de technique : partitions / réplications / scalabilité
  103. 103. Lexique
  104. 104. Lexique• Nœud (node) : Une instance dElasticsearch (~ machine ?)
  105. 105. Lexique• Nœud (node) : Une instance dElasticsearch (~ machine ?)• Cluster : Un ensemble de nœuds
  106. 106. Lexique• Nœud (node) : Une instance dElasticsearch (~ machine ?)• Cluster : Un ensemble de nœuds• Partition (shard) : permet de découper un index en plusieurs parties pour y distribuer les documents
  107. 107. Lexique• Nœud (node) : Une instance dElasticsearch (~ 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 lensemble du cluster
  108. 108. Lexique• Nœud (node) : Une instance dElasticsearch (~ 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 lensemble du cluster• Partition primaire (primary shard) : partition élue "principale" dans lensemble du cluster. Cest là que se fait lindexation par Lucene. Il ny en a quune seule par shard dans lensemble du cluster.
  109. 109. Lexique• Nœud (node) : Une instance dElasticsearch (~ 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 lensemble du cluster• Partition primaire (primary shard) : partition élue "principale" dans lensemble du cluster. Cest là que se fait lindexation par Lucene. Il ny en a quune seule par shard dans lensemble du cluster.• Partition secondaire (secondary shard) : partitions secondaires stockant les replicas des partitions primaires.
  110. 110. Créons un index Cluster Nœud 1 Client CURL
  111. 111. Créons un index$ curl -XPUT localhost:9200/twitter -d { Cluster "index" : { Nœud 1 "number_of_shards" : 2, "number_of_replicas" : 1 Shard 0 } Shard 1} réplication non respectée Client CURL
  112. 112. Créons un index$ curl -XPUT localhost:9200/twitter -d { Cluster "index" : { Nœud 1 Nœud 2 "number_of_shards" : 2, "number_of_replicas" : 1 Shard 0 Shard 0 }} Shard 1 Shard 1 réplication respectée Client CURL
  113. 113. Réallocation dynamique Cluster Nœud 1 Nœud 2 Shard 0 Shard 0 Shard 1 Shard 1
  114. 114. Réallocation dynamique Cluster Nœud 1 Nœud 2 Nœud 3 Shard 0 Shard 0 Shard 1 Shard 1
  115. 115. Réallocation dynamique Cluster Nœud 1 Nœud 2 Nœud 3 Shard 0 Shard 0 Shard 0 Shard 1 Shard 1
  116. 116. Réallocation dynamique Cluster Nœud 1 Nœud 2 Nœud 3 Shard 0 Shard 0 Shard 1 Shard 1
  117. 117. Réallocation dynamique Cluster Nœud 1 Nœud 2 Nœud 3 Shard 0 Shard 0 Shard 1 Shard 1
  118. 118. Réallocation dynamique Cluster Nœud 1 Nœud 2 Nœud 3 Nœud 4 Shard 0 Shard 0 Shard 1 Shard 1
  119. 119. Réallocation dynamique Cluster Nœud 1 Nœud 2 Nœud 3 Nœud 4 Shard 0 Shard 0 Shard 1 Shard 1 Shard 1
  120. 120. Réallocation dynamique Cluster Nœud 1 Nœud 2 Nœud 3 Nœud 4 Shard 0 Shard 0 Shard 1 Shard 1 Le tuning, cest trouver le bon équilibre entre le nombre de nodes, shards et replicas !
  121. 121. Indexons un document Cluster Nœud 1 Nœud 2 Nœud 3 Nœud 4 Shard 0 Shard 0 Shard 1 Shard 1 Doc 1 Client $ curl -XPUT localhost:9200/twitter/tweet/1 -d CURL { "text": "Bienvenue à la conférence #elasticsearch pour #ideobar", "created_at": "2012-04-06T20:45:36.000Z", "source": "Twitter for iPad", ... }
  122. 122. Indexons un document Cluster Nœud 1 Nœud 2 Nœud 3 Nœud 4 Doc Shard 0 1 Shard 0 Shard 1 Shard 1 Client $ curl -XPUT localhost:9200/twitter/tweet/1 -d CURL { "text": "Bienvenue à la conférence #elasticsearch pour #ideobar", "created_at": "2012-04-06T20:45:36.000Z", "source": "Twitter for iPad", ... }
  123. 123. Indexons un document Cluster Nœud 1 Nœud 2 Nœud 3 Nœud 4 Doc Shard 0 1 Shard 0 Shard 1 Shard 1 Client $ curl -XPUT localhost:9200/twitter/tweet/1 -d CURL { "text": "Bienvenue à la conférence #elasticsearch pour #ideobar", "created_at": "2012-04-06T20:45:36.000Z", "source": "Twitter for iPad", ... }
  124. 124. Indexons un document Cluster Nœud 1 Nœud 2 Nœud 3 Nœud 4 Doc Doc Shard 0 1 Shard 0 1 Shard 1 Shard 1 Client $ curl -XPUT localhost:9200/twitter/tweet/1 -d CURL { "text": "Bienvenue à la conférence #elasticsearch pour #ideobar", "created_at": "2012-04-06T20:45:36.000Z", "source": "Twitter for iPad", ... }
  125. 125. Indexons un 2ème document ClusterNœud 1 Nœud 2 Nœud 3 Nœud 4 Doc Doc Shard 0 1 Shard 0 1 Shard 1 Shard 1 Doc 2 Client $ curl -XPUT localhost:9200/twitter/tweet/2 -d CURL { "text": "Je fais du bruit pour #elasticsearch à #ideobar", "created_at": "2012-04-06T21:12:52.000Z", "source": "Twitter for iPad", ... }
  126. 126. Indexons un 2ème document ClusterNœud 1 Nœud 2 Nœud 3 Nœud 4 Doc Doc Shard 0 1 Shard 0 1 Shard 1 Shard 1 Doc 2 Client $ curl -XPUT localhost:9200/twitter/tweet/2 -d CURL { "text": "Je fais du bruit pour #elasticsearch à #ideobar", "created_at": "2012-04-06T21:12:52.000Z", "source": "Twitter for iPad", ... }
  127. 127. Indexons un 2ème document ClusterNœud 1 Nœud 2 Nœud 3 Nœud 4 Doc Doc Shard 0 1 Shard 0 1 Shard 1 Doc Shard 1 2 Client $ curl -XPUT localhost:9200/twitter/tweet/2 -d CURL { "text": "Je fais du bruit pour #elasticsearch à #ideobar", "created_at": "2012-04-06T21:12:52.000Z", "source": "Twitter for iPad", ... }
  128. 128. Indexons un 2ème document ClusterNœud 1 Nœud 2 Nœud 3 Nœud 4 Doc Doc Shard 0 1 Shard 0 1 Shard 1 Doc Shard 1 2 Client $ curl -XPUT localhost:9200/twitter/tweet/2 -d CURL { "text": "Je fais du bruit pour #elasticsearch à #ideobar", "created_at": "2012-04-06T21:12:52.000Z", "source": "Twitter for iPad", ... }
  129. 129. Indexons un 2ème document ClusterNœud 1 Nœud 2 Nœud 3 Nœud 4 Doc Doc Shard 0 1 Shard 0 1 Doc Doc Shard 1 Shard 1 2 2 Client $ curl -XPUT localhost:9200/twitter/tweet/2 -d CURL { "text": "Je fais du bruit pour #elasticsearch à #ideobar", "created_at": "2012-04-06T21:12:52.000Z", "source": "Twitter for iPad", ... }
  130. 130. Cherchons ! ClusterNœud 1 Nœud 2 Nœud 3 Nœud 4 Doc DocShard 0 1 Shard 0 1 Doc Doc Shard 1 Shard 1 2 2 Client $ curl localhost:9200/twitter/_search?q=elasticsearch CURL
  131. 131. Cherchons ! ClusterNœud 1 Nœud 2 Nœud 3 Nœud 4 Doc DocShard 0 1 Shard 0 1 Doc Doc Shard 1 Shard 1 2 2 Client $ curl localhost:9200/twitter/_search?q=elasticsearch CURL
  132. 132. Cherchons ! ClusterNœud 1 Nœud 2 Nœud 3 Nœud 4 Doc Shard 0 Shard 0 1 Doc Shard 1 Shard 1Doc 2 Doc 1 2 Client $ curl localhost:9200/twitter/_search?q=elasticsearch CURL
  133. 133. Cherchons ! ClusterNœud 1 Nœud 2 Nœud 3 Nœud 4 DocShard 0 Shard 0 1 Doc Shard 1 Shard 1 2 Doc Doc 2 1 Client $ curl localhost:9200/twitter/_search?q=elasticsearch CURL
  134. 134. Cherchons ! { Cluster "took" : 24,Nœud 1 "timed_out" : false,Nœud 3 Nœud 2 Nœud 4 "_shards" : { "total" : 5, "successful" : 5, "failed" : 0 }, DocShard 0 "hits" : { Shard 0 1 "total" : 2, "max_score" : 0.227, Doc Shard 1 "hits" : [ { Shard 1 2 "_index" : "twitter", "_type" : "tweet", "_id" : "1", "_score" : 0.227, "_source" : { ... } Doc }, { Doc 2 "_index" : "twitter", 1 Client "_type" : "tweet", $ curl localhost:9200/twitter/_search?q=elasticsearch CURL "_id" : "2", "_score" : 0.152, "_source" : { ... } } ] }
  135. 135. Cherchons encore ! Cluster Nœud 1 Nœud 2 Nœud 3 Nœud 4 Doc Doc Shard 0 1 Shard 0 1 Doc Doc Shard 1 Shard 1 2 2 Client $ curl localhost:9200/twitter/_search?q=elasticsearch CURL
  136. 136. Cherchons encore ! Cluster Nœud 1 Nœud 2 Nœud 3 Nœud 4 Doc Doc Shard 0 1 Shard 0 1 Doc Doc Shard 1 Shard 1 2 2 Client $ curl localhost:9200/twitter/_search?q=elasticsearch CURL
  137. 137. Cherchons encore ! Cluster Nœud 1 Nœud 2 Nœud 3 Nœud 4 Doc Shard 0 1 Shard 0 Doc 1 Shard 1 Doc Doc Shard 1 2 2 Client $ curl localhost:9200/twitter/_search?q=elasticsearch CURL
  138. 138. Cherchons encore ! Cluster Nœud 1 Nœud 2 Nœud 3 Doc Shard 0 1 Shard 0 Doc 1 Shard 1 Doc 2 Client $ curl localhost:9200/twitter/_search?q=elasticsearch CURL
  139. 139. Cherchons encore ! Cluster Nœud 1 Nœud 2 Nœud 3 Doc Shard 0 1 Shard 0 Doc 1 Shard 1 Doc 2 Client $ curl localhost:9200/twitter/_search?q=elasticsearch CURL
  140. 140. Cherchons encore ! Cluster Nœud 1 Nœud 2 Nœud 3 Doc Shard 0 1 Shard 0 Shard 1 Doc Doc 1 2 Client $ curl localhost:9200/twitter/_search?q=elasticsearch CURL
  141. 141. Cherchons encore ! Cluster Nœud 1 Nœud 2 Nœud 3 Doc Shard 0 1 Shard 0 Shard 1 Doc Doc 2 1 Client $ curl localhost:9200/twitter/_search?q=elasticsearch CURL
  142. 142. Cherchons encore ! { Cluster "took" : 24, Nœud 1 "timed_out" : false,Nœud 3 Nœud 2 "_shards" : { "total" : 5, "successful" : 5, "failed" : 0 }, Doc Shard 0 1 "hits" : { Shard 0 "total" : 2, "max_score" : 0.227, Shard 1 "hits" : [ { "_index" : "twitter", "_type" : "tweet", "_id" : "1", "_score" : 0.227, "_source" : { ... } Doc }, { 2 Doc "_index" : "twitter", 1 Client "_type" : "tweet", $ curl localhost:9200/twitter/_search?q=elasticsearch CURL "_id" : "2", "_score" : 0.152, "_source" : { ... } } ] }
  143. 143. La communauté~100 contributeurs directs au projet (+ de 2800 watchers et + de 470 forks)
  144. 144. La communauté~100 contributeurs directs au projet (+ de 2800 watchers et + de 470 forks)
  145. 145. Rejoignez le mouvement ! @ElasticsearchFR www.elasticsearch.fr Questions ? Posez aussi vos questions sur elasticsearch-fr@googlegroups.comSlides sur http://fr.slideshare.net/dadoonet Sources sur https://github.com/dadoonet/talks

×