DEV Community

Alex Spinov
Alex Spinov

Posted on

Qdrant Has a Free API: A Vector Database Built in Rust for AI Applications

Qdrant is a vector similarity search engine built in Rust. It stores and searches high-dimensional vectors for RAG, recommendation systems, and semantic search.

Why Qdrant Matters

AI applications need to find similar items — similar documents, images, products. Traditional databases cannot search by similarity. Qdrant is built for exactly this.

What you get for free:

  • Vector similarity search (cosine, dot product, Euclidean)
  • Payload filtering (combine vector search with metadata filters)
  • Built in Rust for maximum performance
  • Horizontal scaling with sharding
  • REST and gRPC APIs
  • Python, JS, Rust, Go clients
  • Free cloud tier (1GB, 1M vectors)
  • Docker deployment

Quick Start

# Docker
docker run -p 6333:6333 -p 6334:6334 qdrant/qdrant

# Or install locally
cargo install qdrant
Enter fullscreen mode Exit fullscreen mode

Python Client

from qdrant_client import QdrantClient
from qdrant_client.models import Distance, VectorParams, PointStruct

client = QdrantClient("localhost", port=6333)

# Create collection
client.create_collection(
    collection_name="articles",
    vectors_config=VectorParams(size=384, distance=Distance.COSINE),
)

# Insert vectors (from embeddings)
client.upsert(
    collection_name="articles",
    points=[
        PointStruct(
            id=1,
            vector=[0.1, 0.2, ...],  # 384-dim embedding
            payload={"title": "Intro to AI", "category": "tech", "views": 1500},
        ),
        PointStruct(
            id=2,
            vector=[0.3, 0.1, ...],
            payload={"title": "ML Basics", "category": "tech", "views": 2300},
        ),
    ],
)

# Search similar
results = client.query_points(
    collection_name="articles",
    query=[0.15, 0.22, ...],  # Query vector
    limit=5,
)
for result in results.points:
    print(f"{result.payload['title']}: {result.score:.3f}")

# Search with filters
results = client.query_points(
    collection_name="articles",
    query=[0.15, 0.22, ...],
    query_filter=models.Filter(
        must=[
            models.FieldCondition(
                key="category", match=models.MatchValue(value="tech")
            ),
            models.FieldCondition(
                key="views", range=models.Range(gte=1000)
            ),
        ]
    ),
    limit=10,
)
Enter fullscreen mode Exit fullscreen mode

RAG Pipeline

from sentence_transformers import SentenceTransformer

model = SentenceTransformer("all-MiniLM-L6-v2")

# Index documents
documents = ["AI is transforming...", "Machine learning..."]
embeddings = model.encode(documents)

client.upsert(
    collection_name="knowledge",
    points=[
        PointStruct(id=i, vector=emb.tolist(), payload={"text": doc})
        for i, (doc, emb) in enumerate(zip(documents, embeddings))
    ],
)

# Query
query = "How does AI work?"
query_vector = model.encode(query).tolist()
results = client.query_points(
    collection_name="knowledge",
    query=query_vector,
    limit=3,
)
context = "\n".join([r.payload["text"] for r in results.points])
# Feed context to LLM for RAG
Enter fullscreen mode Exit fullscreen mode

REST API

# Create collection
curl -X PUT http://localhost:6333/collections/articles \
  -H 'Content-Type: application/json' \
  -d '{"vectors": {"size": 384, "distance": "Cosine"}}'

# Search
curl -X POST http://localhost:6333/collections/articles/points/query \
  -H 'Content-Type: application/json' \
  -d '{"query": [0.1, 0.2, ...], "limit": 5}'
Enter fullscreen mode Exit fullscreen mode

Links


Building AI search applications? Check out my developer tools on Apify or email spinov001@gmail.com for custom solutions.

Top comments (0)