Tools
Manticore Search integriert Chunking: Vector-Suche für lange Dokumente ohne Pipeline
Ein Embedding-Modell liest nur die ersten paar hundert Token eines Dokuments und verwirft den Rest stillschweigend. Manticore Search löst das Problem jetzt direkt im Datenbankschema: Mit der neuen chunk_strategy-Option auf der Vektor-Spalte zerlegt die Engine lange Dokumente automatisch beim INSERT in Chunks, bettet jeden Chunk ein und durchsucht alle. Keine Ingest-Pipeline, keine Splitter-Bibliothek, keine zweite Tabelle.
Das Problem
Wer Vektor-Suche über interne Doku baut - Runbooks, Postmortems, Guides - läuft schnell in die Falle: Ein 4.000-Wörter-Dokument passt nicht ins 512-Token-Fenster des Embedding-Modells. Das Modell liest die ersten ~380 Wörter, der Rest existiert für die Suche nie. Nichts warnt davor; der Insert erfolgt erfolgreich. Und da der eine Vektor v.a. die ersten Seiten widerspiegelt, verliert ein multithematisches Dokument gegen Dekoy-Dokumente, die lediglich thematisch ähnlich klingen.
Fünf Strategien am Column-Flag
CREATE TABLE docs (
title text,
content text,
chunks float_vector_array knn_type='hnsw' hnsw_similarity='cosine'
model_name='Xenova/all-MiniLM-L6-v2' from='title,content'
chunk_strategy='sentence' max_tokens='256' overlap_tokens='32'
);
- truncate: altes Default, ein Vektor, Rest wird verworfen
- mean: alle Stücke embedden und mitteln - ein Vektor, aber ganze Dokument berücksichtigt
- fixed: feste Token-Fenster, mehrere Vektoren
- recursive: Splitter-Hierarchie (Absatz → Zeile → Satz → Leerzeichen)
- sentence: Satzgrenzen nach Unicode UAX #29, gepackt bis max_tokens
Ein Dokument bleibt trotzdem ein Suchergebnis: Chunks konkurrieren einzeln, Manticore liefert das Dokument einmal zurück, k zählt Dokumente, nicht Chunks. Tuning-Parameter: max_tokens, overlap_tokens, max_chunks.
Messwerte mit Substanz
Getestet auf dem Manticore-Handbuch (189 Seiten, ~298k Wörter): Für Inhalte, die hinter dem Modellfenster begraben lagen, stieg recall@5 von 55,1% auf 83,3%, MRR von 0,44 auf 0,70. Preis dafür: ~2,5x RAM, ~4x Ingest-Zeit. Im Beispiel des Artikels gewinnt das Runbook mit sentence-Chunking klar (Distanz 0,254 vs. 0,700) - weil der eine Absatz über TLS-Zertifikats-Rotation jetzt als eigener Vektor existiert statt im Backup-Themen-Noise zu ertrinken.
Praxis-Hinweise
- Remote-Modelle (OpenAI, Voyage, Jina) chunken nach Bytes (3 Bytes/Token-Schätzung) -
max_tokensdort ~30% höher ansetzen - Multi-Vektor-Spalten lassen sich nicht per
ALTERnachrüsten - Tabelle neu anlegen chunk_strategyohnemodel_nameist ein DDL-Fehler; selbst mitgebrachte Vektoren werden nie neu geschnitten- Queries werden nie gechunkt - nur gespeicherte Dokumente
Damit wird Chunking von einer Pipeline-Bauaufgabe zu einer deklarativen Spaltenoption. Für RAG-Aufbauten mit langen Quell-Dokumenten das wertvollste Feature seit Auto-Embeddings.
Link: Manticore Search Blog