why elasticsearch rocks!

37
Why rocks ! AlpesJUG – 19 février 2013 Elasticsearch

Upload: tlrx

Post on 29-Nov-2014

2.793 views

Category:

Technology


2 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Why elasticsearch rocks!

Why

rocks ! 

AlpesJUG – 19 février 2013

Elasticsearch

Page 2: Why elasticsearch rocks!

Tanguy Leroux● Consultant et Formateur @ Zenika● Elasticsearch Addict

● @tlrx● http://github.com/tlrx● [email protected]

Page 3: Why elasticsearch rocks!

Un projet

+ 700 forks +3500 watchers +100 commiters GitHubApache 2 License

Open source

Page 4: Why elasticsearch rocks!

Basé sur

Version 3.6.2, bientôt la 4.1

Apache lucene

Page 5: Why elasticsearch rocks!

Une installation

Décompresser. Exécuter. Ça marche.

ZERO CONFIG

Page 6: Why elasticsearch rocks!

Orienté

JSON

document

Page 7: Why elasticsearch rocks!

{ "nom" : "Reinhardt", "prenom" : "Jean Django", "date_naissance" : "1910-10-23"}

personne

Page 8: Why elasticsearch rocks!

{ "titre" : "Django Unchained", "genre" : "western", "date_sortie" : "2013-01-16"}

film

Page 9: Why elasticsearch rocks!

Elasticsearch / SGBD

IndexType

Document Field

Mapping

Base de donnéesTableRow

ColumnSchema

Page 10: Why elasticsearch rocks!

Elasticsearch est

La structure des documents peut évoluer avec le temps

SCHEMA LeSS

Page 11: Why elasticsearch rocks!

{ "titre" : "Django Unchained", "genre" : "western", "date_sortie": "2013-01-16"}

Aujourd'hui

Page 12: Why elasticsearch rocks!

{ "titre" : "Django Unchained", "genre" : "western", "date_sortie" : "2013-01-16", "realisateur" : { "nom" : "Tarantino", "prenom" : "Quentin" }, "nb_entrees" : 3159385, "acteurs" : [ { "nom" : "Foxx", "prenom" : "Jamie" }, { "nom" : "Waltz", "prenom" : "Christoph" }, { "nom" : "Tarantino", "prenom" : "Quentin" } ]}

demain

Page 13: Why elasticsearch rocks!

{ "titre" : "Django Unchained", "genre" : "western", "date_sortie" : "2013-01-16", "realisateur" : { "nom" : "Tarantino", "prenom" : "Quentin" }, "nb_entrees" : 3159385, "acteurs" : [ { "nom" : "Foxx", "prenom" : "Jamie" }, { "nom" : "Waltz", "prenom" : "Christoph" }, { "nom" : "Tarantino", "prenom" : "Quentin" } ]}

Recherche de « tarantino »

Page 14: Why elasticsearch rocks!

Recherche de « django »

{

"titre" : "Django Unchained", "genre" : "western",

"date_sortie" : "2013-01-16", "realisateur" : {

"nom" : "Tarantino", "prenom" : "Quentin"

},

"nb_entrees" : 3159385,

"acteurs" : [...]

}

{

"nom" : "Reinhardt",

"prenom" : "Jean Django",

"date_naissance" : "1910-10-23"

}

film personne

Page 15: Why elasticsearch rocks!

Un moteur de recherche

http://HOST:PORT/index(s)/type(s)/_action|idMéthodes HTTP: GET, PUT, POST, DELETE

restful

Page 16: Why elasticsearch rocks!

ExemplesIndexer un document

Put http://HOST:PORT/mediatheque/film/1POSt http://HOST:PORT/mediatheque/film/

Récupérer un documentget http://HOST:PORT/mediatheque/film/1

Supprimer un documentdelete http://HOST:PORT/mediatheque/film/1

Créer un indexpost http://HOST:PORT/mediatheque/musique

Rechercherget http://HOST:PORT/mediatheque/film/_search?q=djangoget http://HOST:PORT/_search?q=django

Page 17: Why elasticsearch rocks!

Un langage de requêtes

match, field, query_string, bool, term,Fuzzy, match_all,more like this, geo,

Range, wildcard, span,...

Query dsl

Page 18: Why elasticsearch rocks!

De nombreuses

terms, histogram, date histogram, range,Stats, geo distance, filter, query

...

Facettes

Page 19: Why elasticsearch rocks!

facette « terms »curl -XGET 'localhost:9200/_search' -d '

{

"query": {

"match": { "titre": "django hard" }

},

"facets": {

"facet_genres": {

"terms": { "field": "genre" }

}

}

}'

Page 20: Why elasticsearch rocks!

facette « terms »{...

"hits":{

...

},

"facets":{

"facet_genres":{

"_type":"terms",

"missing":0,

"total":2,

"other":0,

"terms":[

{"term":"western","count":1},

{"term":"action","count":1}

]

}

}

}

Page 21: Why elasticsearch rocks!

facette « terms »{...

"hits":{

...

},

"facets":{

"facet_genres":{

"_type":"terms",

"missing":0,

"total":2,

"other":0,

"terms":[

{"term":"western","count":1},

{"term":"action","count":1}

]

}

}

}

Page 22: Why elasticsearch rocks!

facette «histogramme»curl -XGET 'localhost:9200/media/film_search' -d '

{

"query": {

"match_all": {}

},

"facets": {

"facet_entrees": {

"histogram": {

"field": "nb_entrees",

"interval": "1000000"

}

}

}

}'

Page 23: Why elasticsearch rocks!

facette «histogramme»{

"hits": { … },

"facets": {

"facet_entrees": {

"_type": "histogram",

"entries": [

{ "key": 1000000, "count": 1 },

{ "key": 2000000, "count": 1 },

{ "key": 3000000, "count": 1 }

]

}

}

}

Page 24: Why elasticsearch rocks!

facette «histogramme»{

"hits": { … },

"facets": {

"facet_entrees": {

"_type": "histogram",

"entries": [

{ "key": 1000000, "count": 1 },

{ "key": 2000000, "count": 1 },

{ "key": 3000000, "count": 1 }

]

}

}

}

Page 25: Why elasticsearch rocks!

Elasticsearch est

Plusieurs nœuds communiquent en uni/multicast Node master, data, http

...

distribué

Page 26: Why elasticsearch rocks!

Ils ont aussi pensé à la

supervision

Page 27: Why elasticsearch rocks!

Elasticsearch est

100 % Java

Page 28: Why elasticsearch rocks!

Mais aussi tout plein d'autres

Php, perl, scala, python, shell, ruby,.Net, Grails, play !, flume, clojure,

Puppet, chef,...

clients

Page 29: Why elasticsearch rocks!

Un gros paquet de

Plugin d'analyse, rivers, transport, Site, misc,

...

plugins

Page 30: Why elasticsearch rocks!

Extraction de texte avec

Apache tika

Page 31: Why elasticsearch rocks!

L'indexation facilitée avec les

Jdbc, Mongodb, couchdb, rabbitmq, activemq,Ldap, rss, twitter, wikipedia,

...

rivers

Page 32: Why elasticsearch rocks!

Jdbc river plugincurl -XPUT 'localhost:9200/_river/my_jdbc_river/_meta' -d '{

"type" : "jdbc",

"jdbc" : {

"driver" : "com.mysql.jdbc.Driver",

"url" : "jdbc:mysql://localhost:3306/test",

"user" : "",

"password" : "",

"sql" : "select * from orders"

}

}'

Page 33: Why elasticsearch rocks!

L'API

percolate

Page 34: Why elasticsearch rocks!

API percolatecurl -XPUT localhost:9200/_percolator/media/film_box_office -d '{

"query": {

"constant_score": {

"filter": {

"range": {

"nb_entrees": {

"from": "5000000", "include_lower": true

}

}

}

}

}

}'

Page 35: Why elasticsearch rocks!

API percolatecurl -XPOST 'localhost:9200/media/film/?percolate=*' -d '{

"titre":"Hollywoo",

"genre":"drame",

"nb_entrees": 6000000

}'

{

"ok":true,

"_index":"media",

"_type":"film",

"_id":"70fc7FMWS8Sdxo733_5sWg",

"_version":1,

"matches":["film_box_office"]

}

Page 36: Why elasticsearch rocks!

Et aussi

Parent/childWarmers

SlowlogScriptBackup

...

Page 37: Why elasticsearch rocks!

Merci

?