A presentation at Devoxx France 2012 in April 2012 in Paris, France by David Pilato
Elasticsearch : moteur de recherche taillé pour le cloud par David Pilato @dadoonet et @elasticsearchfr 1
{ “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
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
Un moteur ? Pour quoi faire ? LE BESOIN 4
Cas d’école « SQL old school » Un document dans une base de données : doc • Un attribut date : 19/04/2012 date • Un attribut codifié pays : FR pays commentaire • 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é pays code libelle 5
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
Performances du like ‘%’ Voir aussi : http://www.cestpasdur.com/2012/04/01/elasticsearch-vs-mysql-recherche Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 7
C’est 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
Your Data, your Search ! ELASTICSEARCH 9
Elasticsearch • Moteur de recherche pour la génération NoSQL • Basé sur le standard Apache Lucene • Masque la complexité Java/Lucene à l’aide de services standards HTTP / RESTful / JSON • Utilisable à partir de n’importe quelle technologie • Ajoute la couche cloud manquante à Lucene • C’est un moteur, pas une interface graphique ! Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 10
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
Ranger ses données • Document : Un objet représentant les données (au sens NoSQL). Penser “recherche”, c’est oublier le SGBDR et penser “Documents” Un tweet { “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.\r\nAt this time, enjoying NoSQL world : CouchDB, ElasticSearch.\r\nDeeJay 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 Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 12
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/_status Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 13
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.\r\nAt this time, enjoying NoSQL world : CouchDB, ElasticSearch.\r\nDeeJay 4 times a year, just for fun !” } }’ { } “ok”:true, “_index”:”twitter”, “_type”:”tweet”, “_id”:”1” Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 14
Cherchons un document $ curl localhost:9200/twitter/tweet/_search?q=elasticsearch { Nb de documents Document Coordonné source es “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
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 d’occurrences 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
Quelques types de recherche Langage QueryDSL pour les recherches avancées Type Match All QueryString Description Recherche tout le contenu (pratique avec des filtres) Recherche avec analyse, jokers (syntaxe Lucene possible* +, -, FROM, TO, ^) Term Recherche d’un terme sans analyse préalable Text Recherche d’un texte avec analyse (par défaut OR sur chaque token) Wildcard Bool Recherche avec joker (*, ?) Recherche multi-critères (MUST, MUST NOT, SHOULD) Range Recherche intervalle (>, >=, <, <=) Prefix Utile pour faire de l’autocomplé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
Ou “La vie est un long fleuve tranquille !” LA COLLECTE AUTOMATIQUE DE DONNÉES 18
La collecte Doc Moteur Elasticsearch Rivers Stockage Données Facets Demo Architecture Communauté 19
La collecte Doc Stockage Données Doc Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 20
La collecte Stockage Données Doc Moteur Elasticsearch Rivers Facets Demo Architecture Communauté Doc 21
La collecte Doc Stockage Données Doc Doc Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 22
La collecte Stockage Données Doc Doc Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 23
La collecte Stockage Données Doc Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 24
Rivers • CouchDB River MongoDB River Wikipedia River Twitter River RabbitMQ River • RSS River • Dick Rivers • • • • Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 25
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
Des tweets Les facettes 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 4 Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 27
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 dadoonet2 3 devoxxfr 2012-04-18 devoxxfr6 3 elasticsearchfr 2012-04-19 elasticsearchfr 3 dadoonet 2012-04-19 3 devoxxfr 2012-04-19 7 elasticsearchfr 2012-04-20 4 Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 3 28
Facette “Term” } ID 1 2 3 4 5 6 7 8 9 “facets” : { “users” : { “terms” : {“field” : “username”} } Username Date : { Hashtags “facets” “users” : { dadoonet 2012-04-18 1 “_type” : “terms”, devoxxfr 2012-04-18 5 “missing” : 0, elasticsearchfr 2012-04-18 2 “total”: 9, dadoonet 2012-04-18 2 “other”: 0, “terms” : [ devoxxfr 2012-04-18 6 { “term” : “dadoonet”, “count” : 3 }, elasticsearchfr 2012-04-19 3 { “term” : “devoxxfr”, “count” : 3 }, dadoonet 2012-04-19 3 { “term” : “elasticsearchfr”, “count” : 3 } devoxxfr 2012-04-19 ] 7 } elasticsearchfr 2012-04-20 4 Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 29
Facette “Date Histogram” ame Date Hashtags onet 2012-04-18 1 xxfr 2012-04-18 5 2012-04-18 2 onet 2012-04-18 2 xxfr 2012-04-18 6 2012-04-19 3 onet 2012-04-19 3 xxfr 2012-04-19 7 2012-04-20 4 archfr archfr archfr Moteur Elasticsearch Rivers Facets Demo Par mois Date 2012-04 Count 9 Par jour Date 2012-04-18 2012-04-19 2012-04-20 Architecture Communauté Count 5 3 1 30
Facette “Date Histogram” ame Date onet 2012-04-18 xxfr 2012-04-18 archfr 2012-04-18 onet 2012-04-18 xxfr 2012-04-18 archfr 2012-04-19 onet 2012-04-19 xxfr 2012-04-19 archfr “facets” : { “perday” : { “date_histogram” : { “field” : “date”, “interval” : “day” Hashtags } }1 } 5 2012-04-20 Moteur Elasticsearch Rivers Facets 2 “facets” : { 2 “perday” : { “_type” : “date_histogram”, 6 “entries”: [ 3 { “time”: 1334700000000, “count”: 5 }, 3 { “time”: 1334786400000, “count”: 3 }, 7 { “time”: 1334872800000, “count”: 1 } ] } 4 } Demo Architecture Communauté 31
Facette “Ranges” Hashtags 8 1 8 5 8 2 8 2 8 6 9 3 9 3 9 7 0 4 Moteur Elasticsearch Rivers Ranges Count Min Max Moy Total x<3 3 1 2 1.667 5 3 <= x < 5 3 3 4 3.333 10 x >= 5 3 5 7 6 18 Facets Demo Architecture Communauté 32
Facette “Ranges” Hashtags 8 1 8 5 8 2 8 2 8 6 9 3 9 3 9 7 0 4 “facets” : { “hashtags” : { “range” : { “field” : “hashtags”, “ranges” : [ { “to” : 3 }, { “from” : 3, “to” : 5 }, { “from” : 5 } ] } } } “facets” : { “hashtags” : { “_type” : “range”, “ranges” : [ { “to”: 3, “count”: 3, “min”: 1, “max”: 2, “total”: 5, “mean”: 1.667 }, { “from”:3, “to” : 5, “count”: 3, “min”: 3, “max”: 4, “total”: 10, “mean”: 3.333 }, { “from”:5, “count”: 3, “min”: 5, “max”: 7, “total”: 18, “mean”: 6 } ] } } Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 33
Usage “site marchand” Ranges Term Term Ranges Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 34
La navigation par facettes Critère fixe Term Ranges Date histogram Résultats Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 35
La navigation par facettes Critères Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 36
Analyse temps-réel des données • Faire un matchAll sur l’ensemble des données • Actualiser toutes les x secondes • Indexer en même temps les nouvelles données Date histogram Term Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 37
Avons-nous fait du bruit ? DÉMONSTRATION 38
Démonstration : architecture Chrome Twitter River Twitter Streaming 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
Un peu plus de technique : partitions / réplications / scalabilité ARCHITECTURE 40
Lexique • Nœud (node) : Une instance d’Elasticsearch (~ machine ?) • Cluster : Un ensemble de nœuds • Partition (shard) : permet de découper un index en plusieurs parties pour y distribuer les documents • Réplication (replica) : recopie d’une partition en une ou plusieurs copies dans l’ensemble du cluster • Partition primaire (primary shard) : partition élue “principale” dans l’ensemble du cluster. C’est là que se fait l’indexation par Lucene. Il n’y en a qu’une seule par shard dans l’ensemble du cluster. • Partition secondaire (secondary shard) : partitions secondaires stockant les replicas des partitions primaires. Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 41
Créons un index $ curl -XPUT localhost:9200/twitter -d ‘{ “index” : { “number_of_shards” : 2, “number_of_replicas” : 1 } }’ Cluster Nœud Nœud11 Nœud 2 Shard Shard00 (primary) (primary) Shard 0 (replica) Shard Shard11 (primary) (replica) Shard 1 (primary) réplication réplication non respectée respectée Client CURL Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 42
Réallocation dynamique Cluster Moteur Elasticsearch Rivers Nœud 1 Nœud 2 Shard 0 (primary) Shard 0 (replica) Shard 1 (replica) Shard 1 (primary) Facets Demo Architecture Communauté Nœud 3 43
Réallocation dynamique Cluster Moteur Elasticsearch Rivers Nœud 1 Nœud 2 Nœud 3 Shard 0 (primary) Shard 0 (replica) Shard 0 (replica) Shard 1 (replica) Shard 1 (primary) Facets Demo Architecture Communauté Nœud 4 44
Réallocation dynamique Cluster Nœud 1 Nœud 2 Shard 0 (primary) Shard 1 (replica) Nœud 3 Nœud 4 Shard 0 (replica) Shard 1 (primary) Shard 1 (replica) Le tuning, c’est trouver le bon équilibre entre le nombre de nodes, shards et replicas ! Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 45
Indexons un document Cluster Nœud 1 Nœud 2 Shard 0 (primary) Nœud 3 Nœud 4 Shard 0 (replica) Shard 1 (primary) Doc 1 Client CURL Shard 1 (replica) $ 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”, … }’ Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 46
Indexons un document Cluster Nœud 1 Nœud 2 Shard 0 Doc (primary) 1 Nœud 3 Nœud 4 Shard 0 (replica) Shard 1 (primary) Client CURL Shard 1 (replica) $ 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”, … }’ Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 47
Indexons un document Cluster Nœud 1 Nœud 2 Shard 0 Doc (primary) 1 Nœud 3 Nœud 4 Shard 0 Doc (replica) 1 Shard 1 (primary) Client CURL Shard 1 (replica) $ 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”, … }’ Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 48
Indexons un 2ème document Cluster Nœud 1 Nœud 2 Shard 0 Doc (primary) 1 Nœud 4 Shard 0 Doc (replica) 1 Shard 1 (primary) Doc 2 Nœud 3 Client CURL Shard 1 (replica) $ curl -XPUT localhost:9200/twitter/tweet/2 -d ’ { “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
Indexons un 2ème document Cluster Nœud 1 Nœud 2 Shard 0 Doc (primary) 1 Nœud 3 Nœud 4 Shard 0 Doc (replica) 1 Shard 1 (primary) Doc 2 Client CURL Shard 1 (replica) $ curl -XPUT localhost:9200/twitter/tweet/2 -d ’ { “text”: “Je fais du bruit pour #elasticsearch à #devoxxfr”, “created_at”: “2012-04-06T21:12:52.000Z”, “source”: “Twitter for iPad”, … }’ 50
Indexons un 2ème document Cluster Nœud 1 Nœud 3 Nœud 2 Shard 0 Doc (primary) 1 Nœud 4 Shard 0 Doc (replica) 1 Shard 1 (primary) Client CURL Doc 2 Shard 1 (replica) $ curl -XPUT localhost:9200/twitter/tweet/2 -d ’ { “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
Indexons un 2ème document Cluster Nœud 1 Nœud 3 Nœud 2 Shard 0 Doc (primary) 1 Nœud 4 Shard 0 Doc (replica) 1 Shard 1 (primary) Client CURL Doc 2 Shard 1 (replica) Doc 2 $ curl -XPUT localhost:9200/twitter/tweet/2 -d ’ { “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
Cherchons Cluster Nœud 1 Nœud 3 Nœud 2 Shard 0 Doc (primary) 1 Shard 0 Doc (replica) 1 Shard 1 (primary) Client CURL Moteur Elasticsearch Rivers Facets Demo Nœud 4 Doc 2 Shard 1 (replica) Doc 2 $ curl localhost:9200/twitter/_search?q=elasticsearch Architecture Communauté 53
Cherchons Cluster Nœud 1 Nœud 2 Shard 0 (primary) Doc 1 Facets Demo Nœud 4 Shard 0 Doc (replica) 1 Shard 1 (primary) Doc 2 Client CURL Moteur Elasticsearch Rivers Nœud 3 Shard 1 (replica) Doc 2 $ curl localhost:9200/twitter/_search?q=elasticsearch Architecture Communauté 54
Cherchons { Nœud 1 Shard 0 (primary) Doc 1 Moteur Elasticsearch Rivers Facets Demo Doc 2 Client CURL Cluster “took” : 24, “timed_out” : false, Nœud 3 Nœud 2 Nœud 4 “_shards” : { “total” : 5, “successful” : 5, “failed” : 0 }, “hits” : { Shard 0 Doc “total” : 2, (replica) 1 “max_score” : 0.227, Shard 1 Shard 1 Doc “hits” : [ { 2 (primary) (replica) “_index” : “twitter”, “_type” : “tweet”, “_id” : “1”, “_score” : 0.227, “_source” : { … } }, { “_index” : “twitter”, “_type” : “tweet”, $ curl “_id” localhost:9200/twitter/_search?q=elasticsearch : “2”, “_score” : 0.152, “_source” : { … } } ] } } Architecture Communauté 55
Cherchons encore Cluster Nœud 1 Nœud 3 Nœud 2 Shard 0 Doc (primary) 1 Shard 0 Doc (replica) 1 Shard 1 (primary) Client CURL Moteur Elasticsearch Rivers Facets Demo Nœud 4 Doc 2 Shard 1 (replica) Doc 2 $ curl localhost:9200/twitter/_search?q=elasticsearch Architecture Communauté 56
Cherchons encore Cluster Nœud 1 Shard 0 Doc (primary) 1 Client CURL Facets Demo Nœud 4 Shard 0 (replica) Doc 1 Shard 1 (primary) Moteur Elasticsearch Rivers Nœud 3 Nœud 2 Doc 2 Doc 2 Shard 1 (replica) $ curl localhost:9200/twitter/_search?q=elasticsearch Architecture Communauté 57
Cherchons encore Cluster Nœud 1 Nœud 2 Shard 0 Doc (primary) 1 Doc 1 Shard 0 (replica) Shard 1 (primary) (replica) Doc 2 Client CURL Moteur Elasticsearch Rivers Facets Demo Nœud 3 $ curl localhost:9200/twitter/_search?q=elasticsearch Architecture Communauté 58
Cherchons encore { Nœud 1 Shard 0 Doc (primary) 1 Doc 2 Doc 1 Client CURL Moteur Elasticsearch Rivers Facets Demo Cluster “took” : 24, “timed_out” : false, Nœud 3 Nœud 2 “_shards” : { “total” : 5, “successful” : 5, “failed” : 0 }, “hits” : { Shard 0 “total” : 2, (replica) “max_score” : 0.227, Shard 1 Shard 1 “hits” : [ { (replica) (primary) “_index” : “twitter”, “_type” : “tweet”, “_id” : “1”, “_score” : 0.227, “_source” : { … } }, { “_index” : “twitter”, “_type” : “tweet”, $ curl “_id” localhost:9200/twitter/_search?q=elasticsearch : “2”, “_score” : 0.152, “_source” : { … } } ] } } Architecture Communauté 59
Elasticsearch : la communauté ~50 contributeurs directs au projet (+ de 2000 watchers et + de 280 forks) Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 60
Rejoignez le mouvement ! @ElasticsearchFR Posez aussi vos questions sur elasticsearch-fr@googlegroups.com QUESTIONS ? Sources du talk sur : https://github.com/dadoonet/talks 61
View Elasticsearch - Devoxx France 2012.
Dismiss
Présentation d’Elasticsearch lors de Devoxx France 2012
Here’s what was said about this presentation on social media.
mon top 3 des prez #DevoxxFr : #elasticsearch par @dadoonet - #android graphisme et perf par @romainguy et sizeOf en Java par @alexsnaps !— Agnès Crepet (@agnes_crepet) April 20, 2012
mon top 3 des prez #DevoxxFr : #elasticsearch par @dadoonet - #android graphisme et perf par @romainguy et sizeOf en Java par @alexsnaps !
La présentation Elasticsearch pour #devoxxfr est disponible sur slideshare http://t.co/pk464YnT— David Pilato🇪🇺🇫🇷 (@dadoonet) April 20, 2012
La présentation Elasticsearch pour #devoxxfr est disponible sur slideshare http://t.co/pk464YnT
Thanks for your tweets at #devoxxfr ! #elasticsearch is in the TOP5 ;-) pic.twitter.com/Md2QOfP5— David Pilato🇪🇺🇫🇷 (@dadoonet) April 20, 2012
Thanks for your tweets at #devoxxfr ! #elasticsearch is in the TOP5 ;-) pic.twitter.com/Md2QOfP5
@dadoonet Encore un grand merci pour votre prestation de ce matin, d'une très grande qualité. Et merci également à votre femme ;-)— Antoine Rey (@rey_antoine) April 19, 2012
@dadoonet Encore un grand merci pour votre prestation de ce matin, d'une très grande qualité. Et merci également à votre femme ;-)
Sympa la petite discussion en fin de conférence #elastisearch #devoxxfr ;-) happy to meet you all ! pic.twitter.com/s1FxW3MO— David Pilato🇪🇺🇫🇷 (@dadoonet) April 19, 2012
Sympa la petite discussion en fin de conférence #elastisearch #devoxxfr ;-) happy to meet you all ! pic.twitter.com/s1FxW3MO
Looks like #elasticsearch #devoxxfr conference started at 11:30 ;-) full demo is http://t.co/GD0JHZ72 pic.twitter.com/izu7dFtt— David Pilato🇪🇺🇫🇷 (@dadoonet) April 19, 2012
Looks like #elasticsearch #devoxxfr conference started at 11:30 ;-) full demo is http://t.co/GD0JHZ72 pic.twitter.com/izu7dFtt
Thank you audience for the noise with #elasticsearch at #devoxxfr. You were the champions ! pic.twitter.com/O6BTv5ml— David Pilato🇪🇺🇫🇷 (@dadoonet) April 19, 2012
Thank you audience for the noise with #elasticsearch at #devoxxfr. You were the champions ! pic.twitter.com/O6BTv5ml
@dadoonet thanks!, looks like the session was a success :)— Shay Banon (@kimchy) April 19, 2012
@dadoonet thanks!, looks like the session was a success :)
@dadoonet congrats, your talk really looks like a success. you deserve it. #elasticsearch #devoxxfr— louis gueye (@lgueye) April 19, 2012
@dadoonet congrats, your talk really looks like a success. you deserve it. #elasticsearch #devoxxfr
Excellente présentation de #elasticsearch par @dadoonet à @DevoxxFR ! Ça donne envie de jouer avec :-)— Audrey Neveu (@Audrey_Neveu) April 19, 2012
Excellente présentation de #elasticsearch par @dadoonet à @DevoxxFR ! Ça donne envie de jouer avec :-)
#devoxxfr #elasticsearch Bravo a @dadoonet pour sa préz très agréable et très pertinente— nicogiard (@nicogiard) April 19, 2012
#devoxxfr #elasticsearch Bravo a @dadoonet pour sa préz très agréable et très pertinente
Trop bien ta conférence @dadoonet / @ElasticsearchFR at #DevoxxFR!— Descamps François (@descampsf) April 19, 2012
Trop bien ta conférence @dadoonet / @ElasticsearchFR at #DevoxxFR!