Skip to main content
Ingest unstructured documents (PDFs, text files, HTML) into Qdrant, a high-performance vector database for RAG and semantic search applications. The pipeline extracts text from the document, chunks it using a configurable strategy, generates vector embeddings, and upserts the chunks with metadata into a Qdrant collection.

Configuration

Supported File Types

For structured data (CSV, JSON, XML), use database destinations (PostgreSQL, MongoDB) instead.

Vault Secrets

Qdrant connection

Embedding API

The embedding secret is server-level (ai.embedding.secretName, default oss/embedding) and is seeded automatically by docker/vault-init.sh. Each Vault secret is self-describing — the resolver reads provider, endpoint, model, apiKey, and (optionally) version from inside. See AI Configuration for the full picture.
Common embedding configurations: For Anthropic-only deployments, the bundled TEI sidecar serves bge-m3 and vault-init.sh seeds the embedding secret to point at it — no OpenAI key required.

Chunking Strategies

Documents are split into chunks before embedding. Each chunk becomes a separate Qdrant point with the document’s metadata plus chunk_index, filename, and source_pipeline fields.
  • chunkSize (default 500): maximum characters per chunk
  • chunkOverlap (default 50): characters of overlap between consecutive chunks

Metadata

Static metadata is attached to every chunk in the Qdrant payload, enabling filtered semantic search:
This allows queries like “find chunks about revenue from Apple 10-Q filings” by combining vector similarity with metadata filters. In addition to static metadata, every chunk automatically includes:
  • text — the chunk text
  • chunk_index — position of the chunk in the document
  • filename — original uploaded filename
  • source_pipeline — pipeline name

How It Works

  1. Upload — an unstructured file (PDF, text) is uploaded via POST /api/v1/pipeline/upload
  2. Extract — text is extracted from the document (PDFBox for PDFs, UTF-8 for text files)
  3. Chunk — text is split into chunks using the configured strategy
  4. Embed — each chunk is sent to the embedding API to generate a vector
  5. Upsert — vectors are upserted into the Qdrant collection with metadata payload
  6. Notify — a pipeline notification is published on completion
The collection is auto-created on first upsert using cosine distance and the embedding dimension detected from the model.

Running Qdrant

Qdrant ships as a bundled opt-in Compose service. Enable it with one line in .env:
Then start the stack:
Combine profiles with commas (e.g., COMPOSE_PROFILES=qdrant,kafka). The install.sh installer can also enable Qdrant at install time — it writes the profile and seeds the oss/qdrant secret for you. For the bundled container, use the compose service name as the host in the secret (host="qdrant", gRPC port 6334). To use an existing external or Qdrant Cloud instance instead, skip the profile and point the oss/qdrant secret’s host/port/apiKey at it — the secret fields are the same either way. You can also run Qdrant standalone:
Or install natively from qdrant.tech/documentation/quick-start.

Verifying