Slide 1

Slide 1 text

Elasticsearch. Le moteur de recherche élastique pour tous David Pilato, Elasticsearch.com, Paris lundi 23 septembre 13

Slide 2

Slide 2 text

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" : "[email protected]" } lundi 23 septembre 13

Slide 3

Slide 3 text

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" : "[email protected]" } lundi 23 septembre 13

Slide 4

Slide 4 text

ScrutMyDocs.org lundi 23 septembre 13

Slide 5

Slide 5 text

Elasticsearch.com • Créée en 2012 par ses auteurs • Formation (publique et intra) • Support de développement • Support de production (3 niveaux de SLA) lundi 23 septembre 13

Slide 6

Slide 6 text

Pour la démo Faites du bruit sur Twitter avec le hashtag #elasticsearch lundi 23 septembre 13

Slide 7

Slide 7 text

SQL Classique Cherche moi un document de décembre 2011 portant sur la france et contenant produit et david En SQL : lundi 23 septembre 13

Slide 8

Slide 8 text

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 23 septembre 13

Slide 9

Slide 9 text

Au final, on obtient lundi 23 septembre 13

Slide 10

Slide 10 text

Moteur de recherche ? • un moteur d’indexation de documents lundi 23 septembre 13

Slide 11

Slide 11 text

Moteur de recherche ? • un moteur d’indexation de documents lundi 23 septembre 13

Slide 12

Slide 12 text

Moteur de recherche ? • un moteur d’indexation de documents • un moteur de recherche dans les index lundi 23 septembre 13

Slide 13

Slide 13 text

Elasticsearch lundi 23 septembre 13

Slide 14

Slide 14 text

Elasticsearch Your Data, your Search ! lundi 23 septembre 13

Slide 15

Slide 15 text

Elasticsearch • C’est un moteur ! • NoSQL orienté document • Apache Lucene • HTTP / REST / JSON • Distribué, Scalable, Cloud ready • Apache2 License lundi 23 septembre 13

Slide 16

Slide 16 text

Points clés lundi 23 septembre 13

Slide 17

Slide 17 text

Points clés • Simple: start in 5 minutes 30 seconds lundi 23 septembre 13

Slide 18

Slide 18 text

Points clés • Simple: start in 5 minutes 30 seconds • Efficace: just start new nodes! lundi 23 septembre 13

Slide 19

Slide 19 text

Points clés • Simple: start in 5 minutes 30 seconds • Efficace: just start new nodes! • Puissant: 20-300ms! lundi 23 septembre 13

Slide 20

Slide 20 text

Points clés • Simple: start in 5 minutes 30 seconds • Efficace: just start new nodes! • Puissant: 20-300ms! • Complet: built-in + plugins lundi 23 septembre 13

Slide 21

Slide 21 text

Penser « document » ! • Document : Un objet représentant les données (au sens NoSQL). Penser "recherche", c'est oublier le SGBDR et penser "Documents" • Type : Regroupe des documents de même type • Index : Espace logique de stockage des documents dont les types sont fonctionnellement communs lundi 23 septembre 13

Slide 22

Slide 22 text

Penser « document » ! • Document : Un objet représentant les données (au sens NoSQL). Penser "recherche", c'est oublier le SGBDR et penser "Documents" • Type : Regroupe des documents de même type • Index : Espace logique de stockage des documents dont les types sont fonctionnellement communs { "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.\r\nDeeJay 4 times a year, just for fun !" } } lundi 23 septembre 13

Slide 23

Slide 23 text

Penser « document » ! • Document : Un objet représentant les données (au sens NoSQL). Penser "recherche", c'est oublier le SGBDR et penser "Documents" • Type : Regroupe des documents de même type { "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.\r\nDeeJay 4 times a year, just for fun !" } } lundi 23 septembre 13

Slide 24

Slide 24 text

Penser « document » ! • Document : Un objet représentant les données (au sens NoSQL). Penser "recherche", c'est oublier le SGBDR et penser "Documents" • Type : Regroupe des documents de même type • Index : Espace logique de stockage des documents dont les types sont fonctionnellement communs { "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.\r\nDeeJay 4 times a year, just for fun !" } } lundi 23 septembre 13

Slide 25

Slide 25 text

Interagir avec Elasticsearch lundi 23 septembre 13

Slide 26

Slide 26 text

Interagir avec Elasticsearch • API REST : http://host:port/[index]/[type]/[_action/id] Méthodes HTTP : GET, POST, PUT, DELETE, HEAD lundi 23 septembre 13

Slide 27

Slide 27 text

Interagir avec Elasticsearch • API REST : http://host:port/[index]/[type]/[_action/id] Méthodes HTTP : GET, POST, PUT, DELETE, HEAD • Documents • curl -XPUT http://localhost:9200/twitter/tweet/1 lundi 23 septembre 13

Slide 28

Slide 28 text

Interagir avec Elasticsearch • API REST : http://host:port/[index]/[type]/[_action/id] Méthodes HTTP : GET, POST, PUT, DELETE, HEAD • Documents • curl -XPUT http://localhost:9200/twitter/tweet/1 • curl -XGET http://localhost:9200/twitter/tweet/1 lundi 23 septembre 13

Slide 29

Slide 29 text

Interagir avec Elasticsearch • API REST : http://host:port/[index]/[type]/[_action/id] Méthodes HTTP : GET, POST, PUT, DELETE, HEAD • 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 lundi 23 septembre 13

Slide 30

Slide 30 text

Interagir avec Elasticsearch • API REST : http://host:port/[index]/[type]/[_action/id] Méthodes HTTP : GET, POST, PUT, DELETE, HEAD • Documents • curl -XPUT http://localhost:9200/twitter/tweet/1 • curl -XGET http://localhost:9200/twitter/tweet/1 • curl -XDELETE http://localhost:9200/twitter/tweet/1 • Recherche • curl -XPOST http://localhost:9200/twitter/tweet/_search lundi 23 septembre 13

Slide 31

Slide 31 text

Interagir avec Elasticsearch • API REST : http://host:port/[index]/[type]/[_action/id] Méthodes HTTP : GET, POST, PUT, DELETE, HEAD • Documents • curl -XPUT http://localhost:9200/twitter/tweet/1 • curl -XGET http://localhost:9200/twitter/tweet/1 • curl -XDELETE http://localhost:9200/twitter/tweet/1 • Recherche • curl -XPOST http://localhost:9200/twitter/tweet/_search • curl -XPOST http://localhost:9200/twitter/_search lundi 23 septembre 13

Slide 32

Slide 32 text

Interagir avec Elasticsearch • API REST : http://host:port/[index]/[type]/[_action/id] Méthodes HTTP : GET, POST, PUT, DELETE, HEAD • Documents • curl -XPUT http://localhost:9200/twitter/tweet/1 • curl -XGET http://localhost:9200/twitter/tweet/1 • curl -XDELETE http://localhost:9200/twitter/tweet/1 • Recherche • curl -XPOST http://localhost:9200/twitter/tweet/_search • curl -XPOST http://localhost:9200/twitter/_search • curl -XPOST http://localhost:9200/_search lundi 23 septembre 13

Slide 33

Slide 33 text

Interagir avec Elasticsearch • API REST : http://host:port/[index]/[type]/[_action/id] Méthodes HTTP : GET, POST, PUT, DELETE, HEAD • Documents • curl -XPUT http://localhost:9200/twitter/tweet/1 • curl -XGET http://localhost:9200/twitter/tweet/1 • curl -XDELETE http://localhost:9200/twitter/tweet/1 • Recherche • curl -XPOST http://localhost:9200/twitter/tweet/_search • curl -XPOST http://localhost:9200/twitter/_search • curl -XPOST http://localhost:9200/_search • Meta-données • curl -XGET http://localhost:9200/twitter/_status lundi 23 septembre 13

Slide 34

Slide 34 text

Interagir avec Elasticsearch • API REST : http://host:port/[index]/[type]/[_action/id] Méthodes HTTP : GET, POST, PUT, DELETE, HEAD • Documents • curl -XPUT http://localhost:9200/twitter/tweet/1 • curl -XGET http://localhost:9200/twitter/tweet/1 • curl -XDELETE http://localhost:9200/twitter/tweet/1 • Recherche • curl -XPOST http://localhost:9200/twitter/tweet/_search • curl -XPOST http://localhost:9200/twitter/_search • curl -XPOST http://localhost:9200/_search • Meta-données • curl -XGET http://localhost:9200/twitter/_status • curl -XPOST http://localhost:9200/_shutdown lundi 23 septembre 13

Slide 35

Slide 35 text

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.\r\nDeeJay 4 times a year, just for fun !" } }' lundi 23 septembre 13

Slide 36

Slide 36 text

Indexer { "ok":true, "_index":"twitter", "_type":"tweet", "_id":"1" } $ 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.\r\nDeeJay 4 times a year, just for fun !" } }' lundi 23 septembre 13

Slide 37

Slide 37 text

Chercher $ curl localhost:9200/twitter/tweet/_search?q=elasticsearch lundi 23 septembre 13

Slide 38

Slide 38 text

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 23 septembre 13

Slide 39

Slide 39 text

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", […] } } ] } } Nb de documents lundi 23 septembre 13

Slide 40

Slide 40 text

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", […] } } ] } } Coordonnées lundi 23 septembre 13

Slide 41

Slide 41 text

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 23 septembre 13

Slide 42

Slide 42 text

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", […] } } ] } } Document source lundi 23 septembre 13

Slide 43

Slide 43 text

Query DSL • Requêtes précises : plutôt que de chercher « à la google », on peut utiliser des critères précis : lundi 23 septembre 13

Slide 44

Slide 44 text

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 23 septembre 13

Slide 45

Slide 45 text

Injecter les données Et au milieu coule une rivière lundi 23 septembre 13

Slide 46

Slide 46 text

La collecte lundi 23 septembre 13

Slide 47

Slide 47 text

La collecte Stockage Données lundi 23 septembre 13

Slide 48

Slide 48 text

La collecte Stockage Données Doc lundi 23 septembre 13

Slide 49

Slide 49 text

La collecte Stockage Données Doc lundi 23 septembre 13

Slide 50

Slide 50 text

La collecte Stockage Données Doc Doc lundi 23 septembre 13

Slide 51

Slide 51 text

La collecte Stockage Données Doc Doc lundi 23 septembre 13

Slide 52

Slide 52 text

La collecte Stockage Données Doc Doc lundi 23 septembre 13

Slide 53

Slide 53 text

La collecte Stockage Données Doc Doc lundi 23 septembre 13

Slide 54

Slide 54 text

La collecte Stockage Données Doc Doc lundi 23 septembre 13

Slide 55

Slide 55 text

La collecte Stockage Données Doc Doc Doc lundi 23 septembre 13

Slide 56

Slide 56 text

La collecte Stockage Données Doc Doc Doc lundi 23 septembre 13

Slide 57

Slide 57 text

La collecte Stockage Données Doc Doc Doc lundi 23 septembre 13

Slide 58

Slide 58 text

Quelques Rivers... lundi 23 septembre 13

Slide 59

Slide 59 text

Quelques Rivers... • CouchDB River lundi 23 septembre 13

Slide 60

Slide 60 text

Quelques Rivers... • CouchDB River • CouchBase River lundi 23 septembre 13

Slide 61

Slide 61 text

Quelques Rivers... • CouchDB River • CouchBase River • MongoDB River lundi 23 septembre 13

Slide 62

Slide 62 text

Quelques Rivers... • CouchDB River • CouchBase River • MongoDB River • JDBC River lundi 23 septembre 13

Slide 63

Slide 63 text

Quelques Rivers... • CouchDB River • CouchBase River • MongoDB River • JDBC River • Wikipedia River lundi 23 septembre 13

Slide 64

Slide 64 text

Quelques Rivers... • CouchDB River • CouchBase River • MongoDB River • JDBC River • Wikipedia River • Twitter River lundi 23 septembre 13

Slide 65

Slide 65 text

Quelques Rivers... • CouchDB River • CouchBase River • MongoDB River • JDBC River • Wikipedia River • Twitter River • RabbitMQ River lundi 23 septembre 13

Slide 66

Slide 66 text

Quelques Rivers... • CouchDB River • CouchBase River • MongoDB River • JDBC River • Wikipedia River • Twitter River • RabbitMQ River • ActiveMQ River lundi 23 septembre 13

Slide 67

Slide 67 text

Quelques Rivers... • CouchDB River • CouchBase River • MongoDB River • JDBC River • Wikipedia River • Twitter River • RabbitMQ River • ActiveMQ River • RSS River lundi 23 septembre 13

Slide 68

Slide 68 text

Quelques Rivers... • CouchDB River • CouchBase River • MongoDB River • JDBC River • Wikipedia River • Twitter River • RabbitMQ River • ActiveMQ River • RSS River • LDAP River lundi 23 septembre 13

Slide 69

Slide 69 text

Quelques Rivers... • CouchDB River • CouchBase River • MongoDB River • JDBC River • Wikipedia River • Twitter River • RabbitMQ River • ActiveMQ River • RSS River • LDAP River • FS River lundi 23 septembre 13

Slide 70

Slide 70 text

Quelques Rivers... • CouchDB River • CouchBase River • MongoDB River • JDBC River • Wikipedia River • Twitter River • RabbitMQ River • ActiveMQ River • RSS River • LDAP River • FS River • Dropbox River lundi 23 septembre 13

Slide 71

Slide 71 text

Quelques Rivers... • CouchDB River • CouchBase River • MongoDB River • JDBC River • Wikipedia River • Twitter River • RabbitMQ River • ActiveMQ River • RSS River • LDAP River • FS River • Dropbox River • Dick Rivers lundi 23 septembre 13

Slide 72

Slide 72 text

Quelques Rivers... • CouchDB River • CouchBase River • MongoDB River • JDBC River • Wikipedia River • Twitter River • RabbitMQ River • ActiveMQ River • RSS River • LDAP River • FS River • Dropbox River • Dick Rivers lundi 23 septembre 13

Slide 73

Slide 73 text

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 23 septembre 13

Slide 74

Slide 74 text

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 4 lundi 23 septembre 13

Slide 75

Slide 75 text

Term Facet D 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 4 lundi 23 septembre 13

Slide 76

Slide 76 text

Term Facet D 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 4 Username Count dadoonet 3 talk 3 elasticsearch 3 lundi 23 septembre 13

Slide 77

Slide 77 text

Term Facet D 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 4 lundi 23 septembre 13

Slide 78

Slide 78 text

Term Facet D 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 4 "facets" : { "users" : { "terms" : {"field" : "username"} } } lundi 23 septembre 13

Slide 79

Slide 79 text

Term Facet D 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 4 "facets" : { "users" : { "terms" : {"field" : "username"} } } "facets" : { "users" : { "_type" : "terms", "missing" : 0, "total": 9, "other": 0, "terms" : [ { "term" : "dadoonet", "count" : 3 }, { "term" : "talk", "count" : 3 }, { "term" : "elasticsearch", "count" : 3 } ] } } lundi 23 septembre 13

Slide 80

Slide 80 text

Date Histogram Facet Date Hashtag 2012-04-18 1 2012-04-18 5 h 2012-04-18 2 2012-04-18 2 2012-04-18 6 h 2012-04-19 3 2012-04-19 3 2012-04-19 7 h 2012-04-20 4 lundi 23 septembre 13

Slide 81

Slide 81 text

Date Histogram Facet Date Hashtag 2012-04-18 1 2012-04-18 5 h 2012-04-18 2 2012-04-18 2 2012-04-18 6 h 2012-04-19 3 2012-04-19 3 2012-04-19 7 h 2012-04-20 4 Par mois Par mois Date Count 2012-04 9 lundi 23 septembre 13

Slide 82

Slide 82 text

Date Histogram Facet Date Hashtag 2012-04-18 1 2012-04-18 5 h 2012-04-18 2 2012-04-18 2 2012-04-18 6 h 2012-04-19 3 2012-04-19 3 2012-04-19 7 h 2012-04-20 4 Par mois Par mois Date Count 2012-04 9 Par jour Par jour Date Count 2012-04-18 5 2012-04-19 3 2012-04-20 1 lundi 23 septembre 13

Slide 83

Slide 83 text

Date Histogram Facet Date Hashtag 2012-04-18 1 2012-04-18 5 h 2012-04-18 2 2012-04-18 2 2012-04-18 6 h 2012-04-19 3 2012-04-19 3 2012-04-19 7 h 2012-04-20 4 lundi 23 septembre 13

Slide 84

Slide 84 text

Date Histogram Facet Date Hashtag 2012-04-18 1 2012-04-18 5 h 2012-04-18 2 2012-04-18 2 2012-04-18 6 h 2012-04-19 3 2012-04-19 3 2012-04-19 7 h 2012-04-20 4 "facets" : { "perday" : { "date_histogram" : { "field" : "date", "interval" : "day" } } } lundi 23 septembre 13

Slide 85

Slide 85 text

Date Histogram Facet Date Hashtag 2012-04-18 1 2012-04-18 5 h 2012-04-18 2 2012-04-18 2 2012-04-18 6 h 2012-04-19 3 2012-04-19 3 2012-04-19 7 h 2012-04-20 4 "facets" : { "perday" : { "date_histogram" : { "field" : "date", "interval" : "day" } } } "facets" : { "perday" : { "_type" : "date_histogram", "entries": [ { "time": 1334700000000, "count": 5 }, { "time": 1334786400000, "count": 3 }, { "time": 1334872800000, "count": 1 } ] } } lundi 23 septembre 13

Slide 86

Slide 86 text

Range Facet Hashtag 1 5 2 2 6 3 3 7 4 lundi 23 septembre 13

Slide 87

Slide 87 text

Range Facet Hashtag 1 5 2 2 6 3 3 7 4 Hashtag 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 lundi 23 septembre 13

Slide 88

Slide 88 text

Range Facet Hashtag 1 5 2 2 6 3 3 7 4 lundi 23 septembre 13

Slide 89

Slide 89 text

Range Facet Hashtag 1 5 2 2 6 3 3 7 4 "facets" : { "hashtags" : { "range" : { "field" : "hashtag", "ranges" : [ { "to" : 3 }, { "from" : 3, "to" : 5 }, { "from" : 5 } ] } } } lundi 23 septembre 13

Slide 90

Slide 90 text

Range Facet Hashtag 1 5 2 2 6 3 3 7 4 "facets" : { "hashtags" : { "range" : { "field" : "hashtag", "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 } ] } } lundi 23 septembre 13

Slide 91

Slide 91 text

Site marchand lundi 23 septembre 13

Slide 92

Slide 92 text

Site marchand lundi 23 septembre 13

Slide 93

Slide 93 text

Site marchand lundi 23 septembre 13

Slide 94

Slide 94 text

Site marchand lundi 23 septembre 13

Slide 95

Slide 95 text

Site marchand Ranges Term Term Ranges lundi 23 septembre 13

Slide 96

Slide 96 text

Analyse temps-réel • Faire un matchAll sur l'ensemble des données • Actualiser toutes les x secondes • Indexer en même temps les nouvelles données Term Date histogram lundi 23 septembre 13

Slide 97

Slide 97 text

Facettes Cartographiques lundi 23 septembre 13

Slide 98

Slide 98 text

Reprenons notre formulaire lundi 23 septembre 13

Slide 99

Slide 99 text

Reprenons notre formulaire Recherche Full Text lundi 23 septembre 13

Slide 100

Slide 100 text

Reprenons notre formulaire lundi 23 septembre 13

Slide 101

Slide 101 text

Reprenons notre formulaire lundi 23 septembre 13

Slide 102

Slide 102 text

Démonstration Avez-vous fait du bruit ? lundi 23 septembre 13

Slide 103

Slide 103 text

Architecture Chrome lundi 23 septembre 13

Slide 104

Slide 104 text

Architecture Chrome lundi 23 septembre 13

Slide 105

Slide 105 text

Architecture Twitter Streaming API Chrome lundi 23 septembre 13

Slide 106

Slide 106 text

Architecture Twitter Streaming API Chrome lundi 23 septembre 13

Slide 107

Slide 107 text

Architecture Twitter River Twitter Streaming API Chrome $ curl -XPUT localhost:9200/_river/twitter/_meta -d ' { "type" : "twitter", "twitter" : { "user" : "twitter_user", "password" : "twitter_password", "filter" : { "tracks" : ["elasticsearch"] } } }' lundi 23 septembre 13

Slide 108

Slide 108 text

Démonstrations http://onemilliontweetmap.com/ http://www.scrutmydocs.org Make sense of your (BIG) data http://elasticsearch.pilato.fr/ lundi 23 septembre 13

Slide 109

Slide 109 text

Architecture Un peu plus de technique : partitions / réplications / scalabilité lundi 23 septembre 13

Slide 110

Slide 110 text

Lexique lundi 23 septembre 13

Slide 111

Slide 111 text

Lexique • Nœud (node) : Une instance d'Elasticsearch (~ machine ?) lundi 23 septembre 13

Slide 112

Slide 112 text

Lexique • Nœud (node) : Une instance d'Elasticsearch (~ machine ?) • Cluster : Un ensemble de nœuds lundi 23 septembre 13

Slide 113

Slide 113 text

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 lundi 23 septembre 13

Slide 114

Slide 114 text

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 lundi 23 septembre 13

Slide 115

Slide 115 text

Créons un index Cluster Nœud 1 Client CURL lundi 23 septembre 13

Slide 116

Slide 116 text

Créons un index Cluster Nœud 1 Shard 0 Shard 1 réplication non respectée Client CURL $ curl -XPUT localhost:9200/twitter -d '{ "index" : { "number_of_shards" : 2, "number_of_replicas" : 1 } }' lundi 23 septembre 13

Slide 117

Slide 117 text

Créons un index Cluster Nœud 2 Shard 0 Shard 1 Nœud 1 Shard 0 Shard 1 réplication respectée Client CURL $ curl -XPUT localhost:9200/twitter -d '{ "index" : { "number_of_shards" : 2, "number_of_replicas" : 1 } }' lundi 23 septembre 13

Slide 118

Slide 118 text

Réallocation dynamique Cluster Nœud 1 Shard 1 Nœud 2 Shard 0 Shard 1 Shard 0 lundi 23 septembre 13

Slide 119

Slide 119 text

Réallocation dynamique Cluster Nœud 3 Nœud 1 Shard 1 Nœud 2 Shard 0 Shard 1 Shard 0 Shard 0 lundi 23 septembre 13

Slide 120

Slide 120 text

Réallocation dynamique Cluster Nœud 3 Nœud 1 Shard 1 Nœud 2 Shard 0 Shard 1 Shard 0 Shard 0 lundi 23 septembre 13

Slide 121

Slide 121 text

Réallocation dynamique Cluster Nœud 3 Nœud 1 Shard 1 Nœud 2 Shard 1 Shard 0 Shard 0 lundi 23 septembre 13

Slide 122

Slide 122 text

Réallocation dynamique Cluster Nœud 3 Nœud 1 Shard 1 Nœud 2 Shard 1 Shard 0 Shard 1 Shard 0 lundi 23 septembre 13

Slide 123

Slide 123 text

Réallocation dynamique Cluster Nœud 3 Nœud 1 Shard 1 Nœud 2 Shard 1 Shard 0 Nœud 4 Shard 1 Shard 0 lundi 23 septembre 13

Slide 124

Slide 124 text

Réallocation dynamique Cluster Nœud 3 Nœud 1 Shard 1 Nœud 2 Shard 1 Shard 0 Nœud 4 Shard 1 Shard 0 lundi 23 septembre 13

Slide 125

Slide 125 text

Réallocation dynamique Cluster Nœud 3 Nœud 1 Nœud 2 Shard 1 Shard 0 Nœud 4 Shard 1 Le tuning, c'est trouver le bon équilibre entre le nombre de nodes, shards et replicas ! Shard 0 lundi 23 septembre 13

Slide 126

Slide 126 text

Indexons un document $ 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", ... }' Cluster Nœud 3 Nœud 1 Nœud 2 Shard 1 Shard 0 Shard 0 Nœud 4 Shard 1 Client CURL Doc 1 lundi 23 septembre 13

Slide 127

Slide 127 text

Indexons un document $ 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", ... }' Cluster Nœud 3 Nœud 1 Nœud 2 Shard 1 Shard 0 Shard 0 Nœud 4 Shard 1 Client CURL Doc 1 lundi 23 septembre 13

Slide 128

Slide 128 text

Indexons un document $ 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", ... }' Cluster Nœud 3 Nœud 1 Nœud 2 Shard 1 Shard 0 Shard 0 Nœud 4 Shard 1 Client CURL Doc 1 Doc 1 lundi 23 septembre 13

Slide 129

Slide 129 text

Indexons un document $ 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", ... }' Cluster Nœud 3 Nœud 1 Nœud 2 Shard 1 Shard 0 Shard 0 Nœud 4 Shard 1 Client CURL Doc 1 Doc 1 lundi 23 septembre 13

Slide 130

Slide 130 text

Indexons un 2ème document $ curl -XPUT localhost:9200/twitter/tweet/2 -d ' { "text": "Je fais du bruit pour #elasticsearch à #JUG", "created_at": "2012-04-06T21:12:52.000Z", "source": "Twitter for iPad", ... }' Cluster Nœud 3 Nœud 1 Nœud 2 Shard 1 Shard 0 Shard 0 Nœud 4 Shard 1 Client CURL Doc 1 Doc 1 Doc 2 lundi 23 septembre 13

Slide 131

Slide 131 text

Indexons un 2ème document $ curl -XPUT localhost:9200/twitter/tweet/2 -d ' { "text": "Je fais du bruit pour #elasticsearch à #JUG", "created_at": "2012-04-06T21:12:52.000Z", "source": "Twitter for iPad", ... }' Cluster Nœud 3 Nœud 1 Nœud 2 Shard 1 Shard 0 Shard 0 Nœud 4 Shard 1 Client CURL Doc 1 Doc 1 Doc 2 lundi 23 septembre 13

Slide 132

Slide 132 text

Indexons un 2ème document $ curl -XPUT localhost:9200/twitter/tweet/2 -d ' { "text": "Je fais du bruit pour #elasticsearch à #JUG", "created_at": "2012-04-06T21:12:52.000Z", "source": "Twitter for iPad", ... }' Cluster Nœud 3 Nœud 1 Nœud 2 Shard 1 Shard 0 Shard 0 Nœud 4 Shard 1 Client CURL Doc 1 Doc 1 Doc 2 lundi 23 septembre 13

Slide 133

Slide 133 text

Indexons un 2ème document $ curl -XPUT localhost:9200/twitter/tweet/2 -d ' { "text": "Je fais du bruit pour #elasticsearch à #JUG", "created_at": "2012-04-06T21:12:52.000Z", "source": "Twitter for iPad", ... }' Cluster Nœud 3 Nœud 1 Nœud 2 Shard 1 Shard 0 Shard 0 Nœud 4 Shard 1 Client CURL Doc 1 Doc 1 Doc 2 Doc 2 lundi 23 septembre 13

Slide 134

Slide 134 text

Indexons un 2ème document $ curl -XPUT localhost:9200/twitter/tweet/2 -d ' { "text": "Je fais du bruit pour #elasticsearch à #JUG", "created_at": "2012-04-06T21:12:52.000Z", "source": "Twitter for iPad", ... }' Cluster Nœud 3 Nœud 1 Nœud 2 Shard 1 Shard 0 Shard 0 Nœud 4 Shard 1 Client CURL Doc 1 Doc 1 Doc 2 Doc 2 lundi 23 septembre 13

Slide 135

Slide 135 text

Cherchons ! $ curl localhost:9200/twitter/_search?q=elasticsearch Cluster Nœud 3 Nœud 1 Nœud 2 Shard 1 Shard 0 Shard 0 Nœud 4 Shard 1 Client CURL Doc 1 Doc 1 Doc 2 Doc 2 lundi 23 septembre 13

Slide 136

Slide 136 text

Cherchons ! $ curl localhost:9200/twitter/_search?q=elasticsearch Cluster Nœud 3 Nœud 1 Nœud 2 Shard 1 Shard 0 Shard 0 Nœud 4 Shard 1 Client CURL Doc 1 Doc 1 Doc 2 Doc 2 lundi 23 septembre 13

Slide 137

Slide 137 text

Cherchons ! $ curl localhost:9200/twitter/_search?q=elasticsearch Cluster Nœud 3 Nœud 1 Nœud 2 Shard 1 Shard 0 Shard 0 Nœud 4 Shard 1 Client CURL Doc 1 Doc 1 Doc 2 Doc 2 lundi 23 septembre 13

Slide 138

Slide 138 text

Cherchons ! $ curl localhost:9200/twitter/_search?q=elasticsearch Cluster Nœud 3 Nœud 1 Nœud 2 Shard 1 Shard 0 Shard 0 Nœud 4 Shard 1 Client CURL Doc 1 Doc 1 Doc 2 Doc 2 lundi 23 septembre 13

Slide 139

Slide 139 text

Cherchons ! $ curl localhost:9200/twitter/_search?q=elasticsearch Cluster Nœud 3 Nœud 1 Nœud 2 Shard 1 Shard 0 Shard 0 Nœud 4 Shard 1 Client CURL Doc 1 Doc 1 Doc 2 Doc 2 { "took" : 24, "timed_out" : false, "_shards" : { "total" : 5, "successful" : 5, "failed" : 0 }, "hits" : { "total" : 2, "max_score" : 0.227, "hits" : [ { "_index" : "twitter", "_type" : "tweet", "_id" : "1", "_score" : 0.227, "_source" : { ... } }, { "_index" : "twitter", "_type" : "tweet", "_id" : "2", "_score" : 0.152, "_source" : { ... } } ] } lundi 23 septembre 13

Slide 140

Slide 140 text

Cherchons encore ! $ curl localhost:9200/twitter/_search?q=elasticsearch Cluster Nœud 3 Nœud 1 Nœud 2 Shard 1 Shard 0 Shard 0 Nœud 4 Shard 1 Client CURL Doc 1 Doc 1 Doc 2 Doc 2 lundi 23 septembre 13

Slide 141

Slide 141 text

Cherchons encore ! $ curl localhost:9200/twitter/_search?q=elasticsearch Cluster Nœud 3 Nœud 1 Nœud 2 Shard 1 Shard 0 Shard 0 Nœud 4 Shard 1 Client CURL Doc 1 Doc 1 Doc 2 Doc 2 lundi 23 septembre 13

Slide 142

Slide 142 text

Cherchons encore ! $ curl localhost:9200/twitter/_search?q=elasticsearch Cluster Nœud 3 Nœud 1 Nœud 2 Shard 1 Shard 0 Shard 0 Nœud 4 Shard 1 Client CURL Doc 1 Doc 2 Doc 2 Doc 1 lundi 23 septembre 13

Slide 143

Slide 143 text

Cherchons encore ! $ curl localhost:9200/twitter/_search?q=elasticsearch Cluster Nœud 3 Nœud 1 Nœud 2 Shard 1 Shard 0 Shard 0 Client CURL Doc 1 Doc 2 Doc 1 lundi 23 septembre 13

Slide 144

Slide 144 text

Cherchons encore ! $ curl localhost:9200/twitter/_search?q=elasticsearch Cluster Nœud 3 Nœud 1 Nœud 2 Shard 1 Shard 0 Shard 0 Client CURL Doc 1 Doc 2 Doc 1 lundi 23 septembre 13

Slide 145

Slide 145 text

Cherchons encore ! $ curl localhost:9200/twitter/_search?q=elasticsearch Cluster Nœud 3 Nœud 1 Nœud 2 Shard 1 Shard 0 Shard 0 Client CURL Doc 1 Doc 1 Doc 2 lundi 23 septembre 13

Slide 146

Slide 146 text

Cherchons encore ! $ curl localhost:9200/twitter/_search?q=elasticsearch Cluster Nœud 3 Nœud 1 Nœud 2 Shard 1 Shard 0 Shard 0 Client CURL Doc 1 Doc 1 Doc 2 lundi 23 septembre 13

Slide 147

Slide 147 text

Cherchons encore ! $ curl localhost:9200/twitter/_search?q=elasticsearch Cluster Nœud 3 Nœud 1 Nœud 2 Shard 1 Shard 0 Shard 0 Client CURL Doc 1 Doc 1 Doc 2 { "took" : 24, "timed_out" : false, "_shards" : { "total" : 5, "successful" : 5, "failed" : 0 }, "hits" : { "total" : 2, "max_score" : 0.227, "hits" : [ { "_index" : "twitter", "_type" : "tweet", "_id" : "1", "_score" : 0.227, "_source" : { ... } }, { "_index" : "twitter", "_type" : "tweet", "_id" : "2", "_score" : 0.152, "_source" : { ... } } ] } lundi 23 septembre 13

Slide 148

Slide 148 text

La percolation Ou la recherche inversée lundi 23 septembre 13

Slide 149

Slide 149 text

Usage courant d’un moteur de recherche • J’indexe un document • Je cherche de temps en temps si un document m’intéresse • Avec de la chance, il sera bien placé au niveau pertinence dans les résultats. Sinon, il passe inaperçu ! lundi 23 septembre 13

Slide 150

Slide 150 text

La recherche inversée • Enregistrer ses critères de recherche • A chaque document indexé, on récupère la liste des recherches qui correspondent • On a un « listener » sur le moteur d’indexation : le percolator lundi 23 septembre 13

Slide 151

Slide 151 text

Usage du percolator $ curl -XPOST localhost:9200/_percolator/twitter/dadoonet -d ’{ "query" : { "term" : { "user.screen_name" : "dadoonet" } } }’ $ curl -XPOST localhost:9200/_percolator/twitter/elasticsearch -d ’{ "query" : { "match" : { "hashtag.text" : "elasticsearch" } } }’ $ curl -XPOST localhost:9200/_percolator/twitter/mycomplexquery -d ’{ "query" : { "bool" : { "must" : { "term" : { "user" : "kimchy" } }, "must_not" : { "range" : { "age" : { "from" : 10, "to" : 20 } } }, "should" : [ { "term" : { "tag" : "wow" } },{ "match" : { "tag" : "elasticsearch is cool" } } ] } } }’ lundi 23 septembre 13

Slide 152

Slide 152 text

Usage du percolator lundi 23 septembre 13

Slide 153

Slide 153 text

Usage du percolator $ curl -XPUT localhost:9200/twitter/tweet/1&percolate=* -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.\r \nDeeJay 4 times a year, just for fun !" } }' lundi 23 septembre 13

Slide 154

Slide 154 text

Usage du percolator $ curl -XPUT localhost:9200/twitter/tweet/1&percolate=* -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.\r \nDeeJay 4 times a year, just for fun !" } }' { "ok": true, "_index": "twitter", "_type": "tweet", "_id": "1", "matches": [ "dadoonet", "elasticsearch" ] } lundi 23 septembre 13

Slide 155

Slide 155 text

Tout doit être indexé ? Analyse et mapping lundi 23 septembre 13

Slide 156

Slide 156 text

The lazy dog... lundi 23 septembre 13

Slide 157

Slide 157 text

The quick brown fox jumps over the lazy Dog The lazy dog... lundi 23 septembre 13

Slide 158

Slide 158 text

The quick brown fox jumps over the lazy dog The quick brown fox jumps over the lazy Dog The lazy dog... lundi 23 septembre 13

Slide 159

Slide 159 text

Analyseur standard $ curl -XPOST 'localhost:9200/test/_analyze?analyzer=standard&pretty=1' -d 'The quick brown fox jumps over the lazy Dog' lundi 23 septembre 13

Slide 160

Slide 160 text

Analyseur standard $ curl -XPOST 'localhost:9200/test/_analyze?analyzer=standard&pretty=1' -d 'The quick brown fox jumps over the lazy Dog' { "tokens" : [ { "token" : "quick", "start_offset": 4, "end_offset": 9, "type": "", "position": 2 }, { "token" : "brown", "start_offset": 10, "end_offset": 15, "type": "", "position": 3 }, { "token" : "fox", "start_offset": 16, "end_offset": 19, "type": "", "position": 4 }, { "token": "jumps", "start_offset": 20, "end_offset": 26, "type": "", "position": 5 }, { "token": "over", "start_offset": 27, "end_offset": 31, "type": "", "position": 6 }, { "token" : "lazy", "start_offset": 36, "end_offset": 40, "type": "", "position": 8 }, { "token" : "dog", "start_offset": 41, "end_offset": 44, "type": "", "position": 9 } ] } lundi 23 septembre 13

Slide 161

Slide 161 text

Analyseur whitespace $ curl -XPOST 'localhost:9200/test/_analyze?analyzer=whitespace&pretty=1' -d 'The quick brown fox jumps over the lazy Dog' lundi 23 septembre 13

Slide 162

Slide 162 text

Analyseur whitespace $ curl -XPOST 'localhost:9200/test/_analyze?analyzer=whitespace&pretty=1' -d 'The quick brown fox jumps over the lazy Dog' { "tokens" : [ { "token" : "The", ... }, { "token" : "quick", ... }, { "token" : "brown", ... }, { "token" : "fox", ... }, { "token" : "jumps", ... }, { "token" : "over", ... }, { "token" : "the", ... }, { "token" : "lazy", ... }, { "token" : "Dog", ... } ] } lundi 23 septembre 13

Slide 163

Slide 163 text

Un analyseur Un ensemble de tokenizers et de filtres lundi 23 septembre 13

Slide 164

Slide 164 text

Un tokenizer • Découpe une chaine en « mots » et transforme : • whitespace tokenizer : "the dog!" -> "the", "dog!" • standard tokenizer : "the dog!" -> "the", "dog" lundi 23 septembre 13

Slide 165

Slide 165 text

Un filtre • Supprime ou transforme un token : • asciifolding filter : éléphant -> elephant • stemmer filter (french) : elephants -> "eleph" cheval -> "cheval" chevaux -> "cheval" • phonetic (plugin) : quick -> "Q200" quik -> "Q200" lundi 23 septembre 13

Slide 166

Slide 166 text

Analyzer "analysis":{ "analyzer":{ "francais":{ "type":"custom", "tokenizer":"standard", "filter":["lowercase", "stop_francais", "fr_stemmer", "asciifolding", "elision"] } }, "filter":{ "stop_francais":{ "type":"stop", "stopwords":["_french_", "twitter"] }, "fr_stemmer" : { "type" : "stemmer", "name" : "french" }, "elision" : { "type" : "elision", "articles" : ["l", "m", "t", "qu", "n", "s", "j", "d"] } } } lundi 23 septembre 13

Slide 167

Slide 167 text

Mapping "type1" : { "properties" : { "text1" : { "type" : "string", "analyzer" : "simple" }, "text2" : { "type" : "string", "index_analyzer" : "simple", "search_analyzer" : "standard" }, "text3" : { "type" : "multi_field", "fields" : { "text3" : { "type" : "string", "analyzer" : "standard" }, "ngram" : { "type" : "string", "analyzer" : "ngram" }, "soundex" : { "type" : "string", "analyzer" : "soundex" } } } } } lundi 23 septembre 13

Slide 168

Slide 168 text

Les types • string • integer / long • float / double • boolean • null • array • objects • multi_field • ip • geo_point • geo_shape • binary • attachment (plugin) lundi 23 septembre 13

Slide 169

Slide 169 text

Champs spéciaux • _all (et include_in_all) • _source • _ttl • parent / child • nested lundi 23 septembre 13

Slide 170

Slide 170 text

Autres fonctionnalités • highlighting • scoring • sort • bulk • et bien d’autres... lundi 23 septembre 13

Slide 171

Slide 171 text

Autres fonctionnalités • highlighting • scoring • sort • bulk • et bien d’autres... lundi 23 septembre 13

Slide 172

Slide 172 text

La communauté ~80 contributeurs directs au projet (+ de 4400 watchers et + de 1000 forks) lundi 23 septembre 13

Slide 173

Slide 173 text

La communauté ~310 inscrits sur la mailing list, 70 messages / mois, ~520 followers, ~260 sur meetup lundi 23 septembre 13

Slide 174

Slide 174 text

lundi 23 septembre 13

Slide 175

Slide 175 text

Rejoignez le mouvement ! @ElasticsearchFR Slides sur http://fr.slideshare.net/dadoonet Sources sur https://github.com/elasticsearchfr/talks Prochaines rencontres sur http://www.meetup.com/elasticsearchfr/ lundi 23 septembre 13