why elasticsearch rocks!
DESCRIPTION
TRANSCRIPT
Why
rocks !
AlpesJUG – 19 février 2013
Elasticsearch
Tanguy Leroux● Consultant et Formateur @ Zenika● Elasticsearch Addict
● @tlrx● http://github.com/tlrx● [email protected]
Un projet
+ 700 forks +3500 watchers +100 commiters GitHubApache 2 License
Open source
Basé sur
Version 3.6.2, bientôt la 4.1
Apache lucene
Une installation
Décompresser. Exécuter. Ça marche.
ZERO CONFIG
Orienté
JSON
document
{ "nom" : "Reinhardt", "prenom" : "Jean Django", "date_naissance" : "1910-10-23"}
personne
{ "titre" : "Django Unchained", "genre" : "western", "date_sortie" : "2013-01-16"}
film
Elasticsearch / SGBD
IndexType
Document Field
Mapping
Base de donnéesTableRow
ColumnSchema
→
→
→
→
→
Elasticsearch est
La structure des documents peut évoluer avec le temps
SCHEMA LeSS
{ "titre" : "Django Unchained", "genre" : "western", "date_sortie": "2013-01-16"}
Aujourd'hui
{ "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
{ "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 »
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
Un moteur de recherche
http://HOST:PORT/index(s)/type(s)/_action|idMéthodes HTTP: GET, PUT, POST, DELETE
restful
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
Un langage de requêtes
match, field, query_string, bool, term,Fuzzy, match_all,more like this, geo,
Range, wildcard, span,...
Query dsl
De nombreuses
terms, histogram, date histogram, range,Stats, geo distance, filter, query
...
Facettes
facette « terms »curl -XGET 'localhost:9200/_search' -d '
{
"query": {
"match": { "titre": "django hard" }
},
"facets": {
"facet_genres": {
"terms": { "field": "genre" }
}
}
}'
facette « terms »{...
"hits":{
...
},
"facets":{
"facet_genres":{
"_type":"terms",
"missing":0,
"total":2,
"other":0,
"terms":[
{"term":"western","count":1},
{"term":"action","count":1}
]
}
}
}
facette « terms »{...
"hits":{
...
},
"facets":{
"facet_genres":{
"_type":"terms",
"missing":0,
"total":2,
"other":0,
"terms":[
{"term":"western","count":1},
{"term":"action","count":1}
]
}
}
}
facette «histogramme»curl -XGET 'localhost:9200/media/film_search' -d '
{
"query": {
"match_all": {}
},
"facets": {
"facet_entrees": {
"histogram": {
"field": "nb_entrees",
"interval": "1000000"
}
}
}
}'
facette «histogramme»{
"hits": { … },
"facets": {
"facet_entrees": {
"_type": "histogram",
"entries": [
{ "key": 1000000, "count": 1 },
{ "key": 2000000, "count": 1 },
{ "key": 3000000, "count": 1 }
]
}
}
}
facette «histogramme»{
"hits": { … },
"facets": {
"facet_entrees": {
"_type": "histogram",
"entries": [
{ "key": 1000000, "count": 1 },
{ "key": 2000000, "count": 1 },
{ "key": 3000000, "count": 1 }
]
}
}
}
Elasticsearch est
Plusieurs nœuds communiquent en uni/multicast Node master, data, http
...
distribué
Ils ont aussi pensé à la
supervision
Elasticsearch est
100 % Java
Mais aussi tout plein d'autres
Php, perl, scala, python, shell, ruby,.Net, Grails, play !, flume, clojure,
Puppet, chef,...
clients
Un gros paquet de
Plugin d'analyse, rivers, transport, Site, misc,
...
plugins
Extraction de texte avec
Apache tika
L'indexation facilitée avec les
Jdbc, Mongodb, couchdb, rabbitmq, activemq,Ldap, rss, twitter, wikipedia,
...
rivers
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"
}
}'
L'API
percolate
API percolatecurl -XPUT localhost:9200/_percolator/media/film_box_office -d '{
"query": {
"constant_score": {
"filter": {
"range": {
"nb_entrees": {
"from": "5000000", "include_lower": true
}
}
}
}
}
}'
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"]
}
Et aussi
Parent/childWarmers
SlowlogScriptBackup
...
Merci
?