Tools

Manticore Search integriert Chunking: Vector-Suche für lange Dokumente ohne Pipeline

ai vector-search rag embeddings datenbanken manticore

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_tokens dort ~30% höher ansetzen
  • Multi-Vektor-Spalten lassen sich nicht per ALTER nachrüsten - Tabelle neu anlegen
  • chunk_strategy ohne model_name ist 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