Vector Qdrant
Qdrant is an open-source vector database written in Rust. Developers value it for fast filtered search, a clear data model, and flexible deployment. You can run it on a laptop, on your own servers, or through a managed cloud service.
Core Building Blocks
Qdrant organizes data into three simple concepts.
QDRANT DATA MODEL
Collection (like a table)
|
+-- Point (like a row)
|
+-- id unique number or UUID
+-- vector list of numbers (the meaning)
+-- payload JSON details (the facts)
Example point:
id: 1
vector: [0.12, 0.88, 0.45, 0.30]
payload: { "topic": "travel", "year": 2025 }
- Collection: A named group of points that share the same vector size and distance metric.
- Point: One stored item with an ID, a vector, and optional payload.
- Payload: Extra JSON data attached to a point, used for filtering and display.
Why Developers Choose Qdrant
- Filtering during search: Qdrant applies payload filters while it traverses the HNSW graph, which keeps results accurate under conditions.
- Multiple deployment modes: Run an in-memory mode for tests, a Docker container for development, or a cluster for production.
- Built-in compression: Scalar, product, and binary quantization reduce memory use.
- Simple interfaces: REST and gRPC APIs plus client libraries for popular languages.
A First Example in Python
from qdrant_client import QdrantClient
from qdrant_client.models import Distance, VectorParams, PointStruct
client = QdrantClient(":memory:")
# 1. Create a collection for 4-dimension vectors
client.create_collection(
collection_name="articles",
vectors_config=VectorParams(size=4, distance=Distance.COSINE),
)
# 2. Insert points
client.upsert(
collection_name="articles",
points=[
PointStruct(id=1, vector=[0.1, 0.9, 0.3, 0.2], payload={"topic": "travel"}),
PointStruct(id=2, vector=[0.8, 0.1, 0.2, 0.7], payload={"topic": "cooking"}),
],
)
# 3. Search
hits = client.query_points(
collection_name="articles",
query=[0.1, 0.8, 0.4, 0.2],
limit=2,
).points
The in-memory mode stores nothing on disk, so it suits quick experiments and automated tests.
Searching With a Filter
Filters narrow results to points whose payload matches a condition.
QUERY FLOW WITH FILTER
Query vector + filter: topic = "travel"
|
v
+-----------------------------+
| Graph search guided by |
| vector closeness AND the |
| payload condition |
+-----------------------------+
|
v
Top results that match both
Payload Indexes
Fields you filter often deserve a payload index. The index lets Qdrant check conditions quickly instead of reading each payload. Create indexes for fields such as category, language, and date.
Deployment Options
| Option | Best For |
|---|---|
| In-memory mode | Learning, unit tests, small demos |
| Local disk mode | Small personal projects |
| Docker container | Development and small production loads |
| Distributed cluster | Large datasets and high traffic |
| Managed cloud service | Teams that prefer no server maintenance |
Scaling Concepts
Qdrant splits a collection into shards and copies shards across machines as replicas. Shards spread the data. Replicas improve availability and read speed.
CLUSTER LAYOUT
Collection "articles"
|
+-- Shard 1 --> Node A (replica on Node B)
+-- Shard 2 --> Node B (replica on Node C)
+-- Shard 3 --> Node C (replica on Node A)
Practical Tips
- Match the collection distance metric to your embedding model recommendation.
- Store original text and source links inside the payload.
- Create payload indexes before you load millions of points.
- Enable quantization when memory grows expensive.
- Test recall against exact search before you go live.
Qdrant gives you a clean data model and strong filtering control. Start with the in-memory mode, move to Docker as your project grows, and add clustering only when the data demands it.
