Elasticsearch : moteur de recherchetaillé pour le cloud              par David Pilato         @dadoonet et @elasticsearchf...
{ “speaker” : “David Pilato” }$ curl http://localhost:9200/devoxx/speaker/dpilato{    "nom" : "David Pilato",    "jobs" : ...
Abstract• Un moteur ? Pourquoi faire ?• Elasticsearch : une solution simple, complète, performante• Et si on indexait Twit...
Un moteur ? Pour quoi faire ?LE BESOIN                                4
Cas décole « SQL old school »          Un document dans une base de données :         • Un attribut date : 19/04/2012     ...
Cas décole « SQL old school »          Un document dans une base de données :                         doc        pays     ...
Cas décole « SQL old school »           • Cherche moi un document de décembre 2011 portant sur la             france et co...
Cas décole « SQL old school »           • Cherche moi un document de décembre 2011 portant sur la             france et co...
Performances du like ‘%’Moteur Elasticsearch Rivers   Facets   Demo   Architecture Communauté                             ...
Performances du like ‘%’                               Voir aussi : http://www.cestpasdur.com/2012/04/01/elasticsearch-vs-...
Cest quoi un moteur ?Moteur Elasticsearch Rivers   Facets   Demo   Architecture Communauté                                ...
Cest quoi un moteur ?         • Un moteur de recherche est composé de :          • un moteur d’indexation de documents    ...
Cest quoi un moteur ?         • Un moteur de recherche est composé de :          • un moteur d’indexation de documents    ...
Cest quoi un moteur ?         • Un moteur de recherche est composé de :          • un moteur d’indexation de documents    ...
ELASTICSEARCH                9
Your Data, your Search !ELASTICSEARCH                           9
ElasticsearchMoteur Elasticsearch Rivers   Facets   Demo   Architecture Communauté                                        ...
Elasticsearch         • Moteur de recherche pour la génération NoSQLMoteur Elasticsearch Rivers   Facets   Demo   Architec...
Elasticsearch         • Moteur de recherche pour la génération NoSQL         • Basé sur le standard Apache LuceneMoteur El...
Elasticsearch         • Moteur de recherche pour la génération NoSQL         • Basé sur le standard Apache Lucene         ...
Elasticsearch         • Moteur de recherche pour la génération NoSQL         • Basé sur le standard Apache Lucene         ...
Elasticsearch         • Moteur de recherche pour la génération NoSQL         • Basé sur le standard Apache Lucene         ...
Elasticsearch         • Moteur de recherche pour la génération NoSQL         • Basé sur le standard Apache Lucene         ...
Points clésMoteur Elasticsearch Rivers   Facets   Demo   Architecture Communauté                                          ...
Points clés         • Simple ! En quelques minutes (Zero Conf), on dispose d’un moteur             complet prêt à recevoir...
Points clés         • Simple ! En quelques minutes (Zero Conf), on dispose d’un moteur           complet prêt à recevoir n...
Points clés         • Simple ! En quelques minutes (Zero Conf), on dispose d’un moteur           complet prêt à recevoir n...
Points clés         • Simple ! En quelques minutes (Zero Conf), on dispose d’un moteur           complet prêt à recevoir n...
Ranger ses donnéesMoteur Elasticsearch Rivers   Facets   Demo   Architecture Communauté                                   ...
Ranger ses données         • Document : Un objet représentant les données (au sens NoSQL).             Penser "recherche",...
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 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 :...
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 :...
Indexons un document         $ curl -XPUT localhost:9200/twitter/tweet/1 -d          {            "text": "Bienvenue à la ...
Indexons un document         $ curl -XPUT localhost:9200/twitter/tweet/1 -d          {            "text": "Bienvenue à la ...
Cherchons un document          $ curl localhost:9200/twitter/tweet/_search?q=elasticsearchMoteur Elasticsearch Rivers   Fa...
Cherchons un document          $ curl localhost:9200/twitter/tweet/_search?q=elasticsearch          {              "took" ...
Cherchons un document          $ curl localhost:9200/twitter/tweet/_search?q=elasticsearch          {              "took" ...
Cherchons un document          $ curl localhost:9200/twitter/tweet/_search?q=elasticsearch          {              "took" ...
Cherchons un document          $ curl localhost:9200/twitter/tweet/_search?q=elasticsearch          {              "took" ...
Cherchons un document          $ curl localhost:9200/twitter/tweet/_search?q=elasticsearch          {              "took" ...
Les résultats de rechercheMoteur Elasticsearch Rivers   Facets   Demo   Architecture Communauté                           ...
Les résultats de recherche         • Elasticsearch ne renvoie que les 10 premiers résultats (même sur           plusieurs ...
Les résultats de recherche         • Elasticsearch ne renvoie que les 10 premiers résultats (même sur           plusieurs ...
Quelques types de recherche       Langage QueryDSL pour les recherches avancées                  Type                     ...
Quelques types de recherche       Langage QueryDSL pour les recherches avancées                     Type                  ...
LA COLLECTE AUTOMATIQUE DE DONNÉES                                     18
Ou "La vie est un long fleuve tranquille !"LA COLLECTE AUTOMATIQUE DE DONNÉES                                             ...
La collecteMoteur Elasticsearch Rivers   Facets   Demo   Architecture Communauté                                          ...
La collecte                                                                        Stockage                               ...
La collecte             Doc                                                                        Stockage               ...
La collecte                                                                         Stockage                              ...
La collecte             Doc                                                                         Stockage              ...
La collecte                                                                         Stockage                              ...
La collecte                                                                         Stockage                              ...
La collecte                                                                         Stockage                              ...
La collecte                                                                        Stockage                               ...
La collecte               Doc                                                                        Stockage             ...
La collecte                                                                        Stockage                               ...
La collecte                                                                        Stockage                               ...
RiversMoteur Elasticsearch Rivers   Facets   Demo   Architecture Communauté                                               ...
Rivers         •   CouchDB RiverMoteur Elasticsearch Rivers   Facets   Demo   Architecture Communauté                     ...
Rivers         • CouchDB River         • MongoDB RiverMoteur Elasticsearch Rivers   Facets   Demo   Architecture Communaut...
Rivers         • CouchDB River         • MongoDB River         • Wikipedia RiverMoteur Elasticsearch Rivers   Facets   Dem...
Rivers         • CouchDB River         • MongoDB River         • Wikipedia River         • Twitter RiverMoteur Elasticsear...
Rivers         •   CouchDB River         •   MongoDB River         •   Wikipedia River         •   Twitter River         •...
Rivers         •   CouchDB River         •   MongoDB River         •   Wikipedia River         •   Twitter River         •...
Rivers         •   CouchDB River         •   MongoDB River         •   Wikipedia River         •   Twitter River         •...
La puissance des facettes ! Faites parler vos données en les regardant sous différentes facettes !ANALYSE DES RÉSULTATS (E...
Les facettes                 ID               Username                                Date       Hashtags                 ...
Facette "Term"              Username                        Date               Hashtags               dadoonet            ...
Facette "Term"              Username                        Date               Hashtags               dadoonet            ...
Facette "Term"                                             "facets" : {                                               "use...
Facette "Term"                                             "facets" : {                                               "use...
Facette "Date Histogram"ame                 Date                  Hashtagsonet            2012-04-18                      ...
Facette "Date Histogram"ame                 Date                  Hashtagsonet            2012-04-18                      ...
Facette "Date Histogram"                                          "facets" : {                                            ...
Facette "Date Histogram"                                          "facets" : {                                            ...
Facette "Ranges"      Hashtags8           18           58           28           28           69           39           39...
Facette "Ranges"      Hashtags8           18           5                                           Ranges        Count    ...
Facette "Ranges"                          "facets" : { "hashtags" : {                            "range" : { "field" : "ha...
Facette "Ranges"                          "facets" : { "hashtags" : {                            "range" : { "field" : "ha...
Usage "site marchand"Moteur Elasticsearch Rivers   Facets   Demo   Architecture Communauté                                ...
Usage "site marchand"Moteur Elasticsearch Rivers   Facets   Demo   Architecture Communauté                                ...
Usage "site marchand"Moteur Elasticsearch Rivers   Facets   Demo   Architecture Communauté                                ...
Usage "site marchand"                                                                        Ranges                       ...
La navigation par facettesMoteur Elasticsearch Rivers   Facets   Demo   Architecture Communauté                           ...
La navigation par facettes        Critère fixeMoteur Elasticsearch Rivers   Facets   Demo   Architecture Communauté       ...
La navigation par facettes        Critère fixe   RésultatsMoteur Elasticsearch Rivers   Facets   Demo   Architecture Commu...
La navigation par facettes        Critère fixe                                                                        Term...
La navigation par facettes        Critère fixe                                                                         Ter...
La navigation par facettes        Critère fixe                                                                         Ter...
La navigation par facettesMoteur Elasticsearch Rivers   Facets   Demo   Architecture Communauté                           ...
La navigation par facettes        CritèresMoteur Elasticsearch Rivers   Facets   Demo   Architecture Communauté           ...
Analyse temps-réel des données         • Faire un matchAll sur lensemble des données         • Actualiser toutes les x sec...
Avons-nous fait du bruit ?DÉMONSTRATION                             38
Démonstration : architectureMoteur Elasticsearch Rivers   Facets   Demo   Architecture Communauté                         ...
Démonstration : architectureMoteur Elasticsearch Rivers   Facets   Demo   Architecture Communauté                         ...
Démonstration : architecture                                                                         Twitter              ...
Démonstration : architecture                                                                         Twitter              ...
Démonstration : architecture                                                                         Twitter              ...
Démonstration : architecture                                                                                          Twit...
Démonstration : architecture          Chrome                                                                              ...
Un peu plus de technique : partitions / réplications / scalabilitéARCHITECTURE                                            ...
LexiqueMoteur Elasticsearch Rivers   Facets   Demo   Architecture Communauté                                              ...
Lexique           • Nœud (node) : Une instance dElasticsearch (~ machine ?)Moteur Elasticsearch Rivers   Facets   Demo   A...
Lexique           • Nœud (node) : Une instance dElasticsearch (~ machine ?)           • Cluster : Un ensemble de nœudsMote...
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    ...
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    ...
Créons un index                                                                                 Cluster                   ...
Créons un index          $ curl -XPUT localhost:9200/twitter -d {                                              Cluster    ...
Créons un index          $ curl -XPUT localhost:9200/twitter -d {                                            Cluster      ...
Réallocation dynamique                                                                      Cluster                       ...
Réallocation dynamique                                                                      Cluster                       ...
Réallocation dynamique                                                                      Cluster                       ...
Réallocation dynamique                                                                      Cluster                       ...
Réallocation dynamique                                                                      Cluster                       ...
Réallocation dynamique                                                                      Cluster                       ...
Réallocation dynamique                                                                      Cluster                       ...
Indexons un document                                                                            Cluster                   ...
Indexons un document                                                                               Cluster                ...
Indexons un document                                                                               Cluster                ...
Indexons un document                                                                               Cluster                ...
Indexons un                              2ème         document                                                            ...
Indexons un                             2ème         document                                       ClusterNœud 1         ...
Indexons un                                 2ème      document                                                            ...
Indexons un                                 2ème      document                                                            ...
Indexons un                                 2ème      document                                                            ...
Elasticsearch - Devoxx France 2012
Elasticsearch - Devoxx France 2012
Elasticsearch - Devoxx France 2012
Elasticsearch - Devoxx France 2012
Elasticsearch - Devoxx France 2012
Elasticsearch - Devoxx France 2012
Elasticsearch - Devoxx France 2012
Elasticsearch - Devoxx France 2012
Elasticsearch - Devoxx France 2012
Elasticsearch - Devoxx France 2012
Elasticsearch - Devoxx France 2012
Elasticsearch - Devoxx France 2012
Elasticsearch - Devoxx France 2012
Elasticsearch - Devoxx France 2012
Elasticsearch - Devoxx France 2012
Elasticsearch - Devoxx France 2012
Elasticsearch - Devoxx France 2012
Elasticsearch - Devoxx France 2012
Prochain SlideShare
Chargement dans…5
×

Elasticsearch - Devoxx France 2012

11 748 vues

Publié le

Présentation d'Elasticsearch lors de Devoxx France 2012
Contenu en français
English translation available here : http://www.slideshare.net/dadoonet/elasticsearch-devoxx-france-2012-english-version

Publié dans : Technologie

Elasticsearch - Devoxx France 2012

  1. 1. Elasticsearch : moteur de recherchetaillé pour le cloud par David Pilato @dadoonet et @elasticsearchfr 1
  2. 2. { “speaker” : “David Pilato” }$ curl http://localhost:9200/devoxx/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" : 7 } ], "passions" : [ "famille", "job", "deejay" ], "blog" : "http://dev.david.pilato.fr/", "twitter" : [ "@dadoonet", "@elasticsearchfr" ], "email" : "david@pilato.fr"} 2
  3. 3. Abstract• Un moteur ? Pourquoi faire ?• Elasticsearch : une solution simple, complète, performante• Et si on indexait Twitter ? Faites du bruit sur @DevoxxFR avec le hashtag #elasticsearch ! 3
  4. 4. Un moteur ? Pour quoi faire ?LE BESOIN 4
  5. 5. Cas décole « SQL old school » Un document dans une base de données : • Un attribut date : 19/04/2012 • Un attribut codifié pays : FR • Correspondant à la table d’association code/libellé • Code : FR • Libellé : France • Un attribut commentaire : "J’observe une erreur de saisie dans la désignation commerciale du produit. Songer à téléphoner à David."Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 5
  6. 6. Cas décole « SQL old school » Un document dans une base de données : doc pays • Un attribut date : 19/04/2012 date code • Un attribut codifié pays : FR pays libelle • Correspondant à la table d’association code/libellé commentaire • Code : FR • Libellé : France • Un attribut commentaire : "J’observe une erreur de saisie dans la désignation commerciale du produit. Songer à téléphoner à David."Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 5
  7. 7. Cas décole « SQL old school » • Cherche moi un document de décembre 2011 portant sur la france et contenant saisie et david • En SQL :Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 6
  8. 8. Cas décole « SQL old school » • Cherche moi un document de décembre 2011 portant sur la france et contenant saisie et david • En SQL : SELECT doc.*, pays.* FROM doc, pays WHERE 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 ‘%saisie% AND lower(doc.commentaire) LIKE ‘%david%;Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 6
  9. 9. Performances du like ‘%’Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 7
  10. 10. Performances du like ‘%’ Voir aussi : http://www.cestpasdur.com/2012/04/01/elasticsearch-vs-mysql-rechercheMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 7
  11. 11. Cest quoi un moteur ?Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 8
  12. 12. Cest quoi un moteur ? • Un moteur de recherche est composé de : • un moteur d’indexation de documents • un moteur de recherche sur les indexMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 8
  13. 13. Cest quoi un moteur ? • 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 :Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 8
  14. 14. Cest quoi un moteur ? • 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 !Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 8
  15. 15. ELASTICSEARCH 9
  16. 16. Your Data, your Search !ELASTICSEARCH 9
  17. 17. ElasticsearchMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 10
  18. 18. Elasticsearch • Moteur de recherche pour la génération NoSQLMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 10
  19. 19. Elasticsearch • Moteur de recherche pour la génération NoSQL • Basé sur le standard Apache LuceneMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 10
  20. 20. 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 / JSONMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 10
  21. 21. 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 technologieMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 10
  22. 22. 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 à LuceneMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 10
  23. 23. 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 !Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 10
  24. 24. Points clésMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 11
  25. 25. 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.Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 11
  26. 26. 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.Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 11
  27. 27. 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)Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 11
  28. 28. 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, …Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 11
  29. 29. Ranger ses donnéesMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 12
  30. 30. Ranger ses données • Document : Un objet représentant les données (au sens NoSQL). Penser "recherche", cest oublier le SGBDR et penser "Documents"Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 12
  31. 31. 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 #devoxxfr", "created_at": "2012-04-06T20:45:36.000Z", "source": "Twitter for iPad", "truncated": false, Un tweet "retweet_count": 0, "hashtag": [ { "text": "elasticsearch", "start": 27, "end": 40 }, { "text": "devoxxfr", "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 !" } }Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 12
  32. 32. 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 #devoxxfr", "created_at": "2012-04-06T20:45:36.000Z", "source": "Twitter for iPad", "truncated": false, Un tweet "retweet_count": 0, "hashtag": [ { "text": "elasticsearch", "start": 27, "end": 40 }, { "text": "devoxxfr", "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 !" } } • Type : Regroupe des documents de même typeMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 12
  33. 33. 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 #devoxxfr", "created_at": "2012-04-06T20:45:36.000Z", "source": "Twitter for iPad", "truncated": false, Un tweet "retweet_count": 0, "hashtag": [ { "text": "elasticsearch", "start": 27, "end": 40 }, { "text": "devoxxfr", "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 !" } } • Type : Regroupe des documents de même type • Index : Espace logique de stockage des documents dont les types sont fonctionnellement communsMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 12
  34. 34. Interagir avec Elasticsearch API REST : http://host:port/[index]/[type]/[_action/id] Méthodes HTTP : GET, POST, PUT, DELETEMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 13
  35. 35. 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/1Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 13
  36. 36. 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/1Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 13
  37. 37. 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/1Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 13
  38. 38. 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 -XGET http://localhost:9200/twitter/tweet/_searchMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 13
  39. 39. 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 -XGET http://localhost:9200/twitter/tweet/_search • curl -XGET http://localhost:9200/twitter/_searchMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 13
  40. 40. 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 -XGET http://localhost:9200/twitter/tweet/_search • curl -XGET http://localhost:9200/twitter/_search • curl -XGET http://localhost:9200/_searchMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 13
  41. 41. 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 -XGET http://localhost:9200/twitter/tweet/_search • curl -XGET http://localhost:9200/twitter/_search • curl -XGET http://localhost:9200/_search Meta données Elasticsearch • curl -XGET http://localhost:9200/twitter/_statusMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 13
  42. 42. Indexons un document $ curl -XPUT localhost:9200/twitter/tweet/1 -d { "text": "Bienvenue à la conférence #elasticsearch pour #devoxxfr", "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": "devoxxfr", "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 !" } }Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 14
  43. 43. Indexons un document $ curl -XPUT localhost:9200/twitter/tweet/1 -d { "text": "Bienvenue à la conférence #elasticsearch pour #devoxxfr", "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": "devoxxfr", "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 !" } } { "ok":true, "_index":"twitter", "_type":"tweet", "_id":"1" }Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 14
  44. 44. Cherchons un document $ curl localhost:9200/twitter/tweet/_search?q=elasticsearchMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 15
  45. 45. Cherchons un document $ 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 #devoxxfr", "created_at": "2012-04-06T20:45:36.000Z", "source": "Twitter for iPad", […] } } ] } }Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 15
  46. 46. Cherchons un document $ curl localhost:9200/twitter/tweet/_search?q=elasticsearch { "took" : 24, "timed_out" : false, Nb de 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 #devoxxfr", "created_at": "2012-04-06T20:45:36.000Z", "source": "Twitter for iPad", […] } } ] } }Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 15
  47. 47. Cherchons un document $ 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 #devoxxfr", "created_at": "2012-04-06T20:45:36.000Z", "source": "Twitter for iPad", […] } } ] } }Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 15
  48. 48. Cherchons un document $ 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 #devoxxfr", "created_at": "2012-04-06T20:45:36.000Z", "source": "Twitter for iPad", […] Pertinence } } ] } }Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 15
  49. 49. Cherchons un document $ curl localhost:9200/twitter/tweet/_search?q=elasticsearch { "took" : 24, "timed_out" : false, Document "_shards" : { "total" : 5, "successful" : 5, "failed" : 0 }, "hits" : { source "total" : 1, "max_score" : 0.227, "hits" : [ { "_index" : "twitter", "_type" : "tweet", "_id" : "1", "_score" : 0.227, "_source" : { "text": "Bienvenue à la conférence #elasticsearch pour #devoxxfr", "created_at": "2012-04-06T20:45:36.000Z", "source": "Twitter for iPad", […] } } ] } }Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 15
  50. 50. Les résultats de rechercheMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 16
  51. 51. Les résultats de recherche • Elasticsearch ne renvoie que les 10 premiers résultats (même sur plusieurs millions) • Elasticsearch permet ensuite de se "balader" dans les résultats $ curl "localhost:9200/twitter/tweet/_search?q=elasticsearch&from=10&size=10"Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 16
  52. 52. Les résultats de recherche • Elasticsearch ne renvoie que les 10 premiers résultats (même sur plusieurs millions) • Elasticsearch permet ensuite de se "balader" dans les résultats $ curl "localhost:9200/twitter/tweet/_search?q=elasticsearch&from=10&size=10" • La pertinence est calculée suivant le nombre doccurrences plus ou moins exactes de chaque terme dans un document $ curl "localhost:9200/twitter/tweet/_search?q=elasticsearch&explain=true"Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 16
  53. 53. Quelques types de recherche Langage QueryDSL pour les recherches avancées Type Description Recherche tout le contenu (pratique avec des filtres) Recherche avec analyse, jokers (syntaxe Lucene possible* +, -, FROM, TO, ^) Recherche dun terme sans analyse préalable Recherche dun texte avec analyse (par défaut OR sur chaque token) Recherche avec joker (*, ?) Recherche multi-critères (MUST, MUST NOT, SHOULD) Recherche intervalle (>, >=, <, <=) Utile pour faire de lautocomplétion Filtrage (couplage de filtres et de queries) Permet des recherches par vraisemblance de termes Permet de trouver des documents avec un minimum de termesMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 17
  54. 54. Quelques types de recherche Langage QueryDSL pour les recherches avancées Type Description Match All Recherche tout le contenu (pratique avec des filtres) QueryString Recherche avec analyse, jokers (syntaxe Lucene possible* +, -, FROM, TO, ^) Term Recherche dun terme sans analyse préalable Text Recherche dun texte avec analyse (par défaut OR sur chaque token) Wildcard Recherche avec joker (*, ?) Bool Recherche multi-critères (MUST, MUST NOT, SHOULD) Range Recherche intervalle (>, >=, <, <=) Prefix Utile pour faire de lautocomplétion Filtered Filtrage (couplage de filtres et de queries) Fuzzy like this Permet des recherches par vraisemblance de termes More like this Permet de trouver des documents avec un minimum de termes * http://lucene.apache.org/core/old_versioned_docs/versions/3_5_0/queryparsersyntax.htmlMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 17
  55. 55. LA COLLECTE AUTOMATIQUE DE DONNÉES 18
  56. 56. Ou "La vie est un long fleuve tranquille !"LA COLLECTE AUTOMATIQUE DE DONNÉES 18
  57. 57. La collecteMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 19
  58. 58. La collecte Stockage DonnéesMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 19
  59. 59. La collecte Doc Stockage DonnéesMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 19
  60. 60. La collecte Stockage Données DocMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 20
  61. 61. La collecte Doc Stockage Données DocMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 20
  62. 62. La collecte Stockage Données Doc DocMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 21
  63. 63. La collecte Stockage Données Doc DocMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 21
  64. 64. La collecte Stockage Données Doc DocMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 21
  65. 65. La collecte Stockage Données Doc DocMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 22
  66. 66. La collecte Doc Stockage Données Doc DocMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 22
  67. 67. La collecte Stockage Données Doc DocMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 23
  68. 68. La collecte Stockage Données DocMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 24
  69. 69. RiversMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 25
  70. 70. Rivers • CouchDB RiverMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 25
  71. 71. Rivers • CouchDB River • MongoDB RiverMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 25
  72. 72. Rivers • CouchDB River • MongoDB River • Wikipedia RiverMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 25
  73. 73. Rivers • CouchDB River • MongoDB River • Wikipedia River • Twitter RiverMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 25
  74. 74. Rivers • CouchDB River • MongoDB River • Wikipedia River • Twitter River • RabbitMQ RiverMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 25
  75. 75. Rivers • CouchDB River • MongoDB River • Wikipedia River • Twitter River • RabbitMQ River • RSS RiverMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 25
  76. 76. Rivers • CouchDB River • MongoDB River • Wikipedia River • Twitter River • RabbitMQ River • RSS River • Dick RiversMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 25
  77. 77. La puissance des facettes ! Faites parler vos données en les regardant sous différentes facettes !ANALYSE DES RÉSULTATS (EN TEMPS QUASI RÉEL) 26
  78. 78. Les facettes ID Username Date Hashtags 1 dadoonet 2012-04-18 1 2 devoxxfr 2012-04-18 5 Des tweets 3 elasticsearchfr 2012-04-18 2 4 dadoonet 2012-04-18 2 5 devoxxfr 2012-04-18 6 6 elasticsearchfr 2012-04-19 3 7 dadoonet 2012-04-19 3 8 devoxxfr 2012-04-19 7 9 elasticsearchfr 2012-04-20 4Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 27
  79. 79. Facette "Term" Username Date Hashtags dadoonet 2012-04-18 1 devoxxfr 2012-04-18 5 elasticsearchfr 2012-04-18 2 dadoonet 2012-04-18 2 devoxxfr 2012-04-18 6 elasticsearchfr 2012-04-19 3 dadoonet 2012-04-19 3 devoxxfr 2012-04-19 7 elasticsearchfr 2012-04-20 4Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 28
  80. 80. Facette "Term" Username Date Hashtags dadoonet 2012-04-18 1 devoxxfr 2012-04-18 5 elasticsearchfr 2012-04-18 Username 2 Count dadoonet 2012-04-18 dadoonet 2 3 devoxxfr 2012-04-18 devoxxfr6 3 elasticsearchfr 2012-04-19 elasticsearchfr 3 3 dadoonet 2012-04-19 3 devoxxfr 2012-04-19 7 elasticsearchfr 2012-04-20 4Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 28
  81. 81. Facette "Term" "facets" : { "users" : { "terms" : {"field" : "username"} } } ID Username Date Hashtags 1 dadoonet 2012-04-18 1 2 devoxxfr 2012-04-18 5 3 elasticsearchfr 2012-04-18 2 4 dadoonet 2012-04-18 2 5 devoxxfr 2012-04-18 6 6 elasticsearchfr 2012-04-19 3 7 dadoonet 2012-04-19 3 8 devoxxfr 2012-04-19 7 9 elasticsearchfr 2012-04-20 4Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 29
  82. 82. Facette "Term" "facets" : { "users" : { "terms" : {"field" : "username"} } } ID Username Date "facets" : { Hashtags 1 dadoonet 2012-04-18 : { "users" 1 2 devoxxfr 2012-04-18 : "terms", "_type" 5 "missing" : 0, 3 elasticsearchfr 2012-04-18 2 "total": 9, 4 dadoonet 2012-04-18 "other": 0, 2 5 devoxxfr 2012-04-18 : [ "terms" 6 6 elasticsearchfr { "term" : "dadoonet", "count" : 3 }, 2012-04-19 3 { "term" : "devoxxfr", "count" : 3 }, 7 dadoonet 2012-04-19 3 { "term" : "elasticsearchfr", "count" : 3 } 8 devoxxfr 2012-04-19 ] 7 9 elasticsearchfr } 2012-04-20 4Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 29
  83. 83. Facette "Date Histogram"ame Date Hashtagsonet 2012-04-18 1xxfr 2012-04-18 5archfr 2012-04-18 2onet 2012-04-18 2xxfr 2012-04-18 6archfr 2012-04-19 3onet 2012-04-19 3xxfr 2012-04-19 7archfr 2012-04-20 4 Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 30
  84. 84. Facette "Date Histogram"ame Date Hashtagsonet 2012-04-18 1 Par mois Date Countxxfr 2012-04-18 5 2012-04 9archfr 2012-04-18 2onet 2012-04-18 2 Par jourxxfr 2012-04-18 6 Date Countarchfr 2012-04-19 3 2012-04-18 5onet 2012-04-19 3 2012-04-19 3xxfr 2012-04-19 7 2012-04-20 1archfr 2012-04-20 4 Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 30
  85. 85. Facette "Date Histogram" "facets" : { "perday" : { "date_histogram" : { "field" : "date",ame Date "interval" : "day" Hashtags }onet 2012-04-18 }1xxfr 2012-04-18 } 5archfr 2012-04-18 2onet 2012-04-18 2xxfr 2012-04-18 6archfr 2012-04-19 3onet 2012-04-19 3xxfr 2012-04-19 7archfr 2012-04-20 4 Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 31
  86. 86. Facette "Date Histogram" "facets" : { "perday" : { "date_histogram" : { "field" : "date",ame Date "interval" : "day" Hashtags }onet 2012-04-18 }1xxfr 2012-04-18 } 5archfr 2012-04-18 2 "facets" : {onet 2012-04-18 2 "perday" : {xxfr 2012-04-18 "_type" : "date_histogram", 6 "entries": [archfr 2012-04-19 3 { "time": 1334700000000, "count": 5 },onet 2012-04-19 3 { "time": 1334786400000, "count": 3 },xxfr 2012-04-19 7 { "time": 1334872800000, "count": 1 } ]archfr 2012-04-20 } 4 } Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 31
  87. 87. Facette "Ranges" Hashtags8 18 58 28 28 69 39 39 70 4 Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 32
  88. 88. Facette "Ranges" Hashtags8 18 5 Ranges Count Min Max Moy Total8 2 x<3 3 1 2 1.667 58 2 3 <= x < 5 3 3 4 3.333 108 6 x >= 5 3 5 7 6 189 39 39 70 4 Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 32
  89. 89. Facette "Ranges" "facets" : { "hashtags" : { "range" : { "field" : "hashtags", "ranges" : [ { "to" : 3 }, { "from" : 3, "to" : 5 }, { "from" : 5 } Hashtags ] } } }8 18 58 28 28 69 39 39 70 4 Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 33
  90. 90. Facette "Ranges" "facets" : { "hashtags" : { "range" : { "field" : "hashtags", "ranges" : [ { "to" : 3 }, { "from" : 3, "to" : 5 }, { "from" : 5 } Hashtags ] } } }8 1 "facets" : {8 5 "hashtags" : { "_type" : "range",8 2 "ranges" : [8 2 { "to": 3,8 6 "count": 3, "min": 1, "max": 2, "total": 5, "mean": 1.667 },9 3 { "from":3, "to" : 5,9 3 "count": 3, "min": 3, "max": 4, "total": 10, "mean": 3.333 },9 7 { "from":5,0 4 "count": 3, "min": 5, "max": 7, "total": 18, "mean": 6 } ] } } Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 33
  91. 91. Usage "site marchand"Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 34
  92. 92. Usage "site marchand"Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 34
  93. 93. Usage "site marchand"Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 34
  94. 94. Usage "site marchand" Ranges Term Term RangesMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 34
  95. 95. La navigation par facettesMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 35
  96. 96. La navigation par facettes Critère fixeMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 35
  97. 97. La navigation par facettes Critère fixe RésultatsMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 35
  98. 98. La navigation par facettes Critère fixe Term RésultatsMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 35
  99. 99. La navigation par facettes Critère fixe Term Date histogram RésultatsMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 35
  100. 100. La navigation par facettes Critère fixe Term Ranges Date histogram RésultatsMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 35
  101. 101. La navigation par facettesMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 36
  102. 102. La navigation par facettes CritèresMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 36
  103. 103. Analyse temps-réel des données • Faire un matchAll sur lensemble des données • Actualiser toutes les x secondes • Indexer en même temps les nouvelles données Date histogram TermMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 37
  104. 104. Avons-nous fait du bruit ?DÉMONSTRATION 38
  105. 105. Démonstration : architectureMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 39
  106. 106. Démonstration : architectureMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 39
  107. 107. Démonstration : architecture Twitter Streaming APIMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 39
  108. 108. Démonstration : architecture Twitter Streaming APIMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 39
  109. 109. Démonstration : architecture Twitter Streaming APIMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 39
  110. 110. Démonstration : architecture Twitter Twitter Streaming River API $ curl -XPUT localhost:9200/_river/twitter/_meta -d { "type" : "twitter", "twitter" : { "user" : "twitter_user", "password" : "twitter_passowrd", "filter" : { "tracks" : ["devoxxfr"] } } }Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 39
  111. 111. Démonstration : architecture Chrome Twitter Twitter Streaming River API $ curl -XPUT localhost:9200/_river/twitter/_meta -d { "type" : "twitter", "twitter" : { "user" : "twitter_user", "password" : "twitter_passowrd", "filter" : { "tracks" : ["devoxxfr"] } } }Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 39
  112. 112. Un peu plus de technique : partitions / réplications / scalabilitéARCHITECTURE 40
  113. 113. LexiqueMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 41
  114. 114. Lexique • Nœud (node) : Une instance dElasticsearch (~ machine ?)Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 41
  115. 115. Lexique • Nœud (node) : Une instance dElasticsearch (~ machine ?) • Cluster : Un ensemble de nœudsMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 41
  116. 116. 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 documentsMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 41
  117. 117. 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 clusterMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 41
  118. 118. 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.Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 41
  119. 119. 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.Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 41
  120. 120. Créons un index Cluster Nœud 1 Client CURLMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 42
  121. 121. Créons un index $ curl -XPUT localhost:9200/twitter -d { Cluster "index" : { "number_of_shards" : 2, Nœud 1 "number_of_replicas" : 1 Shard 0 } } Shard 1 réplication non respectée Client CURLMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 42
  122. 122. Créons un index $ curl -XPUT localhost:9200/twitter -d { Cluster "index" : { "number_of_shards" : 2, Nœud 1 Nœud 2 "number_of_replicas" : 1 Shard 0 Shard 0 } } Shard 1 Shard 1 réplication respectée Client CURLMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 42
  123. 123. Réallocation dynamique Cluster Nœud 1 Nœud 2 Shard 0 Shard 0 Shard 1 Shard 1Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 43
  124. 124. Réallocation dynamique Cluster Nœud 1 Nœud 2 Nœud 3 Shard 0 Shard 0 Shard 1 Shard 1Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 43
  125. 125. Réallocation dynamique Cluster Nœud 1 Nœud 2 Nœud 3 Shard 0 Shard 0 Shard 0 Shard 1 Shard 1Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 44
  126. 126. Réallocation dynamique Cluster Nœud 1 Nœud 2 Nœud 3 Shard 0 Shard 0 Shard 1 Shard 1Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 44
  127. 127. Réallocation dynamique Cluster Nœud 1 Nœud 2 Nœud 3 Nœud 4 Shard 0 Shard 0 Shard 1 Shard 1Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 44
  128. 128. 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 1Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 45
  129. 129. 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 !Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 45
  130. 130. 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 #devoxxfr", "created_at": "2012-04-06T20:45:36.000Z", "source": "Twitter for iPad", ... }Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 46
  131. 131. 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 #devoxxfr", "created_at": "2012-04-06T20:45:36.000Z", "source": "Twitter for iPad", ... }Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 47
  132. 132. 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 #devoxxfr", "created_at": "2012-04-06T20:45:36.000Z", "source": "Twitter for iPad", ... }Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 47
  133. 133. 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 #devoxxfr", "created_at": "2012-04-06T20:45:36.000Z", "source": "Twitter for iPad", ... }Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 48
  134. 134. Indexons un 2ème 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 Doc 2 Client $ curl -XPUT localhost:9200/twitter/tweet/2 -d CURL { "text": "Je fais du bruit pour #elasticsearch à #devoxxfr", "created_at": "2012-04-06T21:12:52.000Z", "source": "Twitter for iPad", ... }Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 49
  135. 135. Indexons un 2ème document ClusterNœud 1 Nœud 2 Nœud 3 Nœud 4 Doc DocShard 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 à #devoxxfr", "created_at": "2012-04-06T21:12:52.000Z", "source": "Twitter for iPad", ... } 50
  136. 136. Indexons un 2ème document Cluster Nœ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 à #devoxxfr", "created_at": "2012-04-06T21:12:52.000Z", "source": "Twitter for iPad", ... }Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 51
  137. 137. Indexons un 2ème document Cluster Nœ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 à #devoxxfr", "created_at": "2012-04-06T21:12:52.000Z", "source": "Twitter for iPad", ... }Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 51
  138. 138. Indexons un 2ème document 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 -XPUT localhost:9200/twitter/tweet/2 -d CURL { "text": "Je fais du bruit pour #elasticsearch à #devoxxfr", "created_at": "2012-04-06T21:12:52.000Z", "source": "Twitter for iPad", ... }Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 52

×