Récapitulation et examen final
Seize modules pour passer d'un LIKE '%mot%' à un moteur de recherche et de recommandation complet : Veille indexe 200 853 articles, les retrouve par pertinence et malgré les fautes, les analyse dans Kibana, relie 23 082 auteurs à 41 catégories dans Neo4j et recommande quoi lire ensuite depuis un script Python. Voici le cours condensé, les fils qui le traversent et la liste de contrôle d'un moteur prêt à être montré à un client.
Le cours d'un coup d'œil
| Module | L'essentiel à retenir |
|---|---|
| 1. Kit Veille | doctor avant up ; up attend que chaque service réponde ; reset rend un état neuf. Kibana sur 5601, Neo4j Browser sur 7474, tout en veille2026. |
| 2. Concepts clés | Un index est découpé en shards, chaque shard peut avoir des répliques ; un nœud unique est green avec zéro réplique ; _cat et _cluster/health se lisent en premier. |
3. Documents et _bulk | PUT crée ou remplace, POST _update fusionne, _seq_no/_primary_term protègent des écrasements ; _bulk = NDJSON, deux lignes par document, lots de 1 000 à 5 000. |
| 4. Mapping | text est analysé pour la recherche, keyword est exact pour filtrer, trier et agréger ; le mapping dynamique devine, le mapping explicite décide ; changer un type = _reindex. |
| 5. Query DSL | match pour le texte, term pour l'exact, range pour les dates ; bool combine must, should, filter, must_not ; le contexte filtre ne calcule pas de score et se met en cache. |
| 6. Agrégations | size: 0 ; terms, date_histogram avec calendar_interval, cardinality, stats, top_hits ; les sous-agrégations répondent aux questions croisées (catégories par année). |
| 7. Kibana | Data View avec champ temporel date et plage 2012-2018 ; Discover + KQL pour explorer ; Lens pour visualiser ; un tableau de bord s'exporte en .ndjson. |
| 8. Recherche avancée | completion sur headline.suggest (max_input_length 120), fuzziness: AUTO, phrase suggester ; ES|QL enchaîne FROM, WHERE, STATS … BY, SORT ; les alias permettent de réindexer sans interruption. |
| 9. OpenSearch | Fork d'Elasticsearch 7.10 sous Apache 2.0 depuis 2021 ; mêmes requêtes de base, sécurité et plugins différents ; choisir selon licence, hébergeur et fonctions, pas selon la mode. |
| 10. Neo4j et Cypher | Nœuds, étiquettes, relations orientées et typées, propriétés ; MATCH (a)-[:REL]->(b) lit le graphe comme on le dessine ; MERGE plutôt que CREATE pour rejouer sans doublon. |
| 11. Modéliser et charger | Ce qu'on filtre ou traverse devient nœud, ce qu'on affiche reste propriété ; contraintes d'unicité d'abord ; LOAD CSV + CALL { } IN TRANSACTIONS (avec :auto dans Browser). |
| 12. Cypher avancé | Chemins *1..3, shortestPath, OPTIONAL MATCH, WITH/collect/UNWIND, CASE ; la recommandation par voisinage tient en une requête ; PROFILE révèle les index manquants et les produits cartésiens. |
| 13. Python | ./lab.sh python exécute vos scripts avec les clients officiels ; Elasticsearch(url, basic_auth) et GraphDatabase.driver(uri, auth) ; veille.py combine recherche et recommandation. |
| 14. Sécurité et exploitation | Utilisateurs et rôles _security, clés d'API, snapshots fs avec path.repo ; Neo4j Community gère des utilisateurs mais pas de rôles fins ; _cat/nodes et docker stats en surveillance. |
| 15. Diagnostic | Douze pannes, une méthode : statut, journaux, isoler, réinitialiser, demander de l'aide avec les bonnes informations. |
| 16. Projet Veille | Mapping justifié, cinq requêtes par persona, tableau de bord à quatre visualisations, graphe vérifié, cinq requêtes de recommandation, script combiné, démonstration en cinq minutes. |
Les fils qui traversent le cours
Le mapping décide de tout ce qui vient après. Une catégorie en text ne s'agrège pas proprement, un titre en keyword ne se cherche pas, une date en chaîne ne se trie pas. Le module 4 pose la règle, les modules 5 à 8 en vivent : chaque requête qui « ne trouve rien » ou chaque agrégation qui « renvoie des morceaux de mots » se corrige dans le mapping, donc par un _reindex, jamais en tordant la requête.
Chercher et filtrer sont deux opérations différentes. Le contexte requête calcule un score et coûte cher ; le contexte filtre répond oui ou non et se met en cache. Mettre category et date dans filter et garder headline dans must n'est pas une coquetterie : c'est ce qui rend le moteur de Veille rapide sous charge. Kibana applique la même séparation entre la barre KQL et les filtres épinglés.
Le graphe répond aux questions que les jointures rendent illisibles. Qui écrit dans les mêmes catégories que Lee Moran ? Quels articles récents des auteurs de ce résultat ? Quelle chaîne relie deux auteurs ? En SQL, chaque niveau de profondeur ajoute une jointure ; en Cypher, *1..3 suffit. Elasticsearch trouve le point d'entrée, Neo4j explore autour : le module 13 les combine dans un même script, le module 16 en fait un produit.
Une panne se lit avant de se réparer. Code de sortie 137, cluster_block_exception, « Couldn't load the external resource », « can only be executed in an implicit transaction » : chaque message du module 15 correspond à une cause unique et à une commande du kit. Le réflexe à acquérir n'est pas de relancer au hasard mais de lire ./lab.sh status puis ./lab.sh logs <service>.
Liste de contrôle d'un moteur Veille prêt à démontrer
./lab.sh doctortout vert,./lab.sh statusaffiche trois conteneurshealthy.GET news/_countrenvoie 200 853 etGET news/_mappingmontrecategoryenkeyword,headlineentextavecrawetsuggest,dateendate.- Une requête
boolpar persona, avecheadlinedansmustetcategory+datedansfilter, chacune commentée (ce qu'elle cherche, pourquoi ce score). - Une agrégation
termssurcategoryet unedate_histogrampar mois, dont les chiffres correspondent à ceux du tableau de bord Kibana. - Une Data View
newsavec le champ temporeldate, un tableau de bord à quatre visualisations exporté en.ndjsondans le dossier du projet. - Une requête d'autocomplétion sur
headline.suggestet une recherche tolérante aux fautes avecfuzziness: AUTO. CALL apoc.meta.stats()renvoie 200 853Article, 41Categorie, 23 082Auteur;SHOW CONSTRAINTSliste les trois contraintes d'unicité.- Cinq requêtes Cypher de recommandation, dont une par voisinage d'auteurs et une par chemin, chacune passée au
PROFILEsans produit cartésien. ./lab.sh python veille.py <sujet>renvoie des résultats et des recommandations en moins de cinq secondes, avec un filtre de catégorie et de période.- Un utilisateur Elasticsearch en lecture seule pour l'API de Karim et un snapshot de l'index
newsrestaurable. - Le tableau des douze pannes relu, et la certitude de savoir quoi faire devant chacune.
L'examen final
L'examen comporte 40 questions couvrant les seize modules : kit et concepts, documents et _bulk, mapping et analyseurs, Query DSL et pertinence, agrégations, Kibana, autocomplétion et ES|QL, OpenSearch, Cypher et modélisation, LOAD CSV, Cypher avancé, Python, sécurité et sauvegardes, diagnostic, projet.
Plusieurs questions présentent des situations à diagnostiquer : quel type de champ choisir pour une catégorie qu'on veut agréger ; pourquoi une requête match sur un keyword ne renvoie rien ; que signifie un cluster yellow sur un nœud unique ; comment lire un cluster_block_exception ; pourquoi LOAD CSV ne trouve pas news.csv ; quelle différence entre MERGE et CREATE quand on rejoue un script ; quel moteur choisir pour telle question métier. C'est le jugement qui est évalué — nommer la cause, choisir la requête ou la commande adaptée — pas la récitation d'un vocabulaire.
En cas de réussite, votre attestation d'achèvement est délivrée immédiatement ; son numéro est vérifiable par tout tiers sur la plateforme.
Reprenez la liste de contrôle ci-dessus. Pour chaque ligne, demandez-vous « saurais-je écrire la requête ou la commande qui la vérifie ? ». Si vous savez rédiger un bool avec must et filter, une date_histogram, une contrainte d'unicité suivie d'un LOAD CSV par lots et une requête de recommandation par voisinage, vous êtes prêt. Bonne chance !
Examen final
Prêt à valider ce cours ?
40 questions tirées au hasard dans la banque du cours · seuil de réussite 70 % · certificat PDF vérifiable délivré immédiatement en cas de réussite.
Commencer l'examenConnexion à votre compte InSkillML et abonnement actif requis. Vous pouvez aussi lancer l'examen depuis Mes cours.