SlideShare uma empresa Scribd logo
1 de 177
Elasticsearch.
Le moteur de recherche
élastique pour tous
David Pilato, Elasticsearch.com, Paris
mercredi 15 mai 13
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"
}
mercredi 15 mai 13
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"
}
mercredi 15 mai 13
ScrutMyDocs.org
mercredi 15 mai 13
Elasticsearch.com
• Créée en 2012 par les auteurs
d’Elasticsearch
• Formation (publique et intra)
• Consulting (support dév)
• Abonnement annuel support pour la
production avec 3 niveaux de SLA
(délai de réponse et disponibilité)
mercredi 15 mai 13
Pour la démo
Faites du bruit sur Twitter
avec le hashtag
#elasticsearch
mercredi 15 mai 13
SQL Classique
Cherche moi un document
de décembre 2011 portant sur la france
et contenant produit et david
En SQL :
mercredi 15 mai 13
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%';
mercredi 15 mai 13
Au final, on obtient
mercredi 15 mai 13
Moteur de recherche ?
• un moteur d’indexation de documents
mercredi 15 mai 13
Moteur de recherche ?
• un moteur d’indexation de documents
mercredi 15 mai 13
Moteur de recherche ?
• un moteur d’indexation de documents
• un moteur de recherche dans les index
mercredi 15 mai 13
Elasticsearch
mercredi 15 mai 13
ElasticsearchYour Data, your Search !
mercredi 15 mai 13
Elasticsearch
• C’est un moteur !
• NoSQL orienté document
• Apache Lucene
• HTTP / REST / JSON
• Distribué, Scalable, Cloud ready
mercredi 15 mai 13
Points clés
mercredi 15 mai 13
Points clés
• Simple: start in 5 minutes 30 seconds
mercredi 15 mai 13
Points clés
• Simple: start in 5 minutes 30 seconds
• Efficace: just start new nodes!
mercredi 15 mai 13
Points clés
• Simple: start in 5 minutes 30 seconds
• Efficace: just start new nodes!
• Puissant: 20-300ms!
mercredi 15 mai 13
Points clés
• Simple: start in 5 minutes 30 seconds
• Efficace: just start new nodes!
• Puissant: 20-300ms!
• Complet: built-in + plugins
mercredi 15 mai 13
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
mercredi 15 mai 13
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.rnAt this time, enjoying NoSQL
world : CouchDB, ElasticSearch.rnDeeJay 4 times a year, just for fun !" }
}
mercredi 15 mai 13
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.rnAt this time, enjoying NoSQL
world : CouchDB, ElasticSearch.rnDeeJay 4 times a year, just for fun !" }
}
mercredi 15 mai 13
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.rnAt this time, enjoying NoSQL
world : CouchDB, ElasticSearch.rnDeeJay 4 times a year, just for fun !" }
}
mercredi 15 mai 13
Interagir avec
Elasticsearch
mercredi 15 mai 13
Interagir avec
Elasticsearch
• API REST : http://host:port/[index]/[type]/[_action/id]
Méthodes HTTP : GET, POST, PUT, DELETE
mercredi 15 mai 13
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
mercredi 15 mai 13
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
mercredi 15 mai 13
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
mercredi 15 mai 13
Interagir avec
Elasticsearch
• API REST : http://host:port/[index]/[type]/[_action/id]
Méthodes HTTP : GET, POST, PUT, DELETE
• Documents
• curl -XPUT http://localhost:9200/twitter/tweet/1
• curl -XGET http://localhost:9200/twitter/tweet/1
• curl -XDELETE http://localhost:9200/twitter/tweet/1
• Recherche
• curl -XPOST http://localhost:9200/twitter/tweet/_search
mercredi 15 mai 13
Interagir avec
Elasticsearch
• API REST : http://host:port/[index]/[type]/[_action/id]
Méthodes HTTP : GET, POST, PUT, DELETE
• Documents
• curl -XPUT http://localhost:9200/twitter/tweet/1
• curl -XGET http://localhost:9200/twitter/tweet/1
• curl -XDELETE http://localhost:9200/twitter/tweet/1
• Recherche
• curl -XPOST http://localhost:9200/twitter/tweet/_search
• curl -XPOST http://localhost:9200/twitter/_search
mercredi 15 mai 13
Interagir avec
Elasticsearch
• API REST : http://host:port/[index]/[type]/[_action/id]
Méthodes HTTP : GET, POST, PUT, DELETE
• Documents
• curl -XPUT http://localhost:9200/twitter/tweet/1
• curl -XGET http://localhost:9200/twitter/tweet/1
• curl -XDELETE http://localhost:9200/twitter/tweet/1
• Recherche
• curl -XPOST http://localhost:9200/twitter/tweet/_search
• curl -XPOST http://localhost:9200/twitter/_search
• curl -XPOST http://localhost:9200/_search
mercredi 15 mai 13
Interagir avec
Elasticsearch
• API REST : http://host:port/[index]/[type]/[_action/id]
Méthodes HTTP : GET, POST, PUT, DELETE
• Documents
• curl -XPUT http://localhost:9200/twitter/tweet/1
• curl -XGET http://localhost:9200/twitter/tweet/1
• curl -XDELETE http://localhost:9200/twitter/tweet/1
• Recherche
• curl -XPOST http://localhost:9200/twitter/tweet/_search
• curl -XPOST http://localhost:9200/twitter/_search
• curl -XPOST http://localhost:9200/_search
• Meta-données
• curl -XGET http://localhost:9200/twitter/_status
mercredi 15 mai 13
Interagir avec
Elasticsearch
• API REST : http://host:port/[index]/[type]/[_action/id]
Méthodes HTTP : GET, POST, PUT, DELETE
• Documents
• curl -XPUT http://localhost:9200/twitter/tweet/1
• curl -XGET http://localhost:9200/twitter/tweet/1
• curl -XDELETE http://localhost:9200/twitter/tweet/1
• Recherche
• curl -XPOST http://localhost:9200/twitter/tweet/_search
• curl -XPOST http://localhost:9200/twitter/_search
• curl -XPOST http://localhost:9200/_search
• Meta-données
• curl -XGET http://localhost:9200/twitter/_status
• curl -XPOST http://localhost:9200/_shutdown
mercredi 15 mai 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 !" }
}'
mercredi 15 mai 13
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.rnDeeJay 4 times a
year, just for fun !" }
}'
mercredi 15 mai 13
Chercher
$ curl localhost:9200/twitter/tweet/_search?q=elasticsearch
mercredi 15 mai 13
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",
[…]
}
} ]
}
}
mercredi 15 mai 13
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
mercredi 15 mai 13
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
mercredi 15 mai 13
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
mercredi 15 mai 13
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
mercredi 15 mai 13
Query DSL
• Requêtes précises : plutôt que de
chercher « à la google », on peut
utiliser des critères précis :
mercredi 15 mai 13
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" }
}
]
}
}’
mercredi 15 mai 13
Injecter les données
Et au milieu coule une rivière
mercredi 15 mai 13
La collecte
mercredi 15 mai 13
La collecte
Stockage
Données
mercredi 15 mai 13
La collecte
Stockage
Données
Doc
mercredi 15 mai 13
La collecte
Stockage
Données
Doc
mercredi 15 mai 13
La collecte
Stockage
Données
Doc
Doc
mercredi 15 mai 13
La collecte
Stockage
Données
Doc Doc
mercredi 15 mai 13
La collecte
Stockage
Données
Doc Doc
mercredi 15 mai 13
La collecte
Stockage
Données
Doc Doc
mercredi 15 mai 13
La collecte
Stockage
Données
Doc
Doc
mercredi 15 mai 13
La collecte
Stockage
Données
Doc
Doc
Doc
mercredi 15 mai 13
La collecte
Stockage
Données
DocDoc
Doc
mercredi 15 mai 13
La collecte
Stockage
Données
DocDocDoc
mercredi 15 mai 13
Quelques Rivers...
mercredi 15 mai 13
Quelques Rivers...
• CouchDB River
mercredi 15 mai 13
Quelques Rivers...
• CouchDB River
• CouchBase River
mercredi 15 mai 13
Quelques Rivers...
• CouchDB River
• CouchBase River
• MongoDB River
mercredi 15 mai 13
Quelques Rivers...
• CouchDB River
• CouchBase River
• MongoDB River
• JDBC River
mercredi 15 mai 13
Quelques Rivers...
• CouchDB River
• CouchBase River
• MongoDB River
• JDBC River
• Wikipedia River
mercredi 15 mai 13
Quelques Rivers...
• CouchDB River
• CouchBase River
• MongoDB River
• JDBC River
• Wikipedia River
• Twitter River
mercredi 15 mai 13
Quelques Rivers...
• CouchDB River
• CouchBase River
• MongoDB River
• JDBC River
• Wikipedia River
• Twitter River
• RabbitMQ River
mercredi 15 mai 13
Quelques Rivers...
• CouchDB River
• CouchBase River
• MongoDB River
• JDBC River
• Wikipedia River
• Twitter River
• RabbitMQ River
• ActiveMQ River
mercredi 15 mai 13
Quelques Rivers...
• CouchDB River
• CouchBase River
• MongoDB River
• JDBC River
• Wikipedia River
• Twitter River
• RabbitMQ River
• ActiveMQ River
• RSS River
mercredi 15 mai 13
Quelques Rivers...
• CouchDB River
• CouchBase River
• MongoDB River
• JDBC River
• Wikipedia River
• Twitter River
• RabbitMQ River
• ActiveMQ River
• RSS River
• LDAP River
mercredi 15 mai 13
Quelques Rivers...
• CouchDB River
• CouchBase River
• MongoDB River
• JDBC River
• Wikipedia River
• Twitter River
• RabbitMQ River
• ActiveMQ River
• RSS River
• LDAP River
• FS River
mercredi 15 mai 13
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
mercredi 15 mai 13
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
mercredi 15 mai 13
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 !)
mercredi 15 mai 13
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
mercredi 15 mai 13
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
mercredi 15 mai 13
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
mercredi 15 mai 13
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
mercredi 15 mai 13
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"} }
}
mercredi 15 mai 13
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 }
]
}
}
mercredi 15 mai 13
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
mercredi 15 mai 13
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 moisPar mois
Date Count
2012-04 9
mercredi 15 mai 13
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 moisPar mois
Date Count
2012-04 9
Par jourPar jour
Date Count
2012-04-18 5
2012-04-19 3
2012-04-20 1
mercredi 15 mai 13
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
mercredi 15 mai 13
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"
}
}
}
mercredi 15 mai 13
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 }
]
}
}
mercredi 15 mai 13
Range Facet
Hashtag
1
5
2
2
6
3
3
7
4
mercredi 15 mai 13
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
mercredi 15 mai 13
Range Facet
Hashtag
1
5
2
2
6
3
3
7
4
mercredi 15 mai 13
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 }
] } } }
mercredi 15 mai 13
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
} ] } }
mercredi 15 mai 13
Site marchand
mercredi 15 mai 13
Site marchand
mercredi 15 mai 13
Site marchand
mercredi 15 mai 13
Site marchand
mercredi 15 mai 13
Site marchand
Ranges
Term
Term
Ranges
mercredi 15 mai 13
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
mercredi 15 mai 13
Facettes
Cartographiques
mercredi 15 mai 13
Reprenons notre
formulaire
mercredi 15 mai 13
Reprenons notre
formulaire
Recherche Full Text
mercredi 15 mai 13
Reprenons notre
formulaire
mercredi 15 mai 13
Reprenons notre
formulaire
mercredi 15 mai 13
Démonstration
Avez-vous fait du bruit ?
mercredi 15 mai 13
Architecture
mercredi 15 mai 13
Architecture
mercredi 15 mai 13
Architecture
Twitter
Streaming
API
mercredi 15 mai 13
Architecture
Twitter
Streaming
API
mercredi 15 mai 13
Architecture
Twitter
River
Twitter
Streaming
API
$ curl -XPUT localhost:9200/_river/twitter/_meta -d '
{
"type" : "twitter",
"twitter" : {
"user" : "twitter_user",
"password" : "twitter_password",
"filter" : { "tracks" : ["elasticsearch"] }
}
}'
mercredi 15 mai 13
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"] }
}
}'
mercredi 15 mai 13
Démonstration
http://onemilliontweetmap.com/
http://www.scrutmydocs.org
mercredi 15 mai 13
Démonstration
http://onemilliontweetmap.com/
http://www.scrutmydocs.org
mercredi 15 mai 13
Architecture
Un peu plus de technique : partitions / réplications / scalabilité
mercredi 15 mai 13
Lexique
mercredi 15 mai 13
Lexique
• Nœud (node) : Une instance d'Elasticsearch
(~ machine ?)
mercredi 15 mai 13
Lexique
• Nœud (node) : Une instance d'Elasticsearch
(~ machine ?)
• Cluster : Un ensemble de nœuds
mercredi 15 mai 13
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
mercredi 15 mai 13
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
mercredi 15 mai 13
Créons un index
Cluster
Nœud 1
Client
CURL
mercredi 15 mai 13
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
}
}'
mercredi 15 mai 13
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
}
}'
mercredi 15 mai 13
Réallocation dynamique
Cluster
Nœud 1
Shard 1
Nœud 2
Shard 0
Shard 1
Shard 0
mercredi 15 mai 13
Réallocation dynamique
Cluster
Nœud 3Nœud 1
Shard 1
Nœud 2
Shard 0
Shard 1
Shard 0 Shard 0
mercredi 15 mai 13
Réallocation dynamique
Cluster
Nœud 3Nœud 1
Shard 1
Nœud 2
Shard 0
Shard 1
Shard 0 Shard 0
mercredi 15 mai 13
Réallocation dynamique
Cluster
Nœud 3Nœud 1
Shard 1
Nœud 2
Shard 1
Shard 0 Shard 0
mercredi 15 mai 13
Réallocation dynamique
Cluster
Nœud 3Nœud 1
Shard 1
Nœud 2
Shard 1
Shard 0
Shard 1
Shard 0
mercredi 15 mai 13
Réallocation dynamique
Cluster
Nœud 3Nœud 1
Shard 1
Nœud 2
Shard 1
Shard 0
Nœud 4
Shard 1
Shard 0
mercredi 15 mai 13
Réallocation dynamique
Cluster
Nœud 3Nœud 1
Shard 1
Nœud 2
Shard 1
Shard 0
Nœud 4
Shard 1
Shard 0
mercredi 15 mai 13
Réallocation dynamique
Cluster
Nœud 3Nœ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
mercredi 15 mai 13
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 3Nœud 1 Nœud 2
Shard 1
Shard 0 Shard 0
Nœud 4
Shard 1
Client
CURL
Doc
1
mercredi 15 mai 13
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 3Nœud 1 Nœud 2
Shard 1
Shard 0 Shard 0
Nœud 4
Shard 1
Client
CURL
Doc
1
mercredi 15 mai 13
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 3Nœud 1 Nœud 2
Shard 1
Shard 0 Shard 0
Nœud 4
Shard 1
Client
CURL
Doc
1
Doc
1
mercredi 15 mai 13
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 3Nœud 1 Nœud 2
Shard 1
Shard 0 Shard 0
Nœud 4
Shard 1
Client
CURL
Doc
1
Doc
1
mercredi 15 mai 13
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 3Nœud 1 Nœud 2
Shard 1
Shard 0 Shard 0
Nœud 4
Shard 1
Client
CURL
Doc
1
Doc
1
Doc
2
mercredi 15 mai 13
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 3Nœud 1 Nœud 2
Shard 1
Shard 0 Shard 0
Nœud 4
Shard 1
Client
CURL
Doc
1
Doc
1
Doc
2
mercredi 15 mai 13
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 3Nœud 1 Nœud 2
Shard 1
Shard 0 Shard 0
Nœud 4
Shard 1
Client
CURL
Doc
1
Doc
1
Doc
2
mercredi 15 mai 13
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 3Nœ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
mercredi 15 mai 13
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 3Nœ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
mercredi 15 mai 13
Cherchons !
$ curl localhost:9200/twitter/_search?q=elasticsearch
Cluster
Nœud 3Nœ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
mercredi 15 mai 13
Cherchons !
$ curl localhost:9200/twitter/_search?q=elasticsearch
Cluster
Nœud 3Nœ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
mercredi 15 mai 13
Cherchons !
$ curl localhost:9200/twitter/_search?q=elasticsearch
Cluster
Nœud 3Nœ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
mercredi 15 mai 13
Cherchons !
$ curl localhost:9200/twitter/_search?q=elasticsearch
Cluster
Nœud 3Nœ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
mercredi 15 mai 13
Cherchons !
$ curl localhost:9200/twitter/_search?q=elasticsearch
Cluster
Nœud 3Nœ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" : { ... }
} ]
}
mercredi 15 mai 13
Cherchons encore !
$ curl localhost:9200/twitter/_search?q=elasticsearch
Cluster
Nœud 3Nœ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
mercredi 15 mai 13
Cherchons encore !
$ curl localhost:9200/twitter/_search?q=elasticsearch
Cluster
Nœud 3Nœ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
mercredi 15 mai 13
Cherchons encore !
$ curl localhost:9200/twitter/_search?q=elasticsearch
Cluster
Nœud 3Nœ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
mercredi 15 mai 13
Cherchons encore !
$ curl localhost:9200/twitter/_search?q=elasticsearch
Cluster
Nœud 3Nœud 1 Nœud 2
Shard 1
Shard 0 Shard 0
Client
CURL
Doc
1
Doc
2
Doc
1
mercredi 15 mai 13
Cherchons encore !
$ curl localhost:9200/twitter/_search?q=elasticsearch
Cluster
Nœud 3Nœud 1 Nœud 2
Shard 1
Shard 0 Shard 0
Client
CURL
Doc
1
Doc
2
Doc
1
mercredi 15 mai 13
Cherchons encore !
$ curl localhost:9200/twitter/_search?q=elasticsearch
Cluster
Nœud 3Nœud 1 Nœud 2
Shard 1
Shard 0 Shard 0
Client
CURL
Doc
1
Doc
1
Doc
2
mercredi 15 mai 13
Cherchons encore !
$ curl localhost:9200/twitter/_search?q=elasticsearch
Cluster
Nœud 3Nœud 1 Nœud 2
Shard 1
Shard 0 Shard 0
Client
CURL
Doc
1
Doc
1
Doc
2
mercredi 15 mai 13
Cherchons encore !
$ curl localhost:9200/twitter/_search?q=elasticsearch
Cluster
Nœud 3Nœ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" : { ... }
} ]
}
mercredi 15 mai 13
La percolation
Ou la recherche inversée
mercredi 15 mai 13
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 !
mercredi 15 mai 13
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
mercredi 15 mai 13
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" }
}
]
}
}
}’
mercredi 15 mai 13
Usage du percolator
mercredi 15 mai 13
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.rnAt this time, enjoying NoSQL world : CouchDB, ElasticSearch.r
nDeeJay 4 times a year, just for fun !" }
}'
mercredi 15 mai 13
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.rnAt 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"
]
}
mercredi 15 mai 13
Tout doit être
indexé ?
Analyse et mapping
mercredi 15 mai 13
The lazy dog...
mercredi 15 mai 13
The quick brown fox
jumped over the lazy Dog
The lazy dog...
mercredi 15 mai 13
The quick brown fox
jumped over the lazy dog
The quick brown fox
jumped over the lazy Dog
The lazy dog...
mercredi 15 mai 13
Analyseur standard
$ curl -XPOST 'localhost:9200/test/_analyze?analyzer=standard&pretty=1' -d
'The quick brown fox jumped over the lazy Dog'
mercredi 15 mai 13
Analyseur standard
$ curl -XPOST 'localhost:9200/test/_analyze?analyzer=standard&pretty=1' -d
'The quick brown fox jumped over the lazy Dog'
{
"tokens" : [ {
"token" : "quick",
"start_offset": 4, "end_offset": 9, "type": "<ALPHANUM>", "position": 2
}, {
"token" : "brown",
"start_offset": 10, "end_offset": 15, "type": "<ALPHANUM>", "position": 3
}, {
"token" : "fox",
"start_offset": 16, "end_offset": 19, "type": "<ALPHANUM>", "position": 4
}, {
"token": "jumped",
"start_offset": 20, "end_offset": 26, "type": "<ALPHANUM>", "position": 5
}, {
"token": "over",
"start_offset": 27, "end_offset": 31, "type": "<ALPHANUM>", "position": 6
}, {
"token" : "lazy",
"start_offset": 36, "end_offset": 40, "type": "<ALPHANUM>", "position": 8
}, {
"token" : "dog",
"start_offset": 41, "end_offset": 44, "type": "<ALPHANUM>", "position": 9
} ] }
mercredi 15 mai 13
Analyseur whitespace
$ curl -XPOST 'localhost:9200/test/_analyze?analyzer=whitespace&pretty=1' -d
'The quick brown fox jumped over the lazy Dog'
mercredi 15 mai 13
Analyseur whitespace
$ curl -XPOST 'localhost:9200/test/_analyze?analyzer=whitespace&pretty=1' -d
'The quick brown fox jumped over the lazy Dog'
{
"tokens" : [ {
"token" : "The", ...
}, {
"token" : "quick", ...
}, {
"token" : "brown", ...
}, {
"token" : "fox", ...
}, {
"token" : "jumped", ...
}, {
"token" : "over", ...
}, {
"token" : "the", ...
}, {
"token" : "lazy", ...
}, {
"token" : "Dog", ...
} ] }
mercredi 15 mai 13
Un analyseur
Un ensemble
de tokenizers et
de filtres
mercredi 15 mai 13
Un tokenizer
• Découpe une chaine en « mots » et
transforme :
• whitespace tokenizer :
"the dog!" -> "the", "dog!"
• standard tokenizer :
"the dog!" -> "the", "dog"
mercredi 15 mai 13
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"
mercredi 15 mai 13
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"]
}
}
}
mercredi 15 mai 13
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"
}
}
}
}
}
mercredi 15 mai 13
Les types
• string
• integer / long
• float / double
• boolean
• null
• array
• objects
• multi_field
• ip
• geo_point
• geo_shape
• binary
• attachment (plugin)
mercredi 15 mai 13
Champs spéciaux
• _all (et include_in_all)
• _source
• _ttl
• parent / child
• nested
mercredi 15 mai 13
Autres fonctionnalités
• highlighting
• scoring
• sort
• explain
• multi get / multi search
• bulk
mercredi 15 mai 13
Autres fonctionnalités
• highlighting
• scoring
• sort
• explain
• multi get / multi search
• bulk
mercredi 15 mai 13
Démonstrations
CURL est ton ami !
JAVA est aussi ton ami !
mercredi 15 mai 13
La communauté
~80 contributeurs directs au projet (+ de 4000 watchers et + de 840 forks)
mercredi 15 mai 13
La communauté
~250 inscrits sur la mailing list, 70 messages / mois, ~400 followers, ~200 sur meetup
mercredi 15 mai 13
mercredi 15 mai 13
Rejoignez le mouvement !
@ElasticsearchFR
Questions ?
Slides sur http://fr.slideshare.net/dadoonet Sources sur https://github.com/elasticsearchfr/talks
www.elasticsearch.fr
Posez aussi vos questions sur elasticsearch-fr@googlegroups.com
in
progress
Prochaines rencontres sur http://www.meetup.com/elasticsearchfr/
mercredi 15 mai 13

Mais conteúdo relacionado

Mais procurados

Elasticsearch - OSDC France 2012
Elasticsearch - OSDC France 2012Elasticsearch - OSDC France 2012
Elasticsearch - OSDC France 2012David Pilato
 
Hands on lab Elasticsearch
Hands on lab ElasticsearchHands on lab Elasticsearch
Hands on lab ElasticsearchDavid Pilato
 
Breizhcamp 2015 - Comment (ne pas réussir à) modéliser ses data dans elastics...
Breizhcamp 2015 - Comment (ne pas réussir à) modéliser ses data dans elastics...Breizhcamp 2015 - Comment (ne pas réussir à) modéliser ses data dans elastics...
Breizhcamp 2015 - Comment (ne pas réussir à) modéliser ses data dans elastics...Bruno Bonnin
 
Présentation de ElasticSearch / Digital apéro du 12/11/2014
Présentation de ElasticSearch / Digital apéro du 12/11/2014Présentation de ElasticSearch / Digital apéro du 12/11/2014
Présentation de ElasticSearch / Digital apéro du 12/11/2014Silicon Comté
 
Elasticsearch - Devoxx France 2012
Elasticsearch - Devoxx France 2012Elasticsearch - Devoxx France 2012
Elasticsearch - Devoxx France 2012David Pilato
 
A la recherche d'ElasticSearch
A la recherche d'ElasticSearchA la recherche d'ElasticSearch
A la recherche d'ElasticSearchNinnir
 
Migrer une application existante vers Elasticsearch - Nuxeo Tour 2014 - workshop
Migrer une application existante vers Elasticsearch - Nuxeo Tour 2014 - workshopMigrer une application existante vers Elasticsearch - Nuxeo Tour 2014 - workshop
Migrer une application existante vers Elasticsearch - Nuxeo Tour 2014 - workshopNuxeo
 
MongoDB : la base NoSQL qui réinvente la gestion de données
MongoDB : la base NoSQL qui réinvente la gestion de donnéesMongoDB : la base NoSQL qui réinvente la gestion de données
MongoDB : la base NoSQL qui réinvente la gestion de donnéesSOAT
 
Tunis big data_meetup__21_nov2015__aymenzaafouri
Tunis big data_meetup__21_nov2015__aymenzaafouriTunis big data_meetup__21_nov2015__aymenzaafouri
Tunis big data_meetup__21_nov2015__aymenzaafouriAymen ZAAFOURI
 
ElasticSearch : Architecture et Développement
ElasticSearch : Architecture et DéveloppementElasticSearch : Architecture et Développement
ElasticSearch : Architecture et DéveloppementMohamed hedi Abidi
 
Oxalide Workshop #3 - Elasticearch, an overview
Oxalide Workshop #3 - Elasticearch, an overviewOxalide Workshop #3 - Elasticearch, an overview
Oxalide Workshop #3 - Elasticearch, an overviewLudovic Piot
 
Introduction à ElasticSearch
Introduction à ElasticSearchIntroduction à ElasticSearch
Introduction à ElasticSearchFadel Chafai
 
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?Sébastien Prunier
 
Atelier : Développement rapide d&rsquo;une application basée surXWiki
Atelier : Développement rapide d&rsquo;une application basée surXWikiAtelier : Développement rapide d&rsquo;une application basée surXWiki
Atelier : Développement rapide d&rsquo;une application basée surXWikiKorteby Farouk
 
Jug algeria x wiki-atelier
Jug algeria x wiki-atelierJug algeria x wiki-atelier
Jug algeria x wiki-atelierAlgeria JUG
 
Découverte de Elastic search
Découverte de Elastic searchDécouverte de Elastic search
Découverte de Elastic searchJEMLI Fathi
 
Besoin de rien Envie de Search - Presentation Lucene Solr ElasticSearch
Besoin de rien Envie de Search - Presentation Lucene Solr ElasticSearchBesoin de rien Envie de Search - Presentation Lucene Solr ElasticSearch
Besoin de rien Envie de Search - Presentation Lucene Solr ElasticSearchfrancelabs
 
Tout ce que le getting started mongo db ne vous dira pas
Tout ce que le getting started mongo db ne vous dira pasTout ce que le getting started mongo db ne vous dira pas
Tout ce que le getting started mongo db ne vous dira pasPierre-Alban DEWITTE
 
Solr and Elasticsearch in Action (at Breizhcamp)
Solr and Elasticsearch in Action (at Breizhcamp)Solr and Elasticsearch in Action (at Breizhcamp)
Solr and Elasticsearch in Action (at Breizhcamp)Lucian Precup
 

Mais procurados (20)

Elasticsearch - OSDC France 2012
Elasticsearch - OSDC France 2012Elasticsearch - OSDC France 2012
Elasticsearch - OSDC France 2012
 
Hands on lab Elasticsearch
Hands on lab ElasticsearchHands on lab Elasticsearch
Hands on lab Elasticsearch
 
Breizhcamp 2015 - Comment (ne pas réussir à) modéliser ses data dans elastics...
Breizhcamp 2015 - Comment (ne pas réussir à) modéliser ses data dans elastics...Breizhcamp 2015 - Comment (ne pas réussir à) modéliser ses data dans elastics...
Breizhcamp 2015 - Comment (ne pas réussir à) modéliser ses data dans elastics...
 
Présentation de ElasticSearch / Digital apéro du 12/11/2014
Présentation de ElasticSearch / Digital apéro du 12/11/2014Présentation de ElasticSearch / Digital apéro du 12/11/2014
Présentation de ElasticSearch / Digital apéro du 12/11/2014
 
Elasticsearch - Devoxx France 2012
Elasticsearch - Devoxx France 2012Elasticsearch - Devoxx France 2012
Elasticsearch - Devoxx France 2012
 
A la recherche d'ElasticSearch
A la recherche d'ElasticSearchA la recherche d'ElasticSearch
A la recherche d'ElasticSearch
 
Migrer une application existante vers Elasticsearch - Nuxeo Tour 2014 - workshop
Migrer une application existante vers Elasticsearch - Nuxeo Tour 2014 - workshopMigrer une application existante vers Elasticsearch - Nuxeo Tour 2014 - workshop
Migrer une application existante vers Elasticsearch - Nuxeo Tour 2014 - workshop
 
MongoDB : la base NoSQL qui réinvente la gestion de données
MongoDB : la base NoSQL qui réinvente la gestion de donnéesMongoDB : la base NoSQL qui réinvente la gestion de données
MongoDB : la base NoSQL qui réinvente la gestion de données
 
Tunis big data_meetup__21_nov2015__aymenzaafouri
Tunis big data_meetup__21_nov2015__aymenzaafouriTunis big data_meetup__21_nov2015__aymenzaafouri
Tunis big data_meetup__21_nov2015__aymenzaafouri
 
ElasticSearch : Architecture et Développement
ElasticSearch : Architecture et DéveloppementElasticSearch : Architecture et Développement
ElasticSearch : Architecture et Développement
 
Oxalide Workshop #3 - Elasticearch, an overview
Oxalide Workshop #3 - Elasticearch, an overviewOxalide Workshop #3 - Elasticearch, an overview
Oxalide Workshop #3 - Elasticearch, an overview
 
Introduction à ElasticSearch
Introduction à ElasticSearchIntroduction à ElasticSearch
Introduction à ElasticSearch
 
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?
 
Atelier : Développement rapide d&rsquo;une application basée surXWiki
Atelier : Développement rapide d&rsquo;une application basée surXWikiAtelier : Développement rapide d&rsquo;une application basée surXWiki
Atelier : Développement rapide d&rsquo;une application basée surXWiki
 
Jug algeria x wiki-atelier
Jug algeria x wiki-atelierJug algeria x wiki-atelier
Jug algeria x wiki-atelier
 
Découverte de Elastic search
Découverte de Elastic searchDécouverte de Elastic search
Découverte de Elastic search
 
Besoin de rien Envie de Search - Presentation Lucene Solr ElasticSearch
Besoin de rien Envie de Search - Presentation Lucene Solr ElasticSearchBesoin de rien Envie de Search - Presentation Lucene Solr ElasticSearch
Besoin de rien Envie de Search - Presentation Lucene Solr ElasticSearch
 
Tout ce que le getting started mongo db ne vous dira pas
Tout ce que le getting started mongo db ne vous dira pasTout ce que le getting started mongo db ne vous dira pas
Tout ce que le getting started mongo db ne vous dira pas
 
Solr and Elasticsearch in Action (at Breizhcamp)
Solr and Elasticsearch in Action (at Breizhcamp)Solr and Elasticsearch in Action (at Breizhcamp)
Solr and Elasticsearch in Action (at Breizhcamp)
 
Elasticsearch
ElasticsearchElasticsearch
Elasticsearch
 

Semelhante a Elasticsearch - Esme sudria

Oxalide Academy : Workshop #3 Elastic Search
Oxalide Academy : Workshop #3 Elastic SearchOxalide Academy : Workshop #3 Elastic Search
Oxalide Academy : Workshop #3 Elastic SearchOxalide
 
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp012014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01MongoDB
 
Tout ce que le getting started MongoDB ne vous dira pas
Tout ce que le getting started MongoDB ne vous dira pasTout ce que le getting started MongoDB ne vous dira pas
Tout ce que le getting started MongoDB ne vous dira pasBruno Bonnin
 
Construisez votre première application MongoDB
Construisez votre première application MongoDBConstruisez votre première application MongoDB
Construisez votre première application MongoDBMongoDB
 
Devoxx: Tribulation d'un développeur sur le Cloud
Devoxx: Tribulation d'un développeur sur le CloudDevoxx: Tribulation d'un développeur sur le Cloud
Devoxx: Tribulation d'un développeur sur le CloudTugdual Grall
 
Tout ce que le getting started mongodb ne vous dira pas
Tout ce que le getting started mongodb ne vous dira pasTout ce que le getting started mongodb ne vous dira pas
Tout ce que le getting started mongodb ne vous dira pasBruno Bonnin
 
Microservices-DDD-Telosys-Devoxx-FR-2022
Microservices-DDD-Telosys-Devoxx-FR-2022Microservices-DDD-Telosys-Devoxx-FR-2022
Microservices-DDD-Telosys-Devoxx-FR-2022Laurent Guérin
 
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.MongoDB
 
Gardez vos projets R organisés avec le package "project"
Gardez vos projets R organisés avec le package "project"Gardez vos projets R organisés avec le package "project"
Gardez vos projets R organisés avec le package "project"parisraddicts
 
Enib cours c.a.i. web - séance #1 - html5 css3-js - 2
Enib   cours c.a.i. web - séance #1 - html5 css3-js - 2Enib   cours c.a.i. web - séance #1 - html5 css3-js - 2
Enib cours c.a.i. web - séance #1 - html5 css3-js - 2Horacio Gonzalez
 
2014 04-09-fr - app dev series - session 4 - indexing
2014 04-09-fr - app dev series - session 4 - indexing2014 04-09-fr - app dev series - session 4 - indexing
2014 04-09-fr - app dev series - session 4 - indexingMongoDB
 
SQLSaturday Toulouse 2017 - Azure Data Lake : SELECT people FROM data-lake WH...
SQLSaturday Toulouse 2017 - Azure Data Lake : SELECT people FROM data-lake WH...SQLSaturday Toulouse 2017 - Azure Data Lake : SELECT people FROM data-lake WH...
SQLSaturday Toulouse 2017 - Azure Data Lake : SELECT people FROM data-lake WH...Jean-Pierre Riehl
 
Devoxx 2014 : Atelier MongoDB - Decouverte de MongoDB 2.6
Devoxx 2014 : Atelier MongoDB - Decouverte de MongoDB 2.6Devoxx 2014 : Atelier MongoDB - Decouverte de MongoDB 2.6
Devoxx 2014 : Atelier MongoDB - Decouverte de MongoDB 2.6Tugdual Grall
 
Mise en place d’un moteur de recherche et de recommandation de documents text...
Mise en place d’un moteur de recherche et de recommandation de documents text...Mise en place d’un moteur de recherche et de recommandation de documents text...
Mise en place d’un moteur de recherche et de recommandation de documents text...AbdeslamAMRANE3
 
GraphTour - Workday: Tracking activity with Neo4j (French version)
GraphTour - Workday: Tracking activity with Neo4j (French version)GraphTour - Workday: Tracking activity with Neo4j (French version)
GraphTour - Workday: Tracking activity with Neo4j (French version)Neo4j
 
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...
ENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...ENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...Horacio Gonzalez
 
MySQL Innovation & Cloud Day - Document Store avec MySQL HeatWave Database Se...
MySQL Innovation & Cloud Day - Document Store avec MySQL HeatWave Database Se...MySQL Innovation & Cloud Day - Document Store avec MySQL HeatWave Database Se...
MySQL Innovation & Cloud Day - Document Store avec MySQL HeatWave Database Se...Frederic Descamps
 
Diskad en France: solutions de publication de contenu pour des utilisateurs ...
Diskad en France: solutions de publication de contenu  pour des utilisateurs ...Diskad en France: solutions de publication de contenu  pour des utilisateurs ...
Diskad en France: solutions de publication de contenu pour des utilisateurs ...Pieter Smits
 
Diskadfransnieuw
DiskadfransnieuwDiskadfransnieuw
Diskadfransnieuwguestb088a9
 
Oxalide MorningTech #1 - BigData
Oxalide MorningTech #1 - BigDataOxalide MorningTech #1 - BigData
Oxalide MorningTech #1 - BigDataLudovic Piot
 

Semelhante a Elasticsearch - Esme sudria (20)

Oxalide Academy : Workshop #3 Elastic Search
Oxalide Academy : Workshop #3 Elastic SearchOxalide Academy : Workshop #3 Elastic Search
Oxalide Academy : Workshop #3 Elastic Search
 
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp012014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01
 
Tout ce que le getting started MongoDB ne vous dira pas
Tout ce que le getting started MongoDB ne vous dira pasTout ce que le getting started MongoDB ne vous dira pas
Tout ce que le getting started MongoDB ne vous dira pas
 
Construisez votre première application MongoDB
Construisez votre première application MongoDBConstruisez votre première application MongoDB
Construisez votre première application MongoDB
 
Devoxx: Tribulation d'un développeur sur le Cloud
Devoxx: Tribulation d'un développeur sur le CloudDevoxx: Tribulation d'un développeur sur le Cloud
Devoxx: Tribulation d'un développeur sur le Cloud
 
Tout ce que le getting started mongodb ne vous dira pas
Tout ce que le getting started mongodb ne vous dira pasTout ce que le getting started mongodb ne vous dira pas
Tout ce que le getting started mongodb ne vous dira pas
 
Microservices-DDD-Telosys-Devoxx-FR-2022
Microservices-DDD-Telosys-Devoxx-FR-2022Microservices-DDD-Telosys-Devoxx-FR-2022
Microservices-DDD-Telosys-Devoxx-FR-2022
 
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.
 
Gardez vos projets R organisés avec le package "project"
Gardez vos projets R organisés avec le package "project"Gardez vos projets R organisés avec le package "project"
Gardez vos projets R organisés avec le package "project"
 
Enib cours c.a.i. web - séance #1 - html5 css3-js - 2
Enib   cours c.a.i. web - séance #1 - html5 css3-js - 2Enib   cours c.a.i. web - séance #1 - html5 css3-js - 2
Enib cours c.a.i. web - séance #1 - html5 css3-js - 2
 
2014 04-09-fr - app dev series - session 4 - indexing
2014 04-09-fr - app dev series - session 4 - indexing2014 04-09-fr - app dev series - session 4 - indexing
2014 04-09-fr - app dev series - session 4 - indexing
 
SQLSaturday Toulouse 2017 - Azure Data Lake : SELECT people FROM data-lake WH...
SQLSaturday Toulouse 2017 - Azure Data Lake : SELECT people FROM data-lake WH...SQLSaturday Toulouse 2017 - Azure Data Lake : SELECT people FROM data-lake WH...
SQLSaturday Toulouse 2017 - Azure Data Lake : SELECT people FROM data-lake WH...
 
Devoxx 2014 : Atelier MongoDB - Decouverte de MongoDB 2.6
Devoxx 2014 : Atelier MongoDB - Decouverte de MongoDB 2.6Devoxx 2014 : Atelier MongoDB - Decouverte de MongoDB 2.6
Devoxx 2014 : Atelier MongoDB - Decouverte de MongoDB 2.6
 
Mise en place d’un moteur de recherche et de recommandation de documents text...
Mise en place d’un moteur de recherche et de recommandation de documents text...Mise en place d’un moteur de recherche et de recommandation de documents text...
Mise en place d’un moteur de recherche et de recommandation de documents text...
 
GraphTour - Workday: Tracking activity with Neo4j (French version)
GraphTour - Workday: Tracking activity with Neo4j (French version)GraphTour - Workday: Tracking activity with Neo4j (French version)
GraphTour - Workday: Tracking activity with Neo4j (French version)
 
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...
ENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...ENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...
 
MySQL Innovation & Cloud Day - Document Store avec MySQL HeatWave Database Se...
MySQL Innovation & Cloud Day - Document Store avec MySQL HeatWave Database Se...MySQL Innovation & Cloud Day - Document Store avec MySQL HeatWave Database Se...
MySQL Innovation & Cloud Day - Document Store avec MySQL HeatWave Database Se...
 
Diskad en France: solutions de publication de contenu pour des utilisateurs ...
Diskad en France: solutions de publication de contenu  pour des utilisateurs ...Diskad en France: solutions de publication de contenu  pour des utilisateurs ...
Diskad en France: solutions de publication de contenu pour des utilisateurs ...
 
Diskadfransnieuw
DiskadfransnieuwDiskadfransnieuw
Diskadfransnieuw
 
Oxalide MorningTech #1 - BigData
Oxalide MorningTech #1 - BigDataOxalide MorningTech #1 - BigData
Oxalide MorningTech #1 - BigData
 

Mais de David Pilato

2018-10-02 - Un moteur de recherche NoSQL pour chercher^H^H^H^H^H^H^H^H trouv...
2018-10-02 - Un moteur de recherche NoSQL pour chercher^H^H^H^H^H^H^H^H trouv...2018-10-02 - Un moteur de recherche NoSQL pour chercher^H^H^H^H^H^H^H^H trouv...
2018-10-02 - Un moteur de recherche NoSQL pour chercher^H^H^H^H^H^H^H^H trouv...David Pilato
 
Managing your black friday logs Voxxed Luxembourg
Managing your black friday logs Voxxed LuxembourgManaging your black friday logs Voxxed Luxembourg
Managing your black friday logs Voxxed LuxembourgDavid Pilato
 
Un moteur de recherche NoSQL pour chercher^H^H^H^H^H^H^H^H trouver...
Un moteur de recherche NoSQL pour chercher^H^H^H^H^H^H^H^H trouver...Un moteur de recherche NoSQL pour chercher^H^H^H^H^H^H^H^H trouver...
Un moteur de recherche NoSQL pour chercher^H^H^H^H^H^H^H^H trouver...David Pilato
 
Managing your Black Friday Logs NDC Oslo
Managing your  Black Friday Logs NDC OsloManaging your  Black Friday Logs NDC Oslo
Managing your Black Friday Logs NDC OsloDavid Pilato
 
Managing your black friday logs - Code Europe
Managing your black friday logs - Code EuropeManaging your black friday logs - Code Europe
Managing your black friday logs - Code EuropeDavid Pilato
 
Managing your black Friday logs - CloudConf.IT
Managing your black Friday logs - CloudConf.ITManaging your black Friday logs - CloudConf.IT
Managing your black Friday logs - CloudConf.ITDavid Pilato
 
Elasticsearch in 15 minutes
Elasticsearch in 15 minutesElasticsearch in 15 minutes
Elasticsearch in 15 minutesDavid Pilato
 
Elastify you application: from SQL to NoSQL in less than one hour!
Elastify you application: from SQL to NoSQL in less than one hour!Elastify you application: from SQL to NoSQL in less than one hour!
Elastify you application: from SQL to NoSQL in less than one hour!David Pilato
 
Elasticsearch - Devoxx France 2012 - English version
Elasticsearch - Devoxx France 2012 - English versionElasticsearch - Devoxx France 2012 - English version
Elasticsearch - Devoxx France 2012 - English versionDavid Pilato
 

Mais de David Pilato (9)

2018-10-02 - Un moteur de recherche NoSQL pour chercher^H^H^H^H^H^H^H^H trouv...
2018-10-02 - Un moteur de recherche NoSQL pour chercher^H^H^H^H^H^H^H^H trouv...2018-10-02 - Un moteur de recherche NoSQL pour chercher^H^H^H^H^H^H^H^H trouv...
2018-10-02 - Un moteur de recherche NoSQL pour chercher^H^H^H^H^H^H^H^H trouv...
 
Managing your black friday logs Voxxed Luxembourg
Managing your black friday logs Voxxed LuxembourgManaging your black friday logs Voxxed Luxembourg
Managing your black friday logs Voxxed Luxembourg
 
Un moteur de recherche NoSQL pour chercher^H^H^H^H^H^H^H^H trouver...
Un moteur de recherche NoSQL pour chercher^H^H^H^H^H^H^H^H trouver...Un moteur de recherche NoSQL pour chercher^H^H^H^H^H^H^H^H trouver...
Un moteur de recherche NoSQL pour chercher^H^H^H^H^H^H^H^H trouver...
 
Managing your Black Friday Logs NDC Oslo
Managing your  Black Friday Logs NDC OsloManaging your  Black Friday Logs NDC Oslo
Managing your Black Friday Logs NDC Oslo
 
Managing your black friday logs - Code Europe
Managing your black friday logs - Code EuropeManaging your black friday logs - Code Europe
Managing your black friday logs - Code Europe
 
Managing your black Friday logs - CloudConf.IT
Managing your black Friday logs - CloudConf.ITManaging your black Friday logs - CloudConf.IT
Managing your black Friday logs - CloudConf.IT
 
Elasticsearch in 15 minutes
Elasticsearch in 15 minutesElasticsearch in 15 minutes
Elasticsearch in 15 minutes
 
Elastify you application: from SQL to NoSQL in less than one hour!
Elastify you application: from SQL to NoSQL in less than one hour!Elastify you application: from SQL to NoSQL in less than one hour!
Elastify you application: from SQL to NoSQL in less than one hour!
 
Elasticsearch - Devoxx France 2012 - English version
Elasticsearch - Devoxx France 2012 - English versionElasticsearch - Devoxx France 2012 - English version
Elasticsearch - Devoxx France 2012 - English version
 

Elasticsearch - Esme sudria

  • 1. Elasticsearch. Le moteur de recherche élastique pour tous David Pilato, Elasticsearch.com, Paris mercredi 15 mai 13
  • 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" } mercredi 15 mai 13
  • 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" } mercredi 15 mai 13
  • 5. Elasticsearch.com • Créée en 2012 par les auteurs d’Elasticsearch • Formation (publique et intra) • Consulting (support dév) • Abonnement annuel support pour la production avec 3 niveaux de SLA (délai de réponse et disponibilité) mercredi 15 mai 13
  • 6. Pour la démo Faites du bruit sur Twitter avec le hashtag #elasticsearch mercredi 15 mai 13
  • 7. SQL Classique Cherche moi un document de décembre 2011 portant sur la france et contenant produit et david En SQL : mercredi 15 mai 13
  • 8. 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%'; mercredi 15 mai 13
  • 9. Au final, on obtient mercredi 15 mai 13
  • 10. Moteur de recherche ? • un moteur d’indexation de documents mercredi 15 mai 13
  • 11. Moteur de recherche ? • un moteur d’indexation de documents mercredi 15 mai 13
  • 12. Moteur de recherche ? • un moteur d’indexation de documents • un moteur de recherche dans les index mercredi 15 mai 13
  • 14. ElasticsearchYour Data, your Search ! mercredi 15 mai 13
  • 15. Elasticsearch • C’est un moteur ! • NoSQL orienté document • Apache Lucene • HTTP / REST / JSON • Distribué, Scalable, Cloud ready mercredi 15 mai 13
  • 17. Points clés • Simple: start in 5 minutes 30 seconds mercredi 15 mai 13
  • 18. Points clés • Simple: start in 5 minutes 30 seconds • Efficace: just start new nodes! mercredi 15 mai 13
  • 19. Points clés • Simple: start in 5 minutes 30 seconds • Efficace: just start new nodes! • Puissant: 20-300ms! mercredi 15 mai 13
  • 20. Points clés • Simple: start in 5 minutes 30 seconds • Efficace: just start new nodes! • Puissant: 20-300ms! • Complet: built-in + plugins mercredi 15 mai 13
  • 21. 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 mercredi 15 mai 13
  • 22. 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.rnAt this time, enjoying NoSQL world : CouchDB, ElasticSearch.rnDeeJay 4 times a year, just for fun !" } } mercredi 15 mai 13
  • 23. 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.rnAt this time, enjoying NoSQL world : CouchDB, ElasticSearch.rnDeeJay 4 times a year, just for fun !" } } mercredi 15 mai 13
  • 24. 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.rnAt this time, enjoying NoSQL world : CouchDB, ElasticSearch.rnDeeJay 4 times a year, just for fun !" } } mercredi 15 mai 13
  • 26. Interagir avec Elasticsearch • API REST : http://host:port/[index]/[type]/[_action/id] Méthodes HTTP : GET, POST, PUT, DELETE mercredi 15 mai 13
  • 27. Interagir avec Elasticsearch • API REST : http://host:port/[index]/[type]/[_action/id] Méthodes HTTP : GET, POST, PUT, DELETE • Documents • curl -XPUT http://localhost:9200/twitter/tweet/1 mercredi 15 mai 13
  • 28. Interagir avec Elasticsearch • API REST : http://host:port/[index]/[type]/[_action/id] Méthodes HTTP : GET, POST, PUT, DELETE • Documents • curl -XPUT http://localhost:9200/twitter/tweet/1 • curl -XGET http://localhost:9200/twitter/tweet/1 mercredi 15 mai 13
  • 29. 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 mercredi 15 mai 13
  • 30. Interagir avec Elasticsearch • API REST : http://host:port/[index]/[type]/[_action/id] Méthodes HTTP : GET, POST, PUT, DELETE • Documents • curl -XPUT http://localhost:9200/twitter/tweet/1 • curl -XGET http://localhost:9200/twitter/tweet/1 • curl -XDELETE http://localhost:9200/twitter/tweet/1 • Recherche • curl -XPOST http://localhost:9200/twitter/tweet/_search mercredi 15 mai 13
  • 31. Interagir avec Elasticsearch • API REST : http://host:port/[index]/[type]/[_action/id] Méthodes HTTP : GET, POST, PUT, DELETE • Documents • curl -XPUT http://localhost:9200/twitter/tweet/1 • curl -XGET http://localhost:9200/twitter/tweet/1 • curl -XDELETE http://localhost:9200/twitter/tweet/1 • Recherche • curl -XPOST http://localhost:9200/twitter/tweet/_search • curl -XPOST http://localhost:9200/twitter/_search mercredi 15 mai 13
  • 32. Interagir avec Elasticsearch • API REST : http://host:port/[index]/[type]/[_action/id] Méthodes HTTP : GET, POST, PUT, DELETE • Documents • curl -XPUT http://localhost:9200/twitter/tweet/1 • curl -XGET http://localhost:9200/twitter/tweet/1 • curl -XDELETE http://localhost:9200/twitter/tweet/1 • Recherche • curl -XPOST http://localhost:9200/twitter/tweet/_search • curl -XPOST http://localhost:9200/twitter/_search • curl -XPOST http://localhost:9200/_search mercredi 15 mai 13
  • 33. Interagir avec Elasticsearch • API REST : http://host:port/[index]/[type]/[_action/id] Méthodes HTTP : GET, POST, PUT, DELETE • Documents • curl -XPUT http://localhost:9200/twitter/tweet/1 • curl -XGET http://localhost:9200/twitter/tweet/1 • curl -XDELETE http://localhost:9200/twitter/tweet/1 • Recherche • curl -XPOST http://localhost:9200/twitter/tweet/_search • curl -XPOST http://localhost:9200/twitter/_search • curl -XPOST http://localhost:9200/_search • Meta-données • curl -XGET http://localhost:9200/twitter/_status mercredi 15 mai 13
  • 34. Interagir avec Elasticsearch • API REST : http://host:port/[index]/[type]/[_action/id] Méthodes HTTP : GET, POST, PUT, DELETE • Documents • curl -XPUT http://localhost:9200/twitter/tweet/1 • curl -XGET http://localhost:9200/twitter/tweet/1 • curl -XDELETE http://localhost:9200/twitter/tweet/1 • Recherche • curl -XPOST http://localhost:9200/twitter/tweet/_search • curl -XPOST http://localhost:9200/twitter/_search • curl -XPOST http://localhost:9200/_search • Meta-données • curl -XGET http://localhost:9200/twitter/_status • curl -XPOST http://localhost:9200/_shutdown mercredi 15 mai 13
  • 35. 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 !" } }' mercredi 15 mai 13
  • 36. 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.rnDeeJay 4 times a year, just for fun !" } }' mercredi 15 mai 13
  • 38. 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", […] } } ] } } mercredi 15 mai 13
  • 39. 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 mercredi 15 mai 13
  • 40. 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 mercredi 15 mai 13
  • 41. 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 mercredi 15 mai 13
  • 42. 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 mercredi 15 mai 13
  • 43. Query DSL • Requêtes précises : plutôt que de chercher « à la google », on peut utiliser des critères précis : mercredi 15 mai 13
  • 44. 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" } } ] } }’ mercredi 15 mai 13
  • 45. Injecter les données Et au milieu coule une rivière mercredi 15 mai 13
  • 59. Quelques Rivers... • CouchDB River mercredi 15 mai 13
  • 60. Quelques Rivers... • CouchDB River • CouchBase River mercredi 15 mai 13
  • 61. Quelques Rivers... • CouchDB River • CouchBase River • MongoDB River mercredi 15 mai 13
  • 62. Quelques Rivers... • CouchDB River • CouchBase River • MongoDB River • JDBC River mercredi 15 mai 13
  • 63. Quelques Rivers... • CouchDB River • CouchBase River • MongoDB River • JDBC River • Wikipedia River mercredi 15 mai 13
  • 64. Quelques Rivers... • CouchDB River • CouchBase River • MongoDB River • JDBC River • Wikipedia River • Twitter River mercredi 15 mai 13
  • 65. Quelques Rivers... • CouchDB River • CouchBase River • MongoDB River • JDBC River • Wikipedia River • Twitter River • RabbitMQ River mercredi 15 mai 13
  • 66. Quelques Rivers... • CouchDB River • CouchBase River • MongoDB River • JDBC River • Wikipedia River • Twitter River • RabbitMQ River • ActiveMQ River mercredi 15 mai 13
  • 67. Quelques Rivers... • CouchDB River • CouchBase River • MongoDB River • JDBC River • Wikipedia River • Twitter River • RabbitMQ River • ActiveMQ River • RSS River mercredi 15 mai 13
  • 68. Quelques Rivers... • CouchDB River • CouchBase River • MongoDB River • JDBC River • Wikipedia River • Twitter River • RabbitMQ River • ActiveMQ River • RSS River • LDAP River mercredi 15 mai 13
  • 69. Quelques Rivers... • CouchDB River • CouchBase River • MongoDB River • JDBC River • Wikipedia River • Twitter River • RabbitMQ River • ActiveMQ River • RSS River • LDAP River • FS River mercredi 15 mai 13
  • 70. 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 mercredi 15 mai 13
  • 71. 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 mercredi 15 mai 13
  • 72. 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 !) mercredi 15 mai 13
  • 73. 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 mercredi 15 mai 13
  • 74. 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 mercredi 15 mai 13
  • 75. 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 mercredi 15 mai 13
  • 76. 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 mercredi 15 mai 13
  • 77. 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"} } } mercredi 15 mai 13
  • 78. 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 } ] } } mercredi 15 mai 13
  • 79. 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 mercredi 15 mai 13
  • 80. 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 moisPar mois Date Count 2012-04 9 mercredi 15 mai 13
  • 81. 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 moisPar mois Date Count 2012-04 9 Par jourPar jour Date Count 2012-04-18 5 2012-04-19 3 2012-04-20 1 mercredi 15 mai 13
  • 82. 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 mercredi 15 mai 13
  • 83. 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" } } } mercredi 15 mai 13
  • 84. 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 } ] } } mercredi 15 mai 13
  • 86. 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 mercredi 15 mai 13
  • 88. 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 } ] } } } mercredi 15 mai 13
  • 89. 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 } ] } } mercredi 15 mai 13
  • 95. 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 mercredi 15 mai 13
  • 98. Reprenons notre formulaire Recherche Full Text mercredi 15 mai 13
  • 101. Démonstration Avez-vous fait du bruit ? mercredi 15 mai 13
  • 106. Architecture Twitter River Twitter Streaming API $ curl -XPUT localhost:9200/_river/twitter/_meta -d ' { "type" : "twitter", "twitter" : { "user" : "twitter_user", "password" : "twitter_password", "filter" : { "tracks" : ["elasticsearch"] } } }' mercredi 15 mai 13
  • 107. 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"] } } }' mercredi 15 mai 13
  • 110. Architecture Un peu plus de technique : partitions / réplications / scalabilité mercredi 15 mai 13
  • 112. Lexique • Nœud (node) : Une instance d'Elasticsearch (~ machine ?) mercredi 15 mai 13
  • 113. Lexique • Nœud (node) : Une instance d'Elasticsearch (~ machine ?) • Cluster : Un ensemble de nœuds mercredi 15 mai 13
  • 114. 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 mercredi 15 mai 13
  • 115. 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 mercredi 15 mai 13
  • 116. Créons un index Cluster Nœud 1 Client CURL mercredi 15 mai 13
  • 117. 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 } }' mercredi 15 mai 13
  • 118. 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 } }' mercredi 15 mai 13
  • 119. Réallocation dynamique Cluster Nœud 1 Shard 1 Nœud 2 Shard 0 Shard 1 Shard 0 mercredi 15 mai 13
  • 120. Réallocation dynamique Cluster Nœud 3Nœud 1 Shard 1 Nœud 2 Shard 0 Shard 1 Shard 0 Shard 0 mercredi 15 mai 13
  • 121. Réallocation dynamique Cluster Nœud 3Nœud 1 Shard 1 Nœud 2 Shard 0 Shard 1 Shard 0 Shard 0 mercredi 15 mai 13
  • 122. Réallocation dynamique Cluster Nœud 3Nœud 1 Shard 1 Nœud 2 Shard 1 Shard 0 Shard 0 mercredi 15 mai 13
  • 123. Réallocation dynamique Cluster Nœud 3Nœud 1 Shard 1 Nœud 2 Shard 1 Shard 0 Shard 1 Shard 0 mercredi 15 mai 13
  • 124. Réallocation dynamique Cluster Nœud 3Nœud 1 Shard 1 Nœud 2 Shard 1 Shard 0 Nœud 4 Shard 1 Shard 0 mercredi 15 mai 13
  • 125. Réallocation dynamique Cluster Nœud 3Nœud 1 Shard 1 Nœud 2 Shard 1 Shard 0 Nœud 4 Shard 1 Shard 0 mercredi 15 mai 13
  • 126. Réallocation dynamique Cluster Nœud 3Nœ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 mercredi 15 mai 13
  • 127. 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 3Nœud 1 Nœud 2 Shard 1 Shard 0 Shard 0 Nœud 4 Shard 1 Client CURL Doc 1 mercredi 15 mai 13
  • 128. 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 3Nœud 1 Nœud 2 Shard 1 Shard 0 Shard 0 Nœud 4 Shard 1 Client CURL Doc 1 mercredi 15 mai 13
  • 129. 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 3Nœud 1 Nœud 2 Shard 1 Shard 0 Shard 0 Nœud 4 Shard 1 Client CURL Doc 1 Doc 1 mercredi 15 mai 13
  • 130. 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 3Nœud 1 Nœud 2 Shard 1 Shard 0 Shard 0 Nœud 4 Shard 1 Client CURL Doc 1 Doc 1 mercredi 15 mai 13
  • 131. 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 3Nœud 1 Nœud 2 Shard 1 Shard 0 Shard 0 Nœud 4 Shard 1 Client CURL Doc 1 Doc 1 Doc 2 mercredi 15 mai 13
  • 132. 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 3Nœud 1 Nœud 2 Shard 1 Shard 0 Shard 0 Nœud 4 Shard 1 Client CURL Doc 1 Doc 1 Doc 2 mercredi 15 mai 13
  • 133. 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 3Nœud 1 Nœud 2 Shard 1 Shard 0 Shard 0 Nœud 4 Shard 1 Client CURL Doc 1 Doc 1 Doc 2 mercredi 15 mai 13
  • 134. 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 3Nœ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 mercredi 15 mai 13
  • 135. 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 3Nœ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 mercredi 15 mai 13
  • 136. Cherchons ! $ curl localhost:9200/twitter/_search?q=elasticsearch Cluster Nœud 3Nœ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 mercredi 15 mai 13
  • 137. Cherchons ! $ curl localhost:9200/twitter/_search?q=elasticsearch Cluster Nœud 3Nœ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 mercredi 15 mai 13
  • 138. Cherchons ! $ curl localhost:9200/twitter/_search?q=elasticsearch Cluster Nœud 3Nœ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 mercredi 15 mai 13
  • 139. Cherchons ! $ curl localhost:9200/twitter/_search?q=elasticsearch Cluster Nœud 3Nœ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 mercredi 15 mai 13
  • 140. Cherchons ! $ curl localhost:9200/twitter/_search?q=elasticsearch Cluster Nœud 3Nœ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" : { ... } } ] } mercredi 15 mai 13
  • 141. Cherchons encore ! $ curl localhost:9200/twitter/_search?q=elasticsearch Cluster Nœud 3Nœ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 mercredi 15 mai 13
  • 142. Cherchons encore ! $ curl localhost:9200/twitter/_search?q=elasticsearch Cluster Nœud 3Nœ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 mercredi 15 mai 13
  • 143. Cherchons encore ! $ curl localhost:9200/twitter/_search?q=elasticsearch Cluster Nœud 3Nœ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 mercredi 15 mai 13
  • 144. Cherchons encore ! $ curl localhost:9200/twitter/_search?q=elasticsearch Cluster Nœud 3Nœud 1 Nœud 2 Shard 1 Shard 0 Shard 0 Client CURL Doc 1 Doc 2 Doc 1 mercredi 15 mai 13
  • 145. Cherchons encore ! $ curl localhost:9200/twitter/_search?q=elasticsearch Cluster Nœud 3Nœud 1 Nœud 2 Shard 1 Shard 0 Shard 0 Client CURL Doc 1 Doc 2 Doc 1 mercredi 15 mai 13
  • 146. Cherchons encore ! $ curl localhost:9200/twitter/_search?q=elasticsearch Cluster Nœud 3Nœud 1 Nœud 2 Shard 1 Shard 0 Shard 0 Client CURL Doc 1 Doc 1 Doc 2 mercredi 15 mai 13
  • 147. Cherchons encore ! $ curl localhost:9200/twitter/_search?q=elasticsearch Cluster Nœud 3Nœud 1 Nœud 2 Shard 1 Shard 0 Shard 0 Client CURL Doc 1 Doc 1 Doc 2 mercredi 15 mai 13
  • 148. Cherchons encore ! $ curl localhost:9200/twitter/_search?q=elasticsearch Cluster Nœud 3Nœ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" : { ... } } ] } mercredi 15 mai 13
  • 149. La percolation Ou la recherche inversée mercredi 15 mai 13
  • 150. 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 ! mercredi 15 mai 13
  • 151. 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 mercredi 15 mai 13
  • 152. 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" } } ] } } }’ mercredi 15 mai 13
  • 154. 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.rnAt this time, enjoying NoSQL world : CouchDB, ElasticSearch.r nDeeJay 4 times a year, just for fun !" } }' mercredi 15 mai 13
  • 155. 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.rnAt 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" ] } mercredi 15 mai 13
  • 156. Tout doit être indexé ? Analyse et mapping mercredi 15 mai 13
  • 158. The quick brown fox jumped over the lazy Dog The lazy dog... mercredi 15 mai 13
  • 159. The quick brown fox jumped over the lazy dog The quick brown fox jumped over the lazy Dog The lazy dog... mercredi 15 mai 13
  • 160. Analyseur standard $ curl -XPOST 'localhost:9200/test/_analyze?analyzer=standard&pretty=1' -d 'The quick brown fox jumped over the lazy Dog' mercredi 15 mai 13
  • 161. Analyseur standard $ curl -XPOST 'localhost:9200/test/_analyze?analyzer=standard&pretty=1' -d 'The quick brown fox jumped over the lazy Dog' { "tokens" : [ { "token" : "quick", "start_offset": 4, "end_offset": 9, "type": "<ALPHANUM>", "position": 2 }, { "token" : "brown", "start_offset": 10, "end_offset": 15, "type": "<ALPHANUM>", "position": 3 }, { "token" : "fox", "start_offset": 16, "end_offset": 19, "type": "<ALPHANUM>", "position": 4 }, { "token": "jumped", "start_offset": 20, "end_offset": 26, "type": "<ALPHANUM>", "position": 5 }, { "token": "over", "start_offset": 27, "end_offset": 31, "type": "<ALPHANUM>", "position": 6 }, { "token" : "lazy", "start_offset": 36, "end_offset": 40, "type": "<ALPHANUM>", "position": 8 }, { "token" : "dog", "start_offset": 41, "end_offset": 44, "type": "<ALPHANUM>", "position": 9 } ] } mercredi 15 mai 13
  • 162. Analyseur whitespace $ curl -XPOST 'localhost:9200/test/_analyze?analyzer=whitespace&pretty=1' -d 'The quick brown fox jumped over the lazy Dog' mercredi 15 mai 13
  • 163. Analyseur whitespace $ curl -XPOST 'localhost:9200/test/_analyze?analyzer=whitespace&pretty=1' -d 'The quick brown fox jumped over the lazy Dog' { "tokens" : [ { "token" : "The", ... }, { "token" : "quick", ... }, { "token" : "brown", ... }, { "token" : "fox", ... }, { "token" : "jumped", ... }, { "token" : "over", ... }, { "token" : "the", ... }, { "token" : "lazy", ... }, { "token" : "Dog", ... } ] } mercredi 15 mai 13
  • 164. Un analyseur Un ensemble de tokenizers et de filtres mercredi 15 mai 13
  • 165. Un tokenizer • Découpe une chaine en « mots » et transforme : • whitespace tokenizer : "the dog!" -> "the", "dog!" • standard tokenizer : "the dog!" -> "the", "dog" mercredi 15 mai 13
  • 166. 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" mercredi 15 mai 13
  • 167. 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"] } } } mercredi 15 mai 13
  • 168. 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" } } } } } mercredi 15 mai 13
  • 169. Les types • string • integer / long • float / double • boolean • null • array • objects • multi_field • ip • geo_point • geo_shape • binary • attachment (plugin) mercredi 15 mai 13
  • 170. Champs spéciaux • _all (et include_in_all) • _source • _ttl • parent / child • nested mercredi 15 mai 13
  • 171. Autres fonctionnalités • highlighting • scoring • sort • explain • multi get / multi search • bulk mercredi 15 mai 13
  • 172. Autres fonctionnalités • highlighting • scoring • sort • explain • multi get / multi search • bulk mercredi 15 mai 13
  • 173. Démonstrations CURL est ton ami ! JAVA est aussi ton ami ! mercredi 15 mai 13
  • 174. La communauté ~80 contributeurs directs au projet (+ de 4000 watchers et + de 840 forks) mercredi 15 mai 13
  • 175. La communauté ~250 inscrits sur la mailing list, 70 messages / mois, ~400 followers, ~200 sur meetup mercredi 15 mai 13
  • 177. Rejoignez le mouvement ! @ElasticsearchFR Questions ? Slides sur http://fr.slideshare.net/dadoonet Sources sur https://github.com/elasticsearchfr/talks www.elasticsearch.fr Posez aussi vos questions sur elasticsearch-fr@googlegroups.com in progress Prochaines rencontres sur http://www.meetup.com/elasticsearchfr/ mercredi 15 mai 13