﻿﻿{"id":2589,"date":"2026-03-23T10:52:30","date_gmt":"2026-03-23T09:52:30","guid":{"rendered":"https:\/\/elearningsamba.com\/index.php\/qmd-un-moteur-de-recherche-local-pour-vos-notes-markdown\/"},"modified":"2026-03-23T10:52:30","modified_gmt":"2026-03-23T09:52:30","slug":"qmd-un-moteur-de-recherche-local-pour-vos-notes-markdown","status":"publish","type":"page","link":"https:\/\/elearningsamba.com\/index.php\/qmd-un-moteur-de-recherche-local-pour-vos-notes-markdown\/","title":{"rendered":"QMD &#8211; Un moteur de recherche local pour vos notes Markdown"},"content":{"rendered":"<p>Si vous \u00eates comme votre blogueur pr\u00e9f\u00e9r\u00e9 (hi hi) et que vous avez des tonnes de fichiers markdown qui tra\u00eenent dans des dossiers obscurs depuis des ann\u00e9es, voici l&#8217;outil parfait pour rendre tout ceci \u00e0 nouveau utilisable dans la vraie vie.<\/p>\n<p>En tout cas, c&#8217;est plus pratique qu&#8217;un grep !<\/p>\n<p>\u00c7a s&#8217;appelle <strong>QMD<\/strong> (Quick Markdown Search) et c&#8217;est un outil en ligne de commande dispo sur GitHub qui va indexer tout votre bazar de notes pour les rendre consultables rapidement. QMD combine la recherche plein texte classique (BM25) avec de la recherche vectorielle s\u00e9mantique et du re-ranking via LLM, ce qui veut dire que c&#8217;est ultra puissant. On est un peu sur le m\u00eame principe qu&#8217;un RAG en fait puisque l&#8217;IA locale est utilis\u00e9e pour comprendre le sens de votre requ\u00eate et pas juste chercher des cha\u00eenes de caract\u00e8res b\u00eates et m\u00e9chantes. J&#8217;utilise depuis un petit moment maintenant un syst\u00e8me similaire avec <strong><br \/>\n<a href=\"https:\/\/korben.info\/leann-rag.html\">LEANN<\/a><br \/>\n<\/strong> pour indexer tous les articles de korben.info et retrouver des connexions entre mes contenus, et je peux vous dire que quand on go\u00fbte \u00e0 la recherche s\u00e9mantique, le bon vieux grep a un go\u00fbt de carton.<\/p>\n<p>L&#8217;outil est m\u00eame capable de faire de l&#8217;expansion de requ\u00eate (Query Expansion) pour deviner ce que vous cherchez vraiment.<\/p>\n<p>Techniquement, \u00e7a tourne avec<br \/>\n<a href=\"https:\/\/korben.info\/bun-sh-nodejs.html\">bun<\/a><br \/>\nou npm et \u00e7a s&#8217;appuie sur<br \/>\n<a href=\"https:\/\/github.com\/withcatai\/node-llama-cpp\">node-llama-cpp<\/a><br \/>\npour faire tourner des mod\u00e8les GGUF directement sur votre machine. Tout reste chez vous donc niveau vie priv\u00e9e c&#8217;est nickel. C&#8217;est un peu la m\u00eame philosophie que des outils comme<br \/>\n<a href=\"https:\/\/korben.info\/khoj-assistant-ia-prive-productivite.html\">Khoj<\/a><br \/>\nou<br \/>\n<a href=\"https:\/\/korben.info\/blinko-notes-ia-rag-self-hosted.html\">Blinko<\/a><br \/>\ndont je vous ai d\u00e9j\u00e0 parl\u00e9, mais en version CLI pour le terminal.<\/p>\n<p>L&#8217;installation est hyper facile si vous avez d\u00e9j\u00e0 Bun, mais pr\u00e9voyez quand m\u00eame un peu de place (environ 3 Go) pour les mod\u00e8les qui iront s&#8217;installer au chaud dans ~\/.cache\/qmd\/models\/ et installez sqlite si vous \u00eates sur macOS :<\/p>\n<div class=\"highlight\">\n<pre class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">brew install sqlite # Pour macOS\n<\/span><\/span><span class=\"line\"><span class=\"cl\">npm install -g @tobilu\/qmd\n<\/span><\/span><\/code><\/pre>\n<p>Ensuite, y&#8217;a plus qu&#8217;\u00e0 vous cr\u00e9er vos collections en pointant vers vos dossiers, et en lan\u00e7ant l&#8217;indexation comme ceci :<\/p>\n<div class=\"highlight\">\n<pre class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">qmd collection add ~\/mes-notes --name notes\n<\/span><\/span><span class=\"line\"><span class=\"cl\">qmd embed # L'\u00e9tape indispensable pour g\u00e9n\u00e9rer les vecteurs\n<\/span><\/span><\/code><\/pre>\n<p>Et hop, vous pouvez lancer des recherches !!<\/p>\n<p>C&#8217;est magique ! Perso, j&#8217;utilise presque tout le temps la commande &#8220;qmd query&#8221; plut\u00f4t que &#8220;search&#8221; parce que le mode hybride est bien plus puissant je trouve. Vous avez aussi &#8220;qmd vsearch&#8221; si vous voulez une recherche purement s\u00e9mantique, genre quand vous cherchez un concept sans conna\u00eetre les mots exacts utilis\u00e9s dans vos notes. En fait, quand vous tapez une requ\u00eate, QMD va chercher via les mots-cl\u00e9s, via les vecteurs (le sens), puis fusionner tout \u00e7a avec un algo RRF, et refaire passer un petit coup de LLM par dessus pour trier les r\u00e9sultats par pertinence.<\/p>\n<p>Apr\u00e8s vous l&#8217;aurez capt\u00e9 en me lisant, si vous avez une machine un peu ancienne sans GPU costaud, l&#8217;\u00e9tape de re-ranking risque de prendre un peu de temps&#8230; mais c&#8217;est le prix de la qualit\u00e9 et de la s\u00e9curit\u00e9 ^^.<\/p>\n<p>D&#8217;ailleurs, si vous utilisez Claude Desktop ou Claude Code, sachez que QMD int\u00e8gre \u00e9galement un<br \/>\n<a href=\"https:\/\/korben.info\/onemcp-serveur-mcp-anthropic-facile.html\">serveur MCP<\/a><br \/>\n(Model Context Protocol). Du coup, vous pouvez connecter QMD \u00e0 Claude et lui permettre d&#8217;aller fouiller dans vos notes pour r\u00e9pondre \u00e0 vos questions. Et bonne nouvelle, QMD propose maintenant un mode HTTP daemon (<code>qmd mcp --http --daemon<\/code>) qui garde les mod\u00e8les charg\u00e9s en m\u00e9moire, ce qui \u00e9vite de les recharger \u00e0 chaque requ\u00eate. Attention par contre, dans ce cas pr\u00e9cis, les extraits de vos notes seront envoy\u00e9s \u00e0 Claude (donc dans le cloud).<\/p>\n<p>QMD est aussi dispo en tant que librairie Node.js (<code>npm install @tobilu\/qmd<\/code>) pour ceux qui voudraient l&#8217;int\u00e9grer dans leurs propres scripts ou workflows d&#8217;automatisation. Avec les options <code>--json<\/code> et <code>--files<\/code> en sortie, \u00e7a se branche facilement dans un pipeline.<\/p>\n<p>Perso je trouve \u00e7a g\u00e9nial parce que \u00e7a comble le foss\u00e9 entre le simple fichier texte et les usines \u00e0 gaz de gestion de connaissances. Par exemple, si vous \u00eates un grand adepte de<br \/>\n<a href=\"https:\/\/korben.info\/silverbullet-wiki-markdown-lua-scripting.html\">Silverbullet<\/a><br \/>\nou d&#8217;<br \/>\n<a href=\"https:\/\/korben.info\/obsidian-cli-piloter-notes-terminal.html\">Obsidian<\/a><br \/>\n, c&#8217;est le top pour l&#8217;indexation globale de vos \u00e9crits.<\/p>\n<p>Voil\u00e0, si vous voulez un moteur de recherche personnel qui en a sous le capot et qui respecte votre vie priv\u00e9e, foncez tester \u00e7a.<\/p>\n<p>\n<a href=\"https:\/\/github.com\/tobi\/qmd\">Source<\/a>\n<\/p>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Si vous \u00eates comme votre blogueur pr\u00e9f\u00e9r\u00e9 (hi hi) et que vous avez des tonnes de fichiers markdown qui tra\u00eenent dans des dossiers obscurs depuis des ann\u00e9es, voici l&#8217;outil parfait pour rendre tout ceci \u00e0 nouveau utilisable dans la vraie vie. En tout cas, c&#8217;est plus pratique qu&#8217;un grep ! \u00c7a s&#8217;appelle QMD (Quick Markdown Search) et c&#8217;est un outil en ligne de commande dispo sur GitHub qui va indexer tout votre bazar de notes pour les rendre consultables rapidement. QMD combine la recherche plein texte classique (BM25) avec de la recherche vectorielle s\u00e9mantique et du re-ranking via LLM, ce qui veut dire que c&#8217;est ultra puissant. On est un peu sur le m\u00eame principe qu&#8217;un RAG en fait puisque l&#8217;IA locale est utilis\u00e9e pour comprendre le sens de votre requ\u00eate et pas juste chercher des cha\u00eenes de caract\u00e8res b\u00eates et m\u00e9chantes. J&#8217;utilise depuis un petit moment maintenant un syst\u00e8me similaire avec LEANN pour indexer tous les articles de korben.info et retrouver des connexions entre mes contenus, et je peux vous dire que quand on go\u00fbte \u00e0 la recherche s\u00e9mantique, le bon vieux grep a un go\u00fbt de carton. L&#8217;outil est m\u00eame capable de faire de l&#8217;expansion de requ\u00eate (Query Expansion) pour deviner ce que vous cherchez vraiment. Techniquement, \u00e7a tourne avec bun ou npm et \u00e7a s&#8217;appuie sur node-llama-cpp pour faire tourner des mod\u00e8les GGUF directement sur votre machine. Tout reste chez vous donc niveau vie priv\u00e9e c&#8217;est nickel. C&#8217;est un peu la m\u00eame philosophie que des outils comme Khoj ou Blinko dont je vous ai d\u00e9j\u00e0 parl\u00e9, mais en version CLI pour le terminal. L&#8217;installation est hyper facile si vous avez d\u00e9j\u00e0 Bun, mais pr\u00e9voyez quand m\u00eame un peu de place (environ 3 Go) pour les mod\u00e8les qui iront s&#8217;installer au chaud dans ~\/.cache\/qmd\/models\/ et installez sqlite si vous \u00eates sur macOS : brew install sqlite # Pour macOS npm install -g @tobilu\/qmd Ensuite, y&#8217;a plus qu&#8217;\u00e0 vous cr\u00e9er vos collections en pointant vers vos dossiers, et en lan\u00e7ant l&#8217;indexation comme ceci : qmd collection add ~\/mes-notes &#8211;name notes qmd embed # L&#8217;\u00e9tape indispensable pour g\u00e9n\u00e9rer les vecteurs Et hop, vous pouvez lancer des recherches !! C&#8217;est magique ! Perso, j&#8217;utilise presque tout le temps la commande &#8220;qmd query&#8221; plut\u00f4t que &#8220;search&#8221; parce que le mode hybride est bien plus puissant je trouve. Vous avez aussi &#8220;qmd vsearch&#8221; si vous voulez une recherche purement s\u00e9mantique, genre quand vous cherchez un concept sans conna\u00eetre les mots exacts utilis\u00e9s dans vos notes. En fait, quand vous tapez une requ\u00eate, QMD va chercher via les mots-cl\u00e9s, via les vecteurs (le sens), puis fusionner tout \u00e7a avec un algo RRF, et refaire passer un petit coup de LLM par dessus pour trier les r\u00e9sultats par pertinence. Apr\u00e8s vous l&#8217;aurez capt\u00e9 en me lisant, si vous avez une machine un peu ancienne sans GPU costaud, l&#8217;\u00e9tape de re-ranking risque de prendre un peu de temps&#8230; mais c&#8217;est le prix de la qualit\u00e9 et de la s\u00e9curit\u00e9 ^^. D&#8217;ailleurs, si vous utilisez Claude Desktop ou Claude Code, sachez que QMD int\u00e8gre \u00e9galement un serveur MCP (Model Context Protocol). Du coup, vous pouvez connecter QMD \u00e0 Claude et lui permettre d&#8217;aller fouiller dans vos notes pour r\u00e9pondre \u00e0 vos questions. Et bonne nouvelle, QMD propose maintenant un mode HTTP daemon (qmd mcp &#8211;http &#8211;daemon) qui garde les mod\u00e8les charg\u00e9s en m\u00e9moire, ce qui \u00e9vite de les recharger \u00e0 chaque requ\u00eate. Attention par contre, dans ce cas pr\u00e9cis, les extraits de vos notes seront envoy\u00e9s \u00e0 Claude (donc dans le cloud). QMD est aussi dispo en tant que librairie Node.js (npm install @tobilu\/qmd) pour ceux qui voudraient l&#8217;int\u00e9grer dans leurs propres scripts ou workflows d&#8217;automatisation. Avec les options &#8211;json et &#8211;files en sortie, \u00e7a se branche facilement dans un pipeline. Perso je trouve \u00e7a g\u00e9nial parce que \u00e7a comble le foss\u00e9 entre le simple fichier texte et les usines \u00e0 gaz de gestion de connaissances. Par exemple, si vous \u00eates un grand adepte de Silverbullet ou d&#8217; Obsidian , c&#8217;est le top pour l&#8217;indexation globale de vos \u00e9crits. Voil\u00e0, si vous voulez un moteur de recherche personnel qui en a sous le capot et qui respecte votre vie priv\u00e9e, foncez tester \u00e7a. Source<\/p>\n","protected":false},"author":1,"featured_media":2590,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"give_campaign_id":0,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_kadence_starter_templates_imported_post":false,"footnotes":""},"class_list":["post-2589","page","type-page","status-publish","has-post-thumbnail","hentry"],"campaignId":"","_links":{"self":[{"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/pages\/2589","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/comments?post=2589"}],"version-history":[{"count":0,"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/pages\/2589\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/media\/2590"}],"wp:attachment":[{"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/media?parent=2589"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}