ElasticSearch : Architecture et Développement

  • View
    1.048

  • Download
    2

Embed Size (px)

DESCRIPTION

Présentation d'Elasticsearch lors d'un ebizbar à ebiznext.

Text of ElasticSearch : Architecture et Développement

  • 1. ELASTICSEARCH Mohamed Hedi Abidi @mh_abidi David AZRIA @David_AZR
  • 2. INTRODUCTION ElasticSearch est un moteur de recherche Open Source (Apache 2). Il utilise la librairie Apache Lucene et indexe les donnes sous forme de documents. Sa mise en place est facile et rapide. Il possde des avantages indniables dont : recherche en quasi temps rel scalable, Haute disponibilit automatiquement sauvegard et rpliqu API REST La dernire version en date est la 1.0.1. http://www.elasticsearch.org/overview/elkdownloads/
  • 3. LES BASES (1) La distribution contient : bin : script de lancement elasticsearch.bat (windows) et elasticsearch (linux) config : contient les fichiers elasticsearch.yml et logging.yml data : rpertoire par dfaut des donnes indexes lib : contient les librairies logs : fichiers logs
  • 4. LES BASES (2) Dmarrage dElasticSearch : Variables denvironnements: EZ_HEAP_SIZE : JMV Heap Size EZ_JAVA_OPTS : options de la JVM $./bin/elasticsearch # mode daemon $./bin/elasticsearch -d
  • 5. LES BASES (3) Configuration: config/elasticsearch.yml cluster.name: mycluster http.port: 9200 transport.port: 9300 network.host: localhost discovery.zen.ping.multicast.enabled: false discovery.zen.ping.unicast.hosts: ["host1", "host2:port"]
  • 6. LES BASES (4) Fonctionnement cluster: Nud : Correspond une instance ElasticSearch Cluster : Il est compos dun plusieurs Node. Un nud matre est choisi, il sera remplac en cas de dfaillance. Par dfaut, un nud utilisera le multicast pour trouver un cluster du mme nom. Mais il est prfrable dutiliser lunicast dans des rseaux scuriss. Index : Espace logique de stockage de documents de mme type, dcoup sur un plusieurs Primary Shards et peut tre rpliqu sur zro ou plusieurs Secondary Shards. Shard : Correspond une instance Lucne. Primary Shard : Par dfaut, lindex est dcoup en 5 Shards Primary. Il nest pas possible de changer le nombre de Shards aprs sa cration. Secondary Shard : Il sagit des Shards rpliqus. Il peut en avoir zro plusieurs par Primary Shard. Routage : Permet de slectionner un Primary Shard pour indexer le document. Il est choisi en hachant la valeur de lID du document ou de lID du document parent pour sassurer que les documents parents et enfants soient stocks sur le mme Primary Shard.
  • 7. LES BASES (4) b2 b1 Node 1 (Master) a0 a1 b0 Node 2 b1 a1 Node 4 b0 b2 a0 Node 3 Rplication Cluster Shard primaire Shard rpliqu Instance ElasticSearch Instance ElasticSearch Instance ElasticSearch Instance ElasticSearch b3 b3b4 b4 a et b = index Document indexer Route
  • 8. API REST (1) EllasticSearch offre une API REST permettant deffectuer tous types dopration. Il supporte les mthodes HTTP (GET, PUT, POST et DELETE). Index : Nom de lindex Type : Nom du type du document Id : ID du document Action : Action effectuer curl -XPUT 'http://localhost:9200/[index]/[type]/[id]/[action]'
  • 9. API REST (2) : INDEXATION DE DOCUMENT Ajout ou modification dun document : Avec cration de lID automatiquement : curl -XPUT 'http://localhost:9200/biblio/livres/1' -d '{ "titre": "Shining", "auteur": "Stephen King", "genre": "Fantastique", "date_parution": "27/01/1977" }' curl -XPOST 'http://localhost:9200/biblio/livres' -d '{ "titre": "Shining", "auteur": "Stephen King", "genre": "Fantastique", "date_parution": "27/01/1977" }'
  • 10. API REST (3) : INDEXATION DE DOCUMENT Rponse : HTTP 200 : Document modifi HTTP 201 : Document cr HTTP 409 : Document existe dj dans le cas dune opration de cration 'http://localhost:9200/biblio/livres/1/_create' { "ok": "true", "_index": "biblio", "_type": "livres", "_id": "1", "_version": "1" }
  • 11. API REST (4) : TYPES DE DONNES string, integer, long, float, double, boolean, datetime, binary (base64) Array, Object geo_point, geo_shape, ip
  • 12. API REST (4) : MTA DATA DUN DOCUMENT Champ Activ par dfaut Description _id Id du document _type Type du document _source Oui Document original qui a t index _all Oui Indexes de toutes les valeurs des champs du document _timestamp Non Timestamp du document _ttl Non Temps dexpiration du document _size Non Taille du document original (_source)
  • 13. API REST (5) : GET Rponse : HTTP 200 : OK HTTP 404 : NOT FOUND { "_index": "biblio", "_type": "livres", "_id": "1", "_version": 1, "found" : true, "_source" : { "titre": "Shining", "auteur": "Stephen King", "genre": "Fantastique", "date_parution": "28/01/1977" } } curl -XGET 'http://localhost:9200/biblio/livres/1'
  • 14. API REST (6) : UPDATE Si le document existe, il est fusionn, curl -XPOST 'http://localhost:9200/biblio/livres/1/_update ' -d ' { "doc" : { "date_parution": "28/01/1977" }
  • 15. API REST (7) : VERSION Un numro de version est assign la cration dun document. Ce numro de version est incrment pour chaque opration de rindexassions, modifications ou de suppressions. Une opration de modification est valid si le numro de version de la requte correspond au numro de version index.
  • 16. API REST (8) : SEARCH Requte : curl -XGET 'http://localhost:9200/biblio/_search?q=Shining' curl -XPOST 'http://localhost:9200/index1/type1/_search' d { } curl -XPOST 'http://localhost:9200/index1/type1,type2/_search' d { } curl -XPOST 'http://localhost:9200/index1,index2/type1/_search' d { } curl -XPOST 'http://localhost:9200/_all/type1/_search' d { }
  • 17. API REST (8) : SEARCH Rponse : { "took":8, "timed_out":false, "_shards": { "total":5, "successful":5, "failed":0 }, "hits": { "total":1, "max_score":0.09289607, "hits":[ { "_index":ebiznext", "_type":"formation", "_id":"3", "_score":0.09289607, "_source" : { "titre": "Shining", "auteur": "Stephen King", "genre": "Fantastique", "date_parution": "28/01/1977" }}]}}
  • 18. ANALYSE DE TEXTE (1) Les deux requtes ci-dessous ne retourne aucun document. curl -XPUT 'http://localhost:9200/twitter/tweet/1' -d '{ "user": "david", "message": "C'est mon premier message de la journe !", "postDate": "2014-04-03T15:23:56", "priority": 2 , "rank": 10.2 }' curl -XGET 'http://localhost:9200/twitter/tweet/_search?q=est&pretty=true' curl -XGET 'http://localhost:9200/twitter/tweet/_search?q=journe&pretty=true'
  • 19. ANALYSE DE TEXTE (2) curl -XGET "http://localhost:9200/twitter/_mapping?pretty=true" { "twitter" : { "mappings" : { "tweet" : { "properties" : { "message" : { "type" : "string" }, "postDate" : { "type" : "date", "format" : "dateOptionalTime}, "priority" : {"type" : "long"}, "rank" : {"type" : "double }, "user" : {"type" : "string"} }}}}} Comme on peut le voir ci-dessous, ElasticSearch type automatiquement les champs. Mais le document na pas t trouv lorsque lon effectue une recherche car il utilise lAnalyseur standard qui ne colle pas notre besoin.
  • 20. ANALYSE DE TEXTE (3) curl -XGET http://localhost:9200/twitter/_analyze?pretty=true -d "C'est" { "tokens" : [ { "token" : "c'est", "start_offset" : 0, "end_offset" : 5, "type" : "", "position" : 1 } ] } curl -XGET "http://localhost:9200/twitter/_analyze?pretty=true" -d "journe" { "tokens" : [ { "token" : "journe", "start_offset" : 0, "end_offset" : 5, "type" : "", "position" : 1 } ] }