Build hybrid RAG search over PDFs with Qdrant and Ollama
UnknownWhat this workflow does
This AI workflow has 20 nodes and runs manually, when you click “Execute workflow” (plus 1 other trigger). Along the way it connects Embeddings Ollama, Qdrant Vector Store and Qdrant (community). It also calls host.docker.internal:11434 over HTTP.
How it runs
Trigger: Manually, when you click “Execute workflow” (plus 1 other trigger).
- Read/Write Files from Disk: reads a file from disk
- Generate the embeddings of the query (HTTP Request): calls host.docker.internal:11434 (POST)
- Extract from File: extracts data from a file (pdf)
- Query Points (using the embeddings) (Qdrant): query points (search)
- Check If Collection Exists (Qdrant): collection exists
- Merge: merges the data from its input branches
- If: checks a condition and branches into true / false
- Qdrant Vector Store: stores documents in the Qdrant vector store, with embeddings: Embeddings Ollama; document loader: Default Data Loader
- Create Collection (Qdrant): create collection
- Get All Points (Qdrant): scroll points
…plus 5 more steps. See the full node list below.
Services it uses
HTTP calls to: host.docker.internal:11434
Before you upgrade to n8n 3.0
We can't fully verify this one: it relies on 1 community package, and n8n 3.0 turns unverified community packages off by default (N8N_UNVERIFIED_PACKAGES_ENABLED=false).
- Check that n8n-nodes-qdrant is verified or supports 3.0 (used in Check If Collection Exists, Create Collection, Update Vectors).
Nodes used (16)
- Manual Trigger
n8n-nodes-base.manualTrigger - Extract from File
n8n-nodes-base.extractFromFile - Read/Write Files from Disk
n8n-nodes-base.readWriteFile - Qdrant
n8n-nodes-qdrant.qdrant - If
n8n-nodes-base.if - Embeddings Ollama
@n8n/n8n-nodes-langchain.embeddingsOllama - Qdrant Vector Store
@n8n/n8n-nodes-langchain.vectorStoreQdrant - Default Data Loader
@n8n/n8n-nodes-langchain.documentDefaultDataLoader - Recursive Character Text Splitter
@n8n/n8n-nodes-langchain.textSplitterRecursiveCharacterTextSplitter - Merge
n8n-nodes-base.merge - Chat Trigger
@n8n/n8n-nodes-langchain.chatTrigger - Split Out
n8n-nodes-base.splitOut - Aggregate
n8n-nodes-base.aggregate - Edit Fields (Set)
n8n-nodes-base.set - HTTP Request
n8n-nodes-base.httpRequest - Code
n8n-nodes-base.code
From the author
Quick overview This workflow ingests a local PDF into Qdrant with Ollama embeddings, then supports hybrid retrieval by querying Qdrant with both dense vectors and BM25 sparse vectors from an n8n chat trigger. How it works 1. Starts manually to read a PDF from…