Skip to main content
Ingest unstructured documents (PDFs, Word docs, text files, HTML) into Weaviate, an open-source 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 Weaviate class.

Configuration

Supported File Types

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

Vault Secrets

Weaviate connection

Embedding API

The embedding secret is server-level (ai.embedding.secretName, default oss/embedding) and is seeded automatically by docker/vault-init.sh. See AI Configuration and the Qdrant docs for the full picture.
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 Weaviate object with the document’s metadata plus chunk_index, filename, and source_pipeline properties.
  • chunkSize (default 500): maximum characters per chunk
  • chunkOverlap (default 50): characters of overlap between consecutive chunks

Metadata

Static metadata is attached to every chunk as Weaviate properties, 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, DOC, DOCX, HTML, text) is uploaded via POST /api/v1/pipeline/upload
  2. Extract — text is extracted from the document (PDFBox for PDFs, Apache POI for Word, JSoup for HTML)
  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 Weaviate class with metadata properties
  6. Notify — a pipeline notification is published on completion
The class is auto-created on first upsert using HNSW indexing with cosine distance.

Running Weaviate

Weaviate 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=weaviate,kafka). The install.sh installer can also enable Weaviate at install time — it writes the profile and seeds the oss/weaviate secret for you. On the Compose network the bundled container is reachable at weaviate:8080; on the host it is published at port 8079 to avoid conflict with the pipeline server on port 8080. To use an existing external or Weaviate Cloud instance instead, skip the profile and point the oss/weaviate secret’s host/port/apiKey at it — the secret fields are the same either way. You can also run Weaviate standalone:
Or install from weaviate.io/developers/weaviate/installation.

Verifying