Semantische Suche unvollständig: Vektorindex (ChromaDB) nur zu ~14 % / ~58 % gefüllt — mtime-Skip verhindert Nachholung #196
Labels
No labels
herkunft/alpha-feedback
status
blockiert
status
zu-testen
typ
bug
typ
docs
typ
enhancement
typ
feature
typ
idea
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
iris/Iris#196
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problem
Die semantische Suche (RAG) im Vault und in der Chat-Historie liefert nur einen Bruchteil der möglichen Treffer, weil der Vektorindex (ChromaDB) deutlich kleiner ist als der Volltextindex (SQLite/FTS5). Gemessen am 2026-10-27 auf dem Produktivsystem:
Auswirkungen im Live-Test
Wahrscheinliche Ursache
Der inkrementelle Index-Lauf ueberschreibt die SQLite-Zeile neu, ueberspringt das Embedding aber, wenn sich die Datei seit dem letzten Lauf nicht geaendert hat (mtime-Vergleich). Damit war der Vektorindex einmal weg (geloescht bzw. ein --full-Lauf abgebrochen), bauen sich die Vektoren fuer alle unveraenderten Notizen nie wieder auf.
Bestaetigt im Test: index --area "00 Kontext" meldet indexed: 1, unchanged: 9 — die Vektorabdeckung in dem Ordner bleibt danach bei 2 von 12 Notizen.
Der GUI-Button «Neu aufbauen» (Einstellungen -> Vault Wartung -> RAG-Index / Memory-Index) ruft korrekt index --full auf — er ist als Workaround geeignet, aber nicht die Wurzelbehebung.
Erwartetes Verhalten
Ein inkrementeller Index-Lauf erkennt, wenn zu einer als indiziert gefuehrten Datei kein Vektor im ChromaDB-Store existiert, und holt das Embedding nach — unabhaengig vom mtime-Status. Der Index heilt sich also selbst, statt dauerhaft unvollstaendig zu bleiben.
Reproduction
Vorschlag
PR #120 gemergt: fix(rag): Index heilt sich selbst — unveränderte Dateien ohne Vektor werden nachgebettet (iris/Iris#196)
alf/2ndbrain#120
Commits:
Stand: Selbstheilung des Vektorindex
Befund: Bestätigt im Code.
cmd_indexübersprang unveränderte Dateien allein per mtime-Vergleich gegen SQLite, ohne zu prüfen, ob ChromaDB Chunks dazu hält.Geändert:
skills/obsidian-rag/obsidian.py: Der inkrementelle Lauf liest vorab die Notiz-IDs aus ChromaDB (_vectorised_ids). Eine Notiz mit unveränderter mtime wird nur übersprungen, wenn sie dort vorkommt; sonst wird sie neu eingebettet. Die Antwort enthälthealed.skills/memory/memory.py: gleiche Prüfung für Kernquellen (Chats, Workspaces) und Plugin-Quellen.--fullund der Fall ohne ChromaDB / mit nicht lesbarem Store verhalten sich wie vorher.Geprüft:
index --area "00 Kontext"auf dem Produktivvault: erster Laufhealed: 8, 15 Chunks; zweiter Laufhealed: 0,chunks_embedded: 0. Das passt zum Befund (vorher 2 von 12 Notizen im Ordner mit Vektoren)._vectorised_idsgegen eine Attrappe mit 12.000 Einträgen (Seitenweise Lesen) und mitNone.Nicht geprüft:
memory.pymit echten Daten (nur Syntax).Offen: Optionale Abdeckungsanzeige (Vektor-Chunks gegen erwartete Chunks) in den Stats der Vault-Wartung ist nicht gebaut.
PR #210 gemergt: chore(skills): memory (Plugin-Quellen) und obsidian-rag (Selbstheilung, #196) aus dem Quellbaum übernommen
#210
Commits: