Vous êtes sur la page 1sur 11

Elastic

Search

Sommaire :

1.

Prsentation............................................................................................................. 3

2.

Concepts en quelques mots..................................................................................... 3

3.

4.

5.

6.

7.

2.1

Donnes et analyse en temps rel.....................................................................3

2.2

Libert de la structure des documents..............................................................3

2.3

Scurisation des donnes..................................................................................3

2.4

Modulable et extensible..................................................................................... 4

2.5

Open source, facile connecter, construit partir dApache Lucene ............4

2.6

Recherche en texte intgral............................................................................... 4

Un moteur de recherche.......................................................................................... 4
3.1

La recherche via les moyens habituels..............................................................5

3.2

La recherche via ElasticSearch..........................................................................5

Un moteur dindexation........................................................................................... 5
4.1

Injection des donnes : la River.........................................................................5

4.2

Analyse des donnes pour indexation...............................................................6

ElasticSearch : Aller plus loin dans la recherche......................................................7


5.1

Analyse des donnes : la puissance des Facet...................................................7

5.2

La recherche inverse : la Percolation...............................................................8

Architecture.............................................................................................................. 8
6.1

Rplication......................................................................................................... 8

6.2

Rallocation dynamique..................................................................................... 8

6.3

Indexation.......................................................................................................... 9

6.4

Recherche.......................................................................................................... 9

Quelques exemples dutilisation.............................................................................. 9

1.

Prsentation
http://blog.soat.fr/2013/07/elasticsearch/

ElasticSearch est un moteur de recherche libre (open source) darchitecture REST


(REpresentational State Transfer) bas sur Apache Lucene. Il permet lindexation de
donnes sous forme de documents, leur recherche et une analyse de ces donnes en
temps rel.

2.
2.1

Concepts en quelques mots


Donnes et analyse en temps rel

Dans le monde rel, les donnes peuvent tre intgres dans un systme
dinformation tout moment. La question importante du cot mtier tant : partir
de quand ces donnes peuvent-elles tre utilises ? Avec ElasticSearch, la rponse
est : immdiatement !
Orient document (au sens NoSQL du terme), toutes les donnes sont stockes sous
forme de documents JSON structurs. Tous les champs sont indexs par dfaut, et tous
les index peuvent tre utiliss dans une mme requte, pour retourner les rsultats
correspondant une recherche une vitesse impressionnante.

2.2

Libert de la structure des documents

Aucun format de document nest impos. Lors de lajout dun document JSON,
ElasticSearch va dtecter la structure de donnes, indexer ces donnes et les rendre
consultables. Ensuite, suivant les spcificits du domaine dutilisation, il sera
intressant de structurer fonctionnellement ces documents pour personnaliser la faon
dont ces donnes seront indexes. Aprs tout, un des slogans dElasticSearch est:
Your Data, your search

2.3

Scurisation des donnes

Il y a une persistance des donnes par opration, les modifications apportes un


document sont logues sur diffrents nuds du cluster pour minimiser les risques de

perte de donnes. De plus les clusters ElasticSearch sont rsilients, ils dtectent et
suppriment les nuds dfaillants et se rorganisent pour assurer que les donnes
restent scurises et accessibles. Une gestion des conflits peut aussi tre utilise (via
un contrle de version) pour sassurer que les donnes ne sont jamais perdues en
raison de changements contradictoires de plusieurs processus.

2.4

Modulable et extensible

Larchitecture distribue permet de commencer petit, et de grandir en fonction des


besoins. Il suffit pour cela de rajouter de nouveaux nuds, et de laisser le cluster se
rorganiser tout seul pour profiter des ressources matrielles supplmentaires. Un
cluster peut hberger plusieurs ensembles dindex qui peuvent tre interrogs de
manire indpendante ou en tant que groupe. Un systme dalias permet dajouter
des index la vole, tout en tant transparent pour les applications clientes.

2.5

Open source, facile connecter, construit partir dApache


Lucene

Apache Lucene est une librairie crite en JAVA, performante et riche en fonctionnalits.
Presque toute action sur ElasticSearch peut tre ralise en utilisant une API RESTful
basique utilisant JSON via HTTP. ElasticSearch peut tre tlcharg, utilis et modifi
gratuitement : il est disponible sous la licence Apache 2, lune des licences open
source les plus flexibles disponibles.

2.6

Recherche en texte intgral

ElasticSearch utilise Apache Lucene, le meilleur moteur de recherche de texte intgral


sur le march de lopen-source. Il dispose donc dun support multi langues, dun
puissant langage de requtes, dun support de golocalisation, de la proposition de
suggestion de saisie et dauto compltion et de snippets de recherche.

3.

Un moteur de recherche

La qualit dune recherche est value par le positionnement et la pertinence des


rsultats. Cependant, dautres facteurs entrent en compte dans une recherche. La
rapidit est un facteur dterminant pour traiter une vaste quantit dinformations. De
mme, pouvoir supporter des requtes simples ou complexes, des interrogations de
phrases, les rsultats de positionnement et de tri sont aussi importants quune
syntaxe facile prendre en main pour saisir ces requtes.

3.1

La recherche via les moyens habituels

En gnral, la recherche de donnes se fait via un formulaire de recherche dans lequel


lutilisateur aura accs diffrents champs lui permettant de cibler sa recherche. Ces
critres seront ensuite utiliss pour retrouver les donnes au sein dune base de
donnes relationnelle. Par exemple, dans le cas de la recherche dun contact dans un
rpertoire tlphonique, on aurait :

un champ nom
un champ prnom
un champ numro de tlphone
voir mme des champs tels que deuxime prnom, nom de jeune fille,

Ce qui conduirait, dans une requte relationnelle SQL, un code devant interroger
diffrents champs dune table, grer les champs renseigns moiti , grer les
champs vides, etc entranant partir dune certaine volumtrie une dgradation des
performances.
Mais surtout cela oblige lutilisateur connaitre exactement dans quel champ doit se
trouver telle donne : le contact Juju doit-il tre recherch dans le champ prnom,
nom, pseudonyme, ou autre ?

3.2

La recherche via ElasticSearch

De son ct, ElasticSearch propose une recherche en mode moteur de recherche o


il nest dsormais plus besoin que dune unique zone de saisie cherchant tous les
lments correspondant la recherche. Il nest donc plus ncessaire de savoir
exactement larchitecture interne des enregistrements, il suffit simplement de saisir
les informations trouver.
Qui plus est, ceci se fait en temps rel, car ds quun document est index, il est
disponible la recherche.

4.

Un moteur dindexation

Afin dassurer une recherche facile et efficace, il existe une tape primordiale :
lindexation. Jusqu lexplosion dinternet, la classification dcimale de Dewey (cf.
Ressources) tait trs efficace pour catgoriser des objets dans une bibliothque.
Suite lexplosion du nombre de donnes collectes, il a fallu trouver dautres moyens
plus rapides et dynamiques pour rechercher des informations.
Cest pourquoi, au cur des moteurs de recherche se trouve un systme dindexation
automatique qui permet, en ne traitant quune seule fois les donnes brutes, de leur
donner de multiples liens efficients. Il nest alors plus besoin de parcourir chaque
document lors de la recherche dun terme spcifique, il suffit daller interroger la table
dindex. Ce concept correspond en quelque sorte lindex terminologique
gnralement prsent la fin dune encyclopdie et renvoyant aux diffrents articles
de celle-ci.

4.1

Injection des donnes : la River

Linjection de donnes dans ElasticSearch se fait laide


dune river (rivire). Une river est un service
pluggable permettant de dverser (do son nom ;o)) en
continu dans ElasticSearch des documents qui seront ensuite
indexs dans le cluster. Une river est compose dun nom unique
et dun type ( noter que plusieurs rivers du mme type, mais de
noms diffrents, peuvent tre lances au sein dun mme
cluster). Les rivers sont des singletons dans le cluster, elles sont
alloues automatiquement un nud et lances ; si ce dit-nud
tombe, la river est automatiquement raffecte un autre nud.

4.2

Analyse des donnes pour indexation

Lors du dversement des documents dans ElasticSearch, ils sont analyss par un
Analyzer. Celui-ci est compos de 2 lments principaux : le tokenizer et le filtre,
fonctionnant de pair. Le Tokenizer se charge de dcouper les diffrents lments dune
chane en tokens. Le Filtre, quant lui, se charge de supprimer ou de transformer ces
tokens. En fonction des besoins, ceux-ci pourront se trouver cumuls afin doffrir la
meilleur gestion possible des donnes de chaque application cliente et de ses
utilisateurs. En voici quelques exemples :

whitespace tokenizer : trs basique, il va sparer les tokens chaque espace


trouv

standard tokenizer : ne va prendre en compte ni les articles (pour viter de


polluer les index avec des valeurs non pertinentes), ni la ponctuation, ni la
casse (ainsi, que lutilisateur recherche DOG ou dog, il obtiendra les mmes
rsultats)

asciifolding filter

stemmer filter (french) : permet de regrouper les termes franais ayant une
mme racine sur un mme index (ainsi, lutilisateur na pas besoin de rflchir
aux notions de genre ou de nombre dans ses recherches)

phonetic (plugin) : gestion phontique permettant, par exemple, de ne pas


tenir compte des erreurs dorthographe lors dune recherche

5.

ElasticSearch : Aller plus loin dans la


recherche

Rechercher des donnes dans des documents parfaitement indexs, cest bien ! Mais
maintenant il serait bon de pouvoir facilement jouer avec ces donnes pour les faire
parler

5.1

Analyse des donnes : la puissance des Facet

Le principal objectif dun moteur de recherche full-text est de retourner un nombre


limit de documents rpondant une requte. Les facettes (Facet) fournissent des
agrgats sur les rsultats dune recherche. A partir de ces facettes, lutilisateur peut
alors affiner sa recherche en ayant un visuel sur les rsultats qui seront ramens,
plutt que de le faire laveugle
Les diffrentes facettes disponibles sont :

Terms : permet de retourner les termes les plus frquents


Range : permet de spcifier des intervalles de donnes
Geo Distance : permet de fournir les donnes correspondant un intervalle de
distance gographique
Histogram : fonctionne avec des donnes numriques par la construction dun
histogramme travers les intervalles des valeurs du champ

Date Histogram : une histogram facet spcifique fonctionnant sur des champs
date
Filter : permet de retourner un nombre de hits correspondant un filtre
Query : permet de retourner un nombre de hits correspondant une requte
Statistical : permet de calculer des donnes statistiques sur un champ
numrique. Les donnes statistiques incluent le dcompte, le total, la somme
des carrs, la moyenne, le minimum, le maximum, la variance et lcart type
Terms Stats : combine la fois les facettes term et statistical.

5.2

La recherche inverse : la Percolation

En gnral, dans un moteur de recherche, lutilisateur lance une recherche,


obtient ses rsultats, et si de nouvelles donnes pertinentes arrivent entretemps dans le systme, il lui faut relancer la recherche pour voir les-dites
donnes. Avec ElasticSearch, il nest plus besoin lutilisateur de senqurir de
larrive de ces nouvelles donnes, elles lui sont directement remontes sans
action de sa part.
Afin de raliser ce miracle, on a simplement un listener (ceux du monde Java
ne seront pas perdus) sur le moteur dindexation : le Percolateur ! A chaque
nouvel ajout de document, le percolateur vrifie si celui-ci correspond aux
critres de la recherche enregistre, et renvoie au besoin les donnes au moteur
de recherche pour que soient mis jours les rsultats et facettes.

6.

Architecture

Il est maintenant temps daller faire un petit tour sous le capot pour comprendre
comment ElasticSearch est construit. Et avant tout, pour viter dtre perdu, quelques
termes lexicaux :

Nud (node) : une instance dElasticSearch


Cluster : un ensemble de nuds
Partition (shard) : une instance de Lucne permettant de dcouper un index en
plusieurs parties pour y distribuer les documents
Rplication (replica) : recopie dun shard en une ou plusieurs copies
dans lensemble du cluster

6.1

Rplication

Afin dassurer une prennit des donnes, partir du moment o il existe 2 nuds,
lun sert de rplication lautre. Ainsi, si lun tombe, les donnes ne sont pas perdues.
Il ny a pas de limite au nombre de rplica. Plus il y a dutilisateurs, plus il peut tre
intressant davoir des rplicas (recherche distribue).

6.2

Rallocation dynamique

Lors du rajout de nuds, les shards sont rallous dynamiquement. Un bon tuning
consistant trouver le bon quilibre entre le nombre de nuds, shards et rplicas
pour satisfaire au mieux aux besoins fonctionnels.

6.3

Indexation

Lors de lindexation dun document, celui-ci est envoy au nud principal, puis est
automatiquement allou un shard et rpliqu.

6.4

Recherche

Lors dune recherche, on va interroger le nud principal qui va renvoyer la recherche


aux autres nuds de faon distribue (recherche sur les nuds originaux ou sur leur
rplica, en fonction de la charge), et les documents correspondants seront renvoys
au client.

7.

Quelques exemples dutilisation

Voici prsent quelques exemples dutilisation dElasticSearch, afin de pouvoir mieux


se rendre compte en pratique des diffrents points thoriques abords prcdemment.

8.
8.1

Gestion des nodes Master


Les master nodes et le split-brain

Le master node est le noeud du cluster qui est charg de lallocation des shards
parmi les diffrents noeuds. Il est donc important qu un instant T, il y ait un et un seul
master node.
Imaginons quune interruption rseau empche temporairement les noeuds de votre
cluster de communiquer entre eux.
Certains noeuds ne pouvant plus parler au master node vont dclencher
spontanment llection dun nouveau master.
Le rsultat de cette lection sera ce quon appelle un split-brain : le cluster se trouve
spar en deux avec deux master node diffrents (et donc une dsynchronisation
des indexations).
Il sagit bien sr dune situation viter absolument. Heureusement, il existe une
solution : modifier le paramtre discovery.zen.minimum_master_nodes, dfini de
la manire suivante :
The discovery.zen.minimum_master_nodes allows to control the minimum number of
master eligible nodes a node should see in order to operate within the cluster.
La solution au split-brain consiste donc
dfinirdiscovery.zen.minimum_master_nodes avec le nombre de noeuds du cluster / 2 +
1. Sil y a 8 noeuds dans votre cluster, vous renseignerez alors cette valeur 5.
Ainsi, 5 noeuds votants sont ncessaires llection dun nouveau master. 2 machines
ne peuvent donc pas obtenir suffisamment de votes pour tre lues en simultan.

8.2

MasterNotDiscoveredException

Voil, tout va pour le mieux dans le meilleur des mondes, votre cluster fonctionne et
vous souhaitez dconnecter une partie de vos noeuds.
Imaginons que nous ayons 8 noeuds sur notre cluster et que nous souhaitions passer
sur 4 noeuds. Le paramtre discovery.zen.minimum_master_nodes de dpart vaut 5.

Il faut alors modifier nouveau le paramtre discovery.zen.minimum_master_nodes


pour prendre en compte le nouveau nombre de noeuds ncessaires llection (4 / 2
+ 1, donc 3). Cette modification peut seffectuer avec curl via lAPI settings :
curl -XPUT localhost:9200/_cluster/settings -d '{
"persistent" : {
"discovery.zen.minimum_master_nodes" : 3
}
}'

Voil. Si on stoppe maintenant nos noeuds, le cluster continuera de tourner, nest-ce


pas ?
Oui seulement si on ne coupe pas le master.
Si jamais le master node fait partie des noeuds arrts, les requtes que vous
effectuerez retourneront MasterNotDiscoveredException :
curl -XGET "https://localhost:9200/_cluster/health?pretty=true"
{
"error" : "MasterNotDiscoveredException[waited for [30s]]",
"status" : 503
}

Mais que se passe-t-il ?


Rsumons :

Notre cluster comprenait 8 noeuds


Le discovery.zen.minimum_master_nodes vaut 5
Nous souhaitons passer 4 noeuds
Nous avons modifi le discovery.zen.minimum_master_nodes 3 (4 / 2 + 1)
On stoppe des noeuds quelconques pour se ramener 4 noeuds => pas de

soucis
Si le master est parmi les noeuds stopps => MasterNotDiscoveredException

Tout se passe comme si le cluster nappliquait plus le bon quota, puisquun nouveau
master na pas t lu.
Voici mon analyse du problme :

La modification dynamique du paramtre


discovery.zen.minimum_master_nodes via lAPI /_cluster/settings est
prise en compte par le master. Cest lui qui est charg de redispatcher ce

paramtre entre les noeuds


Si le master est stopp, il ne peut plus servir de rfrence pour les paramtres
dynamiques /_cluster/settings , les noeuds utilisent donc le paramtrage par
dfaut (issu du elasticsearch.yml)

Bref, dans la mesure du possible, il est prfrable de passer par le elasticsearch.yml


pour modifier le discovery.zen.minimum_master_nodes .