To use pgvector with Django, follow these steps:
1. Enable the extension
Create a migration to enable the vector extension:
from pgvector.django import VectorExtension
class Migration(migrations.Migration):
operations = [
VectorExtension()
]
2. Define models
Use VectorField to add vector columns. Supported fields include VectorField, HalfVectorField, BitField, and SparseVectorField.
from pgvector.django import VectorField
class Item(models.Model):
embedding = VectorField(dimensions=3)
3. Querying
- Insert: Pass a list of floats to the field.
- Nearest Neighbors: Use distance functions like
L2Distance, MaxInnerProduct, CosineDistance, L1Distance, HammingDistance, or JaccardDistance in order_by. - Filtering: Use
.annotate() to get distances or .alias().filter() to filter by distance. - Aggregations: Supports
Avg and Sum on vector fields.
4. Indexing
Add approximate indexes using HnswIndex or IvfflatIndex. Use vector_l2_ops for L2 distance, vector_ip_ops for inner product, and vector_cosine_ops for cosine distance.
from pgvector.django import VectorField
class Item(models.Model):
embedding = VectorField(dimensions=3)
# Querying nearest neighbors
from pgvector.django import L2Distance
Item.objects.order_by(L2Distance('embedding', [3, 1, 2]))[:5]