Vous cherchez un atelier capable d'usiner une pièce en inox, à ±0,01 mm, certifié, à moins de deux heures de route. Toutes les entreprises françaises sont dans une base publique et gratuite. Vous pensez tenir le problème. Vous ne l'avez même pas commencé.
La base SIRENE donne, pour chaque établissement, un code NAF. Ce code résume l'activité principale déclarée, à des fins statistiques. Votre besoin, lui, parle de procédé, de matière, de tolérance et de certification.
Ce n'est pas un écart de précision, c'est un changement de nature. Deux ateliers partageant le même code peuvent être l'un parfait, l'autre incapable. Le code ne le dira jamais : ce n'est pas sa fonction.
Nous travaillons sur ce problème depuis quelques mois, avec un moteur de recherche B2B appelé Habilo. Il n'y a rien à vendre — on verra plus bas pourquoi. Voici ce que le problème nous a appris, y compris là où nous nous sommes trompés.
Une approximation qui devient une affirmation
Faute de savoir-faire déclaré, on prend le NAF comme approximation. C'est la seule chose à faire au départ, et ce n'est pas le piège.
Le piège, c'est le trajet. Une entreprise n'a rien déclaré, on déduit de son code qu'elle « fait de la tôlerie », le résultat s'affiche avec un score, et l'utilisateur lit une capacité. Personne n'a menti. L'information a juste changé de statut en chemin.
D'où une règle plus contraignante qu'elle n'en a l'air : chaque champ doit porter sa nature — officiel, déclaré, calculé, prouvé. Pas comme étiquette décorative : parce que la date, la visibilité et le droit de contester en dépendent.
L'échelle ne complique pas le problème, elle le change
Quarante millions d'établissements, 28,7 Go. Ces nombres ne sont pas impressionnants, ils sont contraignants.
Sur cette base, retrouver une ligne par son index prend 0,3 milliseconde. Parcourir la table entière en prend 56 secondes. Entre les deux, un facteur de près de 200 000.
Ce n'est plus de l'optimisation, c'est une frontière : ce qui n'est pas couvert par un index n'existe pas en production. La conception des requêtes passe donc avant celle du produit — inhabituel, et un peu désagréable.
Le prix se lit dans un détail : sur cette table, les index pèsent plus lourd que les données. On ne paie pas la vitesse en calcul, on la paie en disque et en rigidité. Chaque index est un engagement.
Le graphe qui n'avait pas besoin d'un moteur de graphe
Un savoir-faire dérive d'un autre, un métier appartient à un secteur. Nous avons donc modélisé un graphe. Et de « nous avons un graphe » à « il nous faut Neo4j », le pas se franchit presque tout seul.
Nous avons regardé avant de le franchir. Nos requêtes réelles font deux ou trois sauts et croisent des critères : ce sont des jointures et des intersections, le terrain d'une base relationnelle. Un moteur de graphe gagne sur les traversées profondes et les plus courts chemins. Nous n'en faisons aucune.
Rien dans nos chiffres ne poussait vers un moteur de graphe. Dans nos documents, « graphe » désignait un modèle de données ; nous avions failli le lire comme un nom de produit.
La leçon dépasse notre cas : le choix d'un moteur ne se déduit pas du vocabulaire de la modélisation, mais du profil des requêtes.
Même histoire pour la recherche sémantique, où le réflexe est d'ajouter une base vectorielle dédiée. MariaDB sait désormais stocker et indexer des vecteurs nativement : les vecteurs vivent à côté des données, sans second système à synchroniser. Notre billet sur la vectorisation revient sur le principe.
Deux fois de suite, la bonne décision aura été de ne rien ajouter. Non par austérité : chaque brique aurait résolu un problème que nous n'avions pas, en en créant un que nous aurions eu.
Le vrai mur n'est pas technique
Voilà pour la partie flatteuse. Le socle tient, les temps de réponse sont bons.
Un audit interne du 14 juillet 2026 dit ceci : 8 comptes, dont 5 créés pour la démonstration. Aucune revendication aboutie, aucune recommandation, aucun paiement.
Ces nombres décrivent un prototype et ses jeux de test. Ni audience, ni preuve de demande, ni traction.
C'est pourquoi le projet s'est donné une définition écrite du mot « codé » :
Le terme codé signifie uniquement que du code et des tables existent. Il ne signifie pas bêta, exploité, adopté ou rentable.
Quant à l'idée que la taille de la base serait un avantage : tout le monde peut télécharger les mêmes fichiers. Ce qu'on en fait n'est pas donné avec.
L'objectif, sans emballage
Trouver les organisations capables de répondre à un besoin précis, comprendre pourquoi elles sortent, vérifier d'où vient l'information — sans que personne ne puisse acheter son rang.
C'est une hypothèse, pas une promesse. Elle se vérifiera sur une poignée de vrais acheteurs et de vrais besoins, pas sur 40 millions de lignes. Une revue — continuer, réduire ou arrêter — est fixée au 13 octobre 2026.
S'il y a une leçon transférable, elle n'est pas dans les 0,3 milliseconde. Elle tient dans l'écart entre deux phrases qui se ressemblent : « la donnée existe » et « la donnée répond à la question ». La première est un fait. La seconde se démontre, et c'est presque toujours là que le travail commence.
Nous écrirons la suite quelle qu'elle soit, y compris si la revue d'octobre dit d'arrêter.
FAQ
Pourquoi le code NAF ne suffit-il pas à trouver un fournisseur ?
Il décrit l'activité principale déclarée d'une entreprise, à des fins statistiques — pas les procédés maîtrisés, les tolérances tenues ou les certifications détenues. C'est un point de départ utile, à condition de le présenter comme une approximation et jamais comme une capacité prouvée.
Faut-il un moteur de graphe pour modéliser des savoir-faire ?
Pas nécessairement. « Graphe » désigne d'abord un modèle de données, pas un moteur. Un moteur spécialisé se justifie sur des traversées profondes ; si les requêtes réelles sont des jointures courtes et des croisements de critères, une base relationnelle indexée les sert très bien.
Qu'est-ce qu'un projet « pré-traction » ?
Un projet dont le code fonctionne mais dont l'utilité n'est pas démontrée par des utilisateurs externes. Qu'une fonction soit codée signifie seulement que du code et des tables existent : ni bêta, ni adopté, ni rentable.