If you can't read please download the document
Upload
ngodieu
View
219
Download
2
Embed Size (px)
Citation preview
Introduction ElasticSearchPrsente par :Romain Pignolet
Lundi 7 Juillet 2014
Sommaire
1 Prsentation de Elasticsearch
2 Installation et exemples simples
3 API Rest
4 Comment fonctionne Elasticsearch ?
5 Cluster
6 Couplage avec MongoDB
Prsentation de Elasticsearch
Elasticsearch est un outil de recherche distribu en temps rel et un outil danalyse.
Il est utilis pour
I recherche full textI recherche structureI analyseI et les trois combins
Qui utilise Elasticsearch ?
Wikipedia (http://fr.wikipedia.org)
The Guardian (http://www.theguardian.com)
StackOverflow (http://stackoverflow.com/)
GitHub (https://github.com/)
Goldman Sachs (http://www.goldmansachs.com/)
Dpendances et fonctionnalits
Elasticsearch a besoin de :
Apache Lucene, un moteur de recherche full-text.
Java donc la JVM est requise.
Elasticsearch est:
un stockage de document temps rel distribu o tous les champs sont indxs etconsultable
un moteur de recherche distribu avec de lanalyse temps rel
capable de supporter la mont en charge avec une centaine de servers et despeta-octets de donnes structures ou non
Sommaire
1 Prsentation de Elasticsearch
2 Installation et exemples simples
3 API Rest
4 Comment fonctionne Elasticsearch ?
5 Cluster
6 Couplage avec MongoDB
Installation et lancement dElasticsearch
Simplement tlcharger larchive sur le site officiel(http://www.elasticsearch.org/overview/elkdownloads/) et dcompresser.
Pour le lancer, allez dans le rpertoire cr par la dcompression et lancer cettecommande :
./ bin/ elasticsearch
Installation et lancement dElasticsearchTestez le en lanant cette commande :
curl 'http :// localhost :9200/? pretty '
Vous devriez voir une rponse comme cela :{
"status" : 200,"name" : " Brother Nature"," version " : {
"number" : "1.1.0"," build_hash " : "2181
e113dea80b4a9e31e58e9686658a2d46e363 "," build_timestamp " : "2014 -03 -25 T15 :59:51Z"," build_snapshot " : false ," lucene_version " : "4.7"
}," tagline " : "You Know , for Search"
}
Communication avec Elasticsearch
Il y a deux manires de communiquer avec Elasticsearch:
Java API sur le port 9300
Restful API sur le port 9200
Dans cette prsentation nous ne parlerons que de lAPI Rest.
Comment sont stocks les documents ?
Orient Document
Le contenu de chaque Document est index
Un Document possde un Type (qui dfini son mapping)
Les Types sont contenus dans un Index
Quelques comparaisons avec une base de donne relationnelle :
Relational DB Base de donnes Tables Lignes ColonnesMongo DB Base de donnes Collections Documents Champs
Elasticsearch Index Types Documents Champs
Sommaire
1 Prsentation de Elasticsearch
2 Installation et exemples simples
3 API Rest
4 Comment fonctionne Elasticsearch ?
5 Cluster
6 Couplage avec MongoDB
API Rest - Type de requte
PUT : cration ou modification dun document
GET : rcupration dun document
HEAD : test si un document existe
DELETE : suppression dun document
Retourne
un code de retour HTTP (200, 404, etc.)
une rponse encod en JSON (sauf pour les requtes HEAD)
Requte PUT - Exemple
La commande suivante sauvegarde un document dans lindex "megacorp" avec commetype "employee" et avec lid "1" :
curl -XPUT 'localhost :9200/ megacorp / employee /1' -d '{
" first_name " : "John"," last_name " : "Smith","age" : 25,"about" : "I love to go rock climbing "," interests " : [ "sports", "music" ]
}'
Requte GET - Exemple
curl -XGET 'localhost :9200/ megacorp / employee /1? pretty '
{"_index" : " megacorp ","_type" : " employee ","_id" : "2"," _version " : 1,"found": true ," _source " : {
" first_name " : "John"," last_name " : "Smith","age" : 25,"about" : "I love to go rock climbing "," interests " : [ "sports", "music" ]
}}
Requte GET - Endpoint _searchNous allons rechercher tous les employs avec cette requte :
curl -XGET 'localhost :9200/ megacorp / employee / _search ?pretty '
Par dfaut, la recherche retourne 10 rsultats dans le tableau hits.{
"took" : 3," timed_out " : false ," _shards " : { ... },"hits" : {
"total" : 1," max_score " : 1.0,"hits" : [ { ... } ]
}}
Note : la recherche inclue lintgralit du document dans le champ _source.
Requte GET - Endpoint _search avec loptionquery et Query DSLVous pouvez utiliser loption de query (q) pour spcifier une simple demande comme :
curl -XGET 'localhost :9200/ megacorp / employee / _search ?q=last_name :Smith&pretty '
Cette requte demande tous les employs dont le last_name est gal "Smith".Ci-dessous la mme requte mais en utilisant le Query DSL de Elasticsearch :
curl -XGET 'localhost :9200/ megacorp / employee / _search ?pretty ' -d '
{"query" : {
"match" : {" last_name " : "smith"
}}
}'
Requte GET - Endpoint _search avec loptionquery et Query DSLUn autre exemple avec lutilisation dun filtre pour trouver tous les employs dont lenom de famille est "Smith" et ags de plus de 30 ans :
curl -XGET 'localhost :9200/ megacorp / employee / _search ?pretty ' -d '
{"query" : {
" filtered " : {"filter" : {
"range" : { "age" : { "gt" : 30 } }},"query" : {
"match" : { " last_name " : "smith" }}
}}
}'
Sommaire
1 Prsentation de Elasticsearch
2 Installation et exemples simples
3 API Rest
4 Comment fonctionne Elasticsearch ?
5 Cluster
6 Couplage avec MongoDB
Indexation (champ _all) et metadata
Toutes les donnes de chaque champ sont indexes
Quand un document est index :1 Rcupration de tous les champs2 Concatnation de ces champs dans une grosse chaine de caractres3 Sauvegarde cette chaine dans le champ spcial _all
_index : O le document est stock.
_type : Reprsente le mapping entre les champs et leurs types.
_id : Lidentificant unique du document.
Types and Mappings
Pour connatre le mapping pour un type vous pouvez faire une requte GET :curl -XGET 'localhost :9200/ megacorp / _mapping / employee ?
pretty '
{" megacorp " : {
" mappings " : {" employee " : {
" properties " : {"about" : { "type" : "string" },"age" : { "type" : "long" }," first_name " : { "type" : "string" }," interests " : { "type" : "string" }," last_name " : { "type" : "string" }
} } } }}
Sommaire
1 Prsentation de Elasticsearch
2 Installation et exemples simples
3 API Rest
4 Comment fonctionne Elasticsearch ?
5 Cluster
6 Couplage avec MongoDB
Definitions
DefinitionUn Noeux :
est une instance dElasticsearch en cours dexcution
est dans un cluster
communique avec les autres noeuds du cluster
Noeux 1 Noeux 2 Noeux 3
Figure: Cluster simple avec 3 noeuds vides
Definitions
DefinitionUn Noeud Matre :
est un noeud lu
gre les changements dans le cluster :
I creation ou suppression dun indexI ajout ou suppression dun noeud du cluster
Noeux 1 - Master Noeux 2 Noeux 3
Figure: Cluster simple avec 3 noeuds vides et 1 matre
DefinitionsDefinitionUn Shard:
est une "unit de travail" bas niveau
est une seule instance de Lucene
est un moteur de recherche complet
Nos documents sont stocks et indexs dans les Shards, mais nous ne nous adressonspas directement eux : nos applications sadressent un index.
S SNoeux 1 - Master
S SNoeux 2
S SNoeux 3
Figure: Cluster simple avec 3 noeuds vides, 1 matre et 6 shards
Definitions
DefinitionUn Shard primaire :
contient tous les documents dans un index
peut avoir dautres Shards primaires pour sparer les donnes (similaire au RAID 0)
Le nombre de Shard primaire pour un index est fix au moment de la cration de lindex.
S P1Node 1 - Master
S SNode 2
P0 SNode 3
Figure: Cluster simple avec des Shards primaires
Definitions
DefinitionUn Shard replica :
est une copie dun Shard primaire (similaire au RAID 1)
est utilis pour fournir des copies redondantes des donnes
est utilis pour rpondre au requte de lecture comme chercher un document
Le nombre de Shard replica peut tre chang nimporte quel moment.
R0 P1Node 1 - Master
R0 R1Node 2
P0 R1Node 3
Figure: Cluster simple avec des Shards primaires
Statut du cluster
Pour savoir le statut du cluster :curl -XGET 'http :// localhost :9200/ _cluster /health?pretty '
Le champ status donne une indication global sur le fonctionnement du cluster :
vert : Tous les Shards primaires et replicas sont actifs (Le cluster fonctionne et latolrance aux pannes est assure).
jaune : Tous les Shards primaires sont actifs, mais des Shards replicas ne sont pastous actifs (Le cluster fonctionne mais si un noeud tombe la tolrance aux pannesnest pas assure).
rouge : Des Shards primaires sont inactifs (Le cluster nest pas fonctionnel).
Gestion des ShardsCrons un index megacorp en spcifiant que nous voulons 3 Shards primaires et 1Shard replica (pour chaque primaire) :
curl -XPUT 'http :// localhost :9200/ megacorp ' -d '{
" settings " : {" number_of_shards " : 3," number_of_replicas " : 1
}}'
P0 P1 P2Node 1 - Master
Figure: 1 noeuds avec 3 shards primaires
Dans cet tat le statut du cluster est "j