Introduction à ElasticSearch - RMLL · PDF fileRequêteGET-Endpoint_search...

download Introduction à ElasticSearch - RMLL · PDF fileRequêteGET-Endpoint_search Nousallonsrecherchertouslesemployésaveccetterequête: curl-XGET ’localhost:9200/megacorp/employee/_search?

If you can't read please download the document

Transcript of Introduction à ElasticSearch - RMLL · PDF fileRequêteGET-Endpoint_search...

  • 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