Aller au contenu

Recherche

Engram indexe le contenu des notes pour la recherche sémantique, qui trouve les notes dont le sens ressemble à ta requête, même quand la formulation diffère. La recherche par correspondance exacte est aussi prise en charge, mais l’endroit où elle s’exécute dépend de la portée.

  • Recherche sémantique sur tout le coffre. Similarité vectorielle sur les embeddings de chaque note. Trouve des idées liées, pas seulement le texte littéral. C’est ce qui s’exécute aujourd’hui depuis le panneau de recherche de l’application web.
  • Recherche par mots-clés et hybride. Le backend indexe aussi les notes pour une recherche par mots-clés (lexicale) compatible avec le chiffrement et pour un mode hybride qui fusionne les résultats lexicaux et vectoriels (voir plus bas). Ces modes sont livrés dans le backend ; le panneau de recherche de l’application web n’expose pas encore de sélecteur de mode, il émet donc des requêtes sémantiques pour l’instant.
  • Correspondance exacte dans une note ouverte. Ctrl/Cmd+F et le Rechercher/Remplacer de l’éditeur fonctionnent sur la note déchiffrée dans ta session courante, comme dans n’importe quel éditeur de texte.

Engram prend en charge la recherche par mots-clés (lexicale) sur tout ton coffre, et ce sans casser le chiffrement au repos. Au lieu d’analyser du texte en clair, le backend indexe, pour chaque fragment, un vecteur creux indexé par HMAC(your vault key, token), de sorte que le serveur peut faire correspondre les termes d’une requête à l’index sans jamais détenir de texte de note lisible. Les modes mots-clés, sémantique (vectoriel) et hybride (lexical + vectoriel fusionnés côté serveur par fusion de rangs réciproques) sont tous disponibles dans le backend.

Cela signifie qu’une vraie recherche de sous-chaîne ou par expression régulière sur le texte brut reste impossible côté serveur (l’index porte sur des tokens, pas sur des caractères). Pour une recherche littérale par regex, sensible à la casse ou filtrée par chemin, le volet de recherche local d’Obsidian (qui parcourt tes fichiers .md sur disque) reste l’outil à utiliser. Ctrl/Cmd+F dans l’éditeur fonctionne aussi pour chercher dans une note ouverte.

La recherche d’Engram et celle d’Obsidian sont complémentaires : sémantique, par mots-clés et hybride dans le cloud ; recherche littérale complète par regex / sensible à la casse / filtrée par chemin sur le disque. Le volet de recherche local d’Obsidian s’exécute sur le même coffre qu’Engram synchronise.

  • Panneau de recherche de l’application web (le rail de recherche) : requêtes sémantiques aujourd’hui
  • Le plugin Obsidian lance la recherche sur le même backend que l’application web
  • Le volet de recherche d’Obsidian pour la recherche littérale locale par regex / sensible à la casse / par chemin sur le coffre présent sur le disque

Pour un motif regex ou une correspondance littérale limitée à un chemin, passe par la recherche locale d’Obsidian.

  1. Ta requête est convertie en embedding (le modèle de requête est asymétrique par rapport au modèle de documents, réglé pour la recherche plutôt que pour l’indexation)
  2. Qdrant renvoie les K meilleures correspondances vectorielles avec quantification binaire + rescore
  3. Si un reranker est configuré (RERANKER_BACKEND=jina + JINA_URL sur le backend), les candidats sont réordonnés avec un mélange 40/60 des scores vectoriel et du reranker ; sinon, le classement vectoriel brut est utilisé

Le déploiement cloud par défaut fonctionne aujourd’hui sans reranker ; l’adaptateur Jina est livré et prêt à être activé.

Restreindre la recherche à un dossier est possible via l’API. Passe un paramètre de requête folder=<path>. Une syntaxe de requête dans la barre de recherche comme folder:work/ est prévue dans la feuille de route, pas encore branchée dans l’interface.

Quand la recherche sémantique est moins performante

Section intitulée « Quand la recherche sémantique est moins performante »
  • Le coffre est très petit (< 20 notes). Moins d’embeddings à comparer ; les résultats sont plutôt bruités tant que ton coffre ne grandit pas
  • Notes récemment importées. L’embedding s’exécute de façon asynchrone via Oban ; les notes fraîchement écrites peuvent mettre quelques secondes à apparaître dans les résultats
  • Jargon très spécifique. La similarité sémantique est meilleure pour les concepts. Pour des identifiants exacts (un nom de fonction, un code d’erreur), la recherche par mots-clés et hybride (lexicale + vectorielle) convient mieux. Les deux sont actives dans le backend, l’exposition dans l’interface web restant à venir. En attendant, la recherche locale d’Obsidian couvre les identifiants exacts.