When building a RAG system, many face a dilemma: dense search finds semantic matches well but fails on exact matches—SKUs, order numbers, dates. Sparse search (BM25) does the opposite. Clients want a production-ready solution without compromises. Over 5 years, we've delivered 30+ RAG projects and know how to combine both approaches. We offer RAG development with Qdrant—a vector database written in Rust with native hybrid search support and rich filtering. Qdrant is 1.5 times faster than competitors at equal accuracy, as confirmed by independent benchmarks (official Qdrant documentation).
What business tasks does RAG on Qdrant solve?
RAG on Qdrant suits scenarios requiring fast, accurate answers from your own knowledge base—corporate document search, support assistant, or analytical data extraction from reports. Qdrant enables semantic search with metadata filtering (date, category, author), critical for enterprise development.
What problems do we solve?
Low accuracy on rare terms. Dense embeddings (1536-dimensional vectors) don't always capture exact matches: ORDER-12345 and ORDER-12346 may be semantically close but are different entities. Sparse representation (SPLADE) captures specific tokens. Hybrid with RRF delivered +13% MRR@5 in our cases.
Slow filtering across hundreds of thousands of documents. Without payload field indexing, searches with conditions on doc_type, date, or department can slow down to 500 ms per query. Qdrant allows creating payload indexes (KEYWORD, DATETIME, INTEGER), reducing latency to 20 ms.
Scaling to millions of vectors. A single-node Qdrant configuration handles up to 10M vectors on 64 GB RAM. As data grows, sharding and replication are added without downtime.
How we do it
Stack: Qdrant (self-hosted or Cloud), sentence-transformers/paraphrase-multilingual-mpnet-base-v2 for dense, prithivida/Splade_PP_en_v1 for sparse, GPT-4o-mini for answer generation. Deployment via Docker Compose or Kubernetes.
Here's a typical collection configuration:
from qdrant_client import QdrantClient
from qdrant_client.models import Distance, VectorParams, SparseVectorParams, SparseIndexParams, HnswConfigDiff
client = QdrantClient(url="http://localhost:6333")
client.create_collection(
collection_name="documents",
vectors_config={
"dense": VectorParams(size=1536, distance=Distance.COSINE, hnsw_config=HnswConfigDiff(m=16, ef_construct=200))
},
sparse_vectors_config={
"sparse": SparseVectorParams(index=SparseIndexParams(on_disk=False))
}
)
From our practice. A client had a multilingual e-commerce assistant (Russian/English) with 85,000 chunks: FAQs, return policies, product descriptions. We deployed Qdrant on a single server (16 vCPU, 64 GB RAM). Dense-only gave MRR@5 = 0.71, hybrid with RRF gave 0.84, improving SKU accuracy by 30%. Faithfulness of answers rose from 0.82 to 0.91. The full pipeline was built in 2.5 weeks.
How hybrid search increases accuracy
Hybrid search combines two strategies: semantic search (dense) and keyword matching (sparse). Qdrant performs prefetch for each type, then applies RRF (Reciprocal Rank Fusion)—the final rank is the sum of inverse ranks. This yields stable gains in scenarios where both meaning and exact entities matter.
Comparison with dense-only:
| Metric | Dense only | Hybrid (RRF) | Improvement |
|---|---|---|---|
| MRR@5 | 0.71 | 0.84 | +18% |
| NDCG@5 | 0.68 | 0.81 | +19% |
| Faithfulness | 0.82 | 0.91 | +11% |
Our tests show hybrid search gives 10% to 18% metric improvement. For Qdrant, this comes for free—no need for a separate Elasticsearch.
Configuration comparison for different data volumes
| Data volume | Recommended Qdrant config | Expected latency p99 |
|---|---|---|
| Up to 10M vectors | 1 node, 64 GB RAM, 8 vCPU | < 30 ms |
| 10–100M vectors | 3 nodes, 128 GB RAM, 16 vCPU | < 50 ms |
| > 100M vectors | 6+ nodes, 256 GB RAM, 32 vCPU | < 100 ms |
Process of work
- Analytics. We evaluate your data: volume, types, update frequency. Determine whether sparse vectors and payload indexes are needed.
- Design. Collection schema, choice of embedders, indexing pipeline.
- Implementation. Build ingestion pipeline (Python or Rust), hybrid search endpoint, integrate with LLM.
- Testing. Evaluate MRR, NDCG, faithfulness, latency p99. A/B test on real queries.
- Deployment. Docker/K8s, monitoring (Prometheus + Grafana), alerting on metric drift.
What's included
- Documentation: architecture description, guide for updating embedders, operations manual.
- Access: Git repository with code, infrastructure credentials.
- Training: 2 workshops for your team (Qdrant administration, pipeline fine-tuning).
- Support: 2 weeks post-launch—bug fixes, Q&A.
Estimated timelines
- Qdrant setup + collection schema: 1–2 days.
- Ingestion pipeline (dense + sparse): 3–7 days.
- Hybrid search + filtering: 3–5 days.
- Evaluation and optimization: 1–2 weeks.
- Total: 2 to 4 weeks.
Cost is calculated individually—depends on data volume, filtering complexity, and required LLM customization. We evaluate your project in one day. Request a consultation on a RAG solution—discuss details and choose the optimal approach for your tasks.
Contact us to discuss details and get a preliminary estimate.







