Questions d'entretien Elasticsearch
1. Qu'est-ce qu'Elasticsearch et quels sont ses cas d'usage ?
Elasticsearch est un moteur de recherche et d'analyse distribue, base sur Apache Lucene. Il stocke les donnees sous forme de documents JSON indexes pour une recherche rapide. Cas d'usage : recherche full-text (site e-commerce, documentation), analyse de logs (avec la stack ELK : Elasticsearch, Logstash, Kibana), monitoring d'applications (APM), recherche geospatiale, et analytics temps reel. Il excelle dans la recherche textuelle complexe et l'agregation de donnees.
2. Expliquez les concepts d'index, document et mapping.
Un document est l'unite de donnees dans Elasticsearch (objet JSON). Un index est une collection de documents (equivalent d'une table SQL). Le mapping definit la structure des documents dans un index (types de champs : text, keyword, integer, date, geo_point, etc.). Le mapping peut etre dynamique (Elasticsearch infere les types) ou explicite (vous le definissez). Depuis Elasticsearch 8, le concept de "type" a ete supprime (un seul type par index).
3. Quelle est la difference entre les champs "text" et "keyword" ?
Un champ text est analyse : le texte est tokenise (decoupe en mots), normalise (minuscules, stemming) et stocke dans un index inverse pour la recherche full-text. Un champ keyword est stocke tel quel, sans analyse, pour les correspondances exactes, le tri, les agregations et les filtres. Exemple : pour un champ "email", utilisez keyword (match exact). Pour un champ "description", utilisez text (recherche de mots). Beaucoup de champs utilisent un mapping multi-field (text + keyword).
4. Expliquez la difference entre query et filter dans Elasticsearch.
Une query calcule un score de pertinence (relevance) pour chaque document : "a quel point ce document correspond-il a la recherche ?". Un filter est un oui/non binaire : "ce document correspond-il ou non ?". Les filtres sont plus rapides car ils ne calculent pas de score et sont mis en cache automatiquement. Utilisez des queries pour la recherche textuelle et des filtres pour les criteres exacts (statut, date, categorie). Combinez-les dans un bool query (must, should, filter, must_not).
5. Comment fonctionne la recherche full-text dans Elasticsearch ?
Le processus : lors de l'indexation, le texte passe par un analyzer qui le decompose en tokens (tokenizer) et les transforme (filters : lowercase, stemming, stop words). Les tokens sont stockes dans un index inverse (map token -> documents). Lors de la recherche, la requete passe par le meme analyzer, et Elasticsearch trouve les documents correspondants via l'index inverse, calcule un score de pertinence (BM25 par defaut), et retourne les resultats tries par score.
6. Qu'est-ce qu'un cluster Elasticsearch et comment est-il distribue ?
Un cluster est un ensemble de noeuds (instances Elasticsearch). Les donnees d'un index sont divisees en shards (partitions) distribues sur les noeuds. Chaque shard est une instance Lucene. Les replicas sont des copies des shards primaires sur d'autres noeuds pour la haute disponibilite et le load balancing des lectures. Roles des noeuds : master (gestion du cluster), data (stockage), ingest (transformation), coordinating (routage des requetes).
7. Comment optimiser les performances d'Elasticsearch ?
Indexation : utilisez le bulk API pour les insertions massives, desactivez le refresh pendant les imports (refresh_interval: -1), optimisez le mapping (desactivez le stockage des champs inutilises). Recherche : utilisez des filtres plutot que des queries quand possible (cache), limitez le nombre de shards par index (recommandation : 20-40 Go par shard), utilisez routing pour diriger les requetes vers le bon shard. Infrastructure : dimensionnez la JVM heap a 50% de la RAM (max 32 Go), reservez l'autre moitie pour le cache filesystem de Lucene.
8. Expliquez les agregations dans Elasticsearch.
Les agregations analysent et resument les donnees. Types : Bucket (regroupe les documents : terms, date_histogram, range, filters), Metric (calcule des metriques : avg, sum, min, max, cardinality, percentiles), Pipeline (traite les resultats d'autres agregations : moving_avg, derivative). Les agregations peuvent etre imbriquees (une metrique dans chaque bucket). Elles sont la base des dashboards dans Kibana et remplacent les GROUP BY de SQL.
9. Comment gerer le cycle de vie des index ?
Index Lifecycle Management (ILM) automatise la gestion des index dans le temps. Phases : hot (index actif, ecritures et lectures), warm (lectures uniquement, moins de replicas), cold (lectures rares, stockage moins cher), frozen (archive, recherche a la demande), delete (suppression). Utilisez des index templates pour configurer automatiquement les nouveaux index, et des data streams pour les donnees temporelles (logs, metriques).
10. Comment securiser un cluster Elasticsearch ?
Activez Elasticsearch Security (inclus depuis la version 8) : authentification (utilisateurs natifs, LDAP, SAML, OIDC), autorisation avec des roles granulaires (acces par index, par champ, par document), chiffrement TLS entre les noeuds et pour les clients, audit logging pour tracer les acces. Configurez un reverse proxy (Nginx) devant Elasticsearch, ne l'exposez jamais directement sur Internet, et utilisez des API keys plutot que des credentials dans les applications.