Paris Data Geek                                                         Fév 2013                      Elasticsearch.      ...
Qui ?    $ curl http://localhost:9200/talk/speaker/dpilato    {     "nom" : "David Pilato",     "jobs" : [      { "boite" ...
Qui ?    $ curl http://localhost:9200/talk/speaker/dpilato    {     "nom" : "David Pilato",     "jobs" : [      { "boite" ...
ScrutMyDocs.orglundi 11 février 13
SQL Classique                             Cherche moi un document                      de décembre 2011 portant sur la fra...
SQL Classique                             Cherche moi un document                      de décembre 2011 portant sur la fra...
Au final, on obtientlundi 11 février 13
Un moteur de recherche               • Un moteur de recherche est composé de :                       • un moteur d’indexat...
L’indexation, c’est quoi                             en fait ?lundi 11 février 13
Elasticsearchlundi 11 février 13
Elasticsearch                         Your Data, your Search !lundi 11 février 13
Elasticsearch                      • Moteur de recherche pour la génération NoSQL                      • Basé sur le stand...
Indexer           $ curl -XPUT localhost:9200/twitter/tweet/1 -d            {              "text": "Bienvenue à la confére...
Indexer           $ curl -XPUT localhost:9200/twitter/tweet/1 -d            {              "text": "Bienvenue à la confére...
Chercher                $ curl localhost:9200/twitter/tweet/_search?q=elasticsearchlundi 11 février 13
Chercher                 $ curl localhost:9200/twitter/tweet/_search?q=elasticsearch             {                  "took"...
Chercher                 $ curl localhost:9200/twitter/tweet/_search?q=elasticsearch             {                  "took"...
Chercher                 $ curl localhost:9200/twitter/tweet/_search?q=elasticsearch             {                  "took"...
Chercher                 $ curl localhost:9200/twitter/tweet/_search?q=elasticsearch             {                  "took"...
Chercher                 $ curl localhost:9200/twitter/tweet/_search?q=elasticsearch             {                  "took"...
Query DSL                      • Requêtes précises : plutôt que de                        chercher « à la google », on peu...
Query DSL                      • Requêtes précises : plutôt que de                        chercher « à la google », on peu...
Analyser                                    La puissance des facettes !                      Faites parler vos données en ...
Des tweets                      ID    Username          Date      Hashtag                      1     dadoonet       2012-0...
Term FacetD                 Username          Date      Hashtag1                  dadoonet      2012-04-18     12         ...
Term FacetD                 Username          Date             Hashtag1                  dadoonet      2012-04-18         ...
Term FacetD                 Username          Date      Hashtag1                  dadoonet      2012-04-18     12         ...
Term FacetD                 Username          Date            Hashtag1                  dadoonet      2012-04-18          ...
Term FacetD                 Username          Date             Hashtag1                  dadoonet      2012-04-18         ...
Date Histogram Facet                      Date   Hashtag            2012-04-18         1            2012-04-18         5h ...
Date Histogram Facet                      Date   Hashtag            2012-04-18         1                 Par mois         ...
Date Histogram Facet                      Date   Hashtag            2012-04-18         1                  Par mois        ...
Date Histogram Facet                      Date   Hashtag            2012-04-18         1            2012-04-18         5h ...
Date Histogram Facet                      Date   Hashtag                                   "facets" : {            2012-04...
Date Histogram Facet                      Date   Hashtag                                   "facets" : {            2012-04...
Range Facet                 Hashtag                      1                      5                      2                  ...
Range Facet                 Hashtag                      1                      5                      2     Hashtag      ...
Range Facet                 Hashtag                      1                      5                      2                  ...
Range Facet                             "facets" : { "hashtags" : {                               "range" : { "field" : "h...
Range Facet                              "facets" : { "hashtags" : {                                "range" : { "field" : ...
Site marchandlundi 11 février 13
Site marchandlundi 11 février 13
Site marchandlundi 11 février 13
Site marchandlundi 11 février 13
Site marchand                            Ranges                            Term                            Term           ...
Analyse temps-réel                      • Faire un matchAll sur lensemble des données                      • Actualiser to...
Facettes                      Cartographiqueslundi 11 février 13
Reprenons notre                        formulairelundi 11 février 13
Reprenons notre                        formulaire                                 Recherche Full Textlundi 11 février 13
Reprenons notre                        formulairelundi 11 février 13
Reprenons notre                        formulairelundi 11 février 13
Démonstration                        http://onemilliontweetmap.com/                      http://www.francetvinfo.fr/en-dir...
Architecture                      Un peu plus de technique : partitions / réplications / scalabilitélundi 11 février 13
Lexiquelundi 11 février 13
Lexique                      • Nœud (node) : Une instance dElasticsearch                        (~ machine ?)lundi 11 févr...
Lexique                      • Nœud (node) : Une instance dElasticsearch                        (~ machine ?)             ...
Lexique                      • Nœud (node) : Une instance dElasticsearch                        (~ machine ?)             ...
Lexique                      • Nœud (node) : Une instance dElasticsearch                        (~ machine ?)             ...
Créons un index                                          Cluster                                 Nœud 1                   ...
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                         Nœud 1    Nœud 2       ...
Réallocation dynamique                                             Cluster                         Nœud 1    Nœud 2       ...
Réallocation dynamique                                             Cluster                         Nœud 1    Nœud 2       ...
Réallocation dynamique                                             Cluster                         Nœud 1    Nœud 2       ...
Réallocation dynamique                                             Cluster                         Nœud 1    Nœud 2       ...
Réallocation dynamique                                             Cluster                         Nœud 1    Nœud 2       ...
Réallocation dynamique                                             Cluster                         Nœud 1    Nœud 2       ...
Réallocation dynamique                                                 Cluster                             Nœud 1    Nœud ...
Indexons un document                                                             Cluster                         Nœud 1   ...
Indexons un document                                                                Cluster                         Nœud 1...
Indexons un document                                                                Cluster                         Nœud 1...
Indexons un document                                                                Cluster                         Nœud 1...
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 !                                                           Cluster                      Nœud 1                 ...
Cherchons !                                                           Cluster                      Nœud 1                 ...
Cherchons !                                                     Cluster                      Nœud 1               Nœud 2  ...
Cherchons !                                                         Cluster                      Nœud 1                   ...
Cherchons !                                               {                                                           Clus...
Cherchons encore !                                                             Cluster                        Nœud 1      ...
Cherchons encore !                                                             Cluster                        Nœud 1      ...
Cherchons encore !                                                             Cluster                        Nœud 1      ...
Cherchons encore !                                                             Cluster                        Nœud 1      ...
Cherchons encore !                                                             Cluster                        Nœud 1      ...
Cherchons encore !                                                           Cluster                        Nœud 1        ...
Cherchons encore !                                                         Cluster                        Nœud 1          ...
Cherchons encore !                                               {                                                        ...
La communauté                      ~100 contributeurs directs au projet (+ de 3200 watchers et + de 620 forks)lundi 11 fév...
La communauté                      ~100 contributeurs directs au projet (+ de 3200 watchers et + de 620 forks)lundi 11 fév...
La communauté                      ~170 inscrits sur la mailing list, 70 messages / mois, ~270 followerslundi 11 février 13
lundi 11 février 13
Rejoignez le mouvement !                        @ElasticsearchFR                                                          ...
Prochain SlideShare
Chargement dans... 5
×

Paris data geek - Elasticsearch

1,044

Published on

30 mn talk for Paris Data Geek le 08/02/2013

Published in: Technologies
0 commentaires
2 mentions J'aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Total des vues
1,044
Sur Slideshare
0
À partir des ajouts
0
Nombre d'ajouts
2
Actions
Partages
0
Téléchargements
0
Commentaires
0
J'aime
2
Ajouts 0
No embeds

No notes for slide

Paris data geek - Elasticsearch

  1. 1. Paris Data Geek Fév 2013 Elasticsearch. Le moteur de recherche élastique pour tous David Pilato, Elasticsearch.com, Parislundi 11 février 13
  2. 2. Qui ? $ curl http://localhost:9200/talk/speaker/dpilato { "nom" : "David Pilato", "jobs" : [ { "boite" : "SRA Europe (SSII)", "mission" : "bon à tout faire", "date" : "1995" }, { "boite" : "SFR", "mission" : "touche à tout", "date" : "1997" }, { "boite" : "e-Brands / Vivendi", "mission" : "chef de projets", "date": "2000" }, { "boite" : "DGDDI (douane)", "mission" : "mouton à 5 pattes", "date" : "2005" }, { "boite" : "IDEO Technologies", "mission" : "directeur technique", "date" : "2012" }, { "boite" : "Elasticsearch.com", "mission" : "technical advocate", "date" : "2013" } ], "passions" : [ "famille", "job", "deejay" ], "blog" : "http://dev.david.pilato.fr/", "twitter" : [ "@dadoonet", "@elasticsearchfr", "@scrutmydocs" ], "email" : "david@pilato.fr" }lundi 11 février 13
  3. 3. Qui ? $ curl http://localhost:9200/talk/speaker/dpilato { "nom" : "David Pilato", "jobs" : [ { "boite" : "SRA Europe (SSII)", "mission" : "bon à tout faire", "date" : "1995" }, { "boite" : "SFR", "mission" : "touche à tout", "date" : "1997" }, { "boite" : "e-Brands / Vivendi", "mission" : "chef de projets", "date": "2000" }, { "boite" : "DGDDI (douane)", "mission" : "mouton à 5 pattes", "date" : "2005" }, { "boite" : "IDEO Technologies", "mission" : "directeur technique", "date" : "2012" }, { "boite" : "Elasticsearch.com", "mission" : "technical advocate", "date" : "2013" } ], "passions" : [ "famille", "job", "deejay" ], "blog" : "http://dev.david.pilato.fr/", "twitter" : [ "@dadoonet", "@elasticsearchfr", "@scrutmydocs" ], "email" : "david@pilato.fr" }lundi 11 février 13
  4. 4. ScrutMyDocs.orglundi 11 février 13
  5. 5. SQL Classique Cherche moi un document de décembre 2011 portant sur la france et contenant produit et david En SQL :lundi 11 février 13
  6. 6. SQL Classique Cherche moi un document de décembre 2011 portant sur la france et contenant produit 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 ‘%produit% AND lower(doc.commentaire) LIKE ‘%david%;lundi 11 février 13
  7. 7. Au final, on obtientlundi 11 février 13
  8. 8. 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 !lundi 11 février 13
  9. 9. L’indexation, c’est quoi en fait ?lundi 11 février 13
  10. 10. Elasticsearchlundi 11 février 13
  11. 11. Elasticsearch Your Data, your Search !lundi 11 février 13
  12. 12. 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 !lundi 11 février 13
  13. 13. Indexer $ curl -XPUT localhost:9200/twitter/tweet/1 -d { "text": "Bienvenue à la conférence #elasticsearch pour #JUG", "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": "JUG", "start": 47, "end": 55 } ], "user": { "id": 51172224, "name": "David Pilato", "screen_name": "dadoonet", "location": "France", "description": "Soft Architect, Project Manager, Senior Developper.r nAt this time, enjoying NoSQL world : CouchDB, ElasticSearch.rnDeeJay 4 times a year, just for fun !" } }lundi 11 février 13
  14. 14. Indexer $ curl -XPUT localhost:9200/twitter/tweet/1 -d { "text": "Bienvenue à la conférence #elasticsearch pour #JUG", "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": "JUG", "start": 47, "end": 55 } ], "user": { "id": 51172224, "name": "David Pilato", "screen_name": "dadoonet", "location": "France", "description": "Soft Architect, Project Manager, Senior Developper.r nAt this time, enjoying NoSQL world : CouchDB, ElasticSearch.rnDeeJay 4 times a year, just for fun !" } } { "ok":true, "_index":"twitter", "_type":"tweet", "_id":"1" }lundi 11 février 13
  15. 15. Chercher $ curl localhost:9200/twitter/tweet/_search?q=elasticsearchlundi 11 février 13
  16. 16. 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 #JUG", "created_at": "2012-04-06T20:45:36.000Z", "source": "Twitter for iPad", […] } } ] } }lundi 11 février 13
  17. 17. 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 #JUG", "created_at": "2012-04-06T20:45:36.000Z", "source": "Twitter for iPad", […] } } ] } }lundi 11 février 13
  18. 18. 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 #JUG", "created_at": "2012-04-06T20:45:36.000Z", "source": "Twitter for iPad", […] } } ] } }lundi 11 février 13
  19. 19. 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 #JUG", "created_at": "2012-04-06T20:45:36.000Z", "source": "Twitter for iPad", […] } Pertinence } ] } }lundi 11 février 13
  20. 20. 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 #JUG", "created_at": "2012-04-06T20:45:36.000Z", "source": "Twitter for iPad", […] } } ] } }lundi 11 février 13
  21. 21. Query DSL • Requêtes précises : plutôt que de chercher « à la google », on peut utiliser des critères précis :lundi 11 février 13
  22. 22. 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" } } ] } }’lundi 11 février 13
  23. 23. 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 !)lundi 11 février 13
  24. 24. Des tweets ID Username Date Hashtag 1 dadoonet 2012-04-18 1 2 talk 2012-04-18 5 3 elasticsearch 2012-04-18 2 4 dadoonet 2012-04-18 2 5 talk 2012-04-18 6 6 elasticsearch 2012-04-19 3 7 dadoonet 2012-04-19 3 8 talk 2012-04-19 7 9 elasticsearch 2012-04-20 4lundi 11 février 13
  25. 25. Term FacetD Username Date Hashtag1 dadoonet 2012-04-18 12 talktalk 2012-04-18 53 elasticsearch 2012-04-18 24 dadoonet 2012-04-18 25 talk 2012-04-18 66 elasticsearch 2012-04-19 37 dadoonet 2012-04-19 38 talk 2012-04-19 79 elasticsearch 2012-04-20 4 lundi 11 février 13
  26. 26. Term FacetD Username Date Hashtag1 dadoonet 2012-04-18 12 talktalk 2012-04-18 53 elasticsearch 2012-04-18Username 2 Count4 dadoonet 2012-04-18dadoonet 2 35 talk 2012-04-18 talk 6 36 elasticsearch 2012-04-19 elasticsearch 3 37 dadoonet 2012-04-19 38 talk 2012-04-19 79 elasticsearch 2012-04-20 4 lundi 11 février 13
  27. 27. Term FacetD Username Date Hashtag1 dadoonet 2012-04-18 12 talk 2012-04-18 53 elasticsearch 2012-04-18 24 dadoonet 2012-04-18 25 talk 2012-04-18 66 elasticsearch 2012-04-19 37 dadoonet 2012-04-19 38 talk 2012-04-19 79 elasticsearch 2012-04-20 4 lundi 11 février 13
  28. 28. Term FacetD Username Date Hashtag1 dadoonet 2012-04-18 "facets" : { 1 "users" : { "terms" : {"field" : "username"} } }2 talk 2012-04-18 53 elasticsearch 2012-04-18 24 dadoonet 2012-04-18 25 talk 2012-04-18 66 elasticsearch 2012-04-19 37 dadoonet 2012-04-19 38 talk 2012-04-19 79 elasticsearch 2012-04-20 4 lundi 11 février 13
  29. 29. Term FacetD Username Date Hashtag1 dadoonet 2012-04-18 "facets" : { 1 "users" : { "terms" : {"field" : "username"} } }2 talk 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 talk 2012-04-18"other": 0, 6 "terms" : [6 elasticsearch 2012-04-19 { "term" : "dadoonet", "count" },3 }, 3 { "term" : "talk", "count" : 3 : { "term" : "elasticsearch", "count" : 3 }7 dadoonet 2012-04-19] 3 }8 talk 2012-04-19 } 79 elasticsearch 2012-04-20 4 lundi 11 février 13
  30. 30. 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 4lundi 11 février 13
  31. 31. 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 4lundi 11 février 13
  32. 32. 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 1lundi 11 février 13
  33. 33. 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 4lundi 11 février 13
  34. 34. 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 4lundi 11 février 13
  35. 35. 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 4lundi 11 février 13
  36. 36. Range Facet Hashtag 1 5 2 2 6 3 3 7 4lundi 11 février 13
  37. 37. Range Facet Hashtag 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 4lundi 11 février 13
  38. 38. Range Facet Hashtag 1 5 2 2 6 3 3 7 4lundi 11 février 13
  39. 39. Range Facet "facets" : { "hashtags" : { "range" : { "field" : "hashtag", "ranges" : [ { "to" : 3 }, Hashtag { "from" : 3, "to" : 5 }, { "from" : 5 } ] } } } 1 5 2 2 6 3 3 7 4lundi 11 février 13
  40. 40. Range Facet "facets" : { "hashtags" : { "range" : { "field" : "hashtag", "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 } ] } }lundi 11 février 13
  41. 41. Site marchandlundi 11 février 13
  42. 42. Site marchandlundi 11 février 13
  43. 43. Site marchandlundi 11 février 13
  44. 44. Site marchandlundi 11 février 13
  45. 45. Site marchand Ranges Term Term Rangeslundi 11 février 13
  46. 46. 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 Termlundi 11 février 13
  47. 47. Facettes Cartographiqueslundi 11 février 13
  48. 48. Reprenons notre formulairelundi 11 février 13
  49. 49. Reprenons notre formulaire Recherche Full Textlundi 11 février 13
  50. 50. Reprenons notre formulairelundi 11 février 13
  51. 51. Reprenons notre formulairelundi 11 février 13
  52. 52. Démonstration http://onemilliontweetmap.com/ http://www.francetvinfo.fr/en-direct/ http://localhost:9200/_plugin/demo/lundi 11 février 13
  53. 53. Architecture Un peu plus de technique : partitions / réplications / scalabilitélundi 11 février 13
  54. 54. Lexiquelundi 11 février 13
  55. 55. Lexique • Nœud (node) : Une instance dElasticsearch (~ machine ?)lundi 11 février 13
  56. 56. Lexique • Nœud (node) : Une instance dElasticsearch (~ machine ?) • Cluster : Un ensemble de nœudslundi 11 février 13
  57. 57. 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 documentslundi 11 février 13
  58. 58. 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 clusterlundi 11 février 13
  59. 59. Créons un index Cluster Nœud 1 Client CURLlundi 11 février 13
  60. 60. 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 CURLlundi 11 février 13
  61. 61. 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 CURLlundi 11 février 13
  62. 62. Réallocation dynamique Cluster Nœud 1 Nœud 2 Shard 0 Shard 0 Shard 1 Shard 1lundi 11 février 13
  63. 63. Réallocation dynamique Cluster Nœud 1 Nœud 2 Nœud 3 Shard 0 Shard 0 Shard 1 Shard 1lundi 11 février 13
  64. 64. Réallocation dynamique Cluster Nœud 1 Nœud 2 Nœud 3 Shard 0 Shard 0 Shard 0 Shard 1 Shard 1lundi 11 février 13
  65. 65. Réallocation dynamique Cluster Nœud 1 Nœud 2 Nœud 3 Shard 0 Shard 0 Shard 1 Shard 1lundi 11 février 13
  66. 66. Réallocation dynamique Cluster Nœud 1 Nœud 2 Nœud 3 Shard 0 Shard 0 Shard 1 Shard 1lundi 11 février 13
  67. 67. Réallocation dynamique Cluster Nœud 1 Nœud 2 Nœud 3 Nœud 4 Shard 0 Shard 0 Shard 1 Shard 1lundi 11 février 13
  68. 68. 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 1lundi 11 février 13
  69. 69. 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 !lundi 11 février 13
  70. 70. 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 #JUG", "created_at": "2012-04-06T20:45:36.000Z", "source": "Twitter for iPad", ... }lundi 11 février 13
  71. 71. 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 #JUG", "created_at": "2012-04-06T20:45:36.000Z", "source": "Twitter for iPad", ... }lundi 11 février 13
  72. 72. 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 #JUG", "created_at": "2012-04-06T20:45:36.000Z", "source": "Twitter for iPad", ... }lundi 11 février 13
  73. 73. 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 #JUG", "created_at": "2012-04-06T20:45:36.000Z", "source": "Twitter for iPad", ... }lundi 11 février 13
  74. 74. 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 à #JUG", "created_at": "2012-04-06T21:12:52.000Z", "source": "Twitter for iPad", ... }lundi 11 février 13
  75. 75. 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 à #JUG", "created_at": "2012-04-06T21:12:52.000Z", "source": "Twitter for iPad", ... }lundi 11 février 13
  76. 76. 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 à #JUG", "created_at": "2012-04-06T21:12:52.000Z", "source": "Twitter for iPad", ... }lundi 11 février 13
  77. 77. 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 à #JUG", "created_at": "2012-04-06T21:12:52.000Z", "source": "Twitter for iPad", ... }lundi 11 février 13
  78. 78. 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 à #JUG", "created_at": "2012-04-06T21:12:52.000Z", "source": "Twitter for iPad", ... }lundi 11 février 13
  79. 79. Cherchons ! 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 CURLlundi 11 février 13
  80. 80. Cherchons ! 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 CURLlundi 11 février 13
  81. 81. Cherchons ! Cluster Nœud 1 Nœud 2 Nœud 3 Nœud 4 Doc Shard 0 Shard 0 1 Doc Shard 1 Shard 1 Doc 2 Doc 1 2 Client $ curl localhost:9200/twitter/_search?q=elasticsearch CURLlundi 11 février 13
  82. 82. Cherchons ! Cluster Nœud 1 Nœud 2 Nœud 3 Nœud 4 Doc Shard 0 Shard 0 1 Doc Shard 1 Shard 1 2 Doc Doc 2 1 Client $ curl localhost:9200/twitter/_search?q=elasticsearch CURLlundi 11 février 13
  83. 83. 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 }, Doc Shard 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" : { ... } } ] }lundi 11 février 13
  84. 84. 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 CURLlundi 11 février 13
  85. 85. 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 CURLlundi 11 février 13
  86. 86. 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 CURLlundi 11 février 13
  87. 87. 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 CURLlundi 11 février 13
  88. 88. 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 CURLlundi 11 février 13
  89. 89. 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 CURLlundi 11 février 13
  90. 90. 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 CURLlundi 11 février 13
  91. 91. 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" : { ... } } ] }lundi 11 février 13
  92. 92. La communauté ~100 contributeurs directs au projet (+ de 3200 watchers et + de 620 forks)lundi 11 février 13
  93. 93. La communauté ~100 contributeurs directs au projet (+ de 3200 watchers et + de 620 forks)lundi 11 février 13
  94. 94. La communauté ~170 inscrits sur la mailing list, 70 messages / mois, ~270 followerslundi 11 février 13
  95. 95. lundi 11 février 13
  96. 96. Rejoignez le mouvement ! @ElasticsearchFR www.elasticsearch.fr ss re og pr in Questions ? Posez aussi vos questions sur elasticsearch-fr@googlegroups.com Prochaines rencontres sur http://www.meetup.com/elasticsearchfr/ Slides sur http://fr.slideshare.net/dadoonet Sources sur https://github.com/elasticsearchfr/talkslundi 11 février 13

×