2. Agenda
Elasticsearch ?
Lucene ?
Concepts de base :
- Near real time (NRT)
- Cluster
- Node ( Roles )
- Shards & Replicas
- Installation & Configuration
- Index , Type , Document
- Routing & Alias
- Plugins
Ressources
3. Elasticsearch
ElasticSearch est un moteur de recherche NoSQL très puissant basé sur Lucene
(un projet de Apache Software Foundation). ElasticSearch a été développé en
Java et est distribué de façon open source sous licence Apache 2.0. Il fournit un
moteur de recherche "full-text" disponible avec une API RESTFul et dont les
entités sont sauvegardées sous forme de documents JSON. Il a été conçu dans
l'optique d'être évolutif, avec un système de clustering, de loadbalancing et est
capable de reconstruire les données perdues dû à, par exemple, un node
défectueux.
4.
5.
6. Lucene
ElasticSearch est basé sur l’excellente
librairie Apache Lucene. Cette librairie existe
depuis de nombreuses années et est au
cœur de nombreux moteurs de recherche
open source (le plus connu étant Apache
SolR). Elle fournit toutes les classes Java
nécessaires à l’indexation de documents et à
l’exécution des requêtes de recherches.
ElasticSearch facilite l’utilisation de Lucene
en intégrant la librairie dans une application
Java modulaire, facilement configurable et
capable de fonctionner en cluster.
Zend_Search_Lucene
7. Concepts de base : Near real time (NRT)
Elasticsearch est une plate forme de recherche (NTR : Near réal time) temps quasi réel, ce que cela
signifie est qu'il y a une légère latence (normalement une seconde) à partir du moment où vous indexez
un document jusqu'à ce que le document devient consultable.
8. Concepts de base : Cluster
Un cluster ElasticSearch est composé de plusieurs nœuds
qui communiquent entre eux. Chaque nœud (node en
anglais) correspond à une instance d’ElasticSearch en
cours d’exécution, et peut être ajouté ou retiré du cluster
même lorsque ce dernier est en train de fonctionner.
10. Concepts de base : Node
Un nœud est un serveur qui fait partie du cluster stocke les
données et participe à l’indexation et à la recherche.
Par défaut un nœud jeu les 3 rôles à la fois.
11. Concepts de base : Shards & Replicas
Si on perd un nœud configuré en tant qu’un Shard primaire, une replica va le remplacer et il devient
primaire.
Au moment de l’indexation, un replica fait la même quantité de travail que le Shard primaire. De nouveaux
documents sont indexés sur le Shard primaire, puis sur touts les replicas. L'augmentation du nombre de
replica dans un cluster n’augmente pas la capacité de l’indexation.
17. Configuration (5)
JVM HEAP :
- Valeur par défaut : 1G
- Data nodes : = 64G/2 = 32G Heap
- 32 pour le HEAP
- Le reste pour Lucene
- une valeur > 32G pour le HEAP est sans effet vu la conf
de la JVM
22. Concepts de base : Index , Type , Document
(3)
Création d’un document :
curl -XPOST http://es.dev:9200/articles/article -d “{
"article_name":"TITANIUM DIOXIDE, ZINC OXIDE",
"article_text":"Trimalleolar fracture,closed",
"article_date":"2015-05-31T21:14:42Z"
}"
23. Routing
Routage : Permet de sélectionner un
PrimaryShard pour indexer le
document. Il est choisi en hachant la
valeur de l’ID du document ou de l’ID
du document parent pour s’assurer
que les documents parents et enfants
soient stockés sur le même
PrimaryShard.
24. Alias
Donner le même alias à deux(+) index permet de
faire des recherche multi index.
Changement d’architecture du cluster
ElasticSearch :
Ainsi, en utilisant systématiquement (bonne
pratique) des alias (nom logique) à la place des
noms d’indexes (nom physique) dans le code de
nos applications clientes des services d’
indexation, on pourra très facilement changer le
ou les indexes cibles de nos recherches.
25. Snapshotting Elasticsearch Indexes
ElasticSearch a sa fonction de sauvegarde propre connu comme Snapshotting. Il est un moyen très efficace
de sauvegarder tout ou une partie des indices dans un cluster.
ElasticSearch prend en charge plusieurs stratégies de sauvegarde out-of-the-box. Vous pouvez envoyer
des instantanés directement à un système de fichiers partagé ou d'un stockage en réseau, Amazon S3, ou
même le service de cloud Azure de Microsoft.