From 33eda45884be6ad2a13c34520f9b25991f3a1b7f Mon Sep 17 00:00:00 2001 From: Adem Boukabes <142881379+ademboukabes@users.noreply.github.com> Date: Wed, 5 Aug 2026 17:29:45 +0100 Subject: [PATCH] perf: add hnsw vector index for pgvector --- .../versions/9ec59aeb192b_add_hnsw_indexes.py | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 migrations/versions/9ec59aeb192b_add_hnsw_indexes.py diff --git a/migrations/versions/9ec59aeb192b_add_hnsw_indexes.py b/migrations/versions/9ec59aeb192b_add_hnsw_indexes.py new file mode 100644 index 0000000..c212cbd --- /dev/null +++ b/migrations/versions/9ec59aeb192b_add_hnsw_indexes.py @@ -0,0 +1,30 @@ +"""add hnsw indexes + +Revision ID: 9ec59aeb192b +Revises: 46bceaf84bd8 +Create Date: 2026-08-05 17:25:20.815182 + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision: str = '9ec59aeb192b' +down_revision: Union[str, Sequence[str], None] = '46bceaf84bd8' +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + """Upgrade schema.""" + op.execute("CREATE INDEX IF NOT EXISTS idx_users_face_embedding ON users USING hnsw (face_embedding vector_cosine_ops);") + op.execute("CREATE INDEX IF NOT EXISTS idx_photo_faces_embedding ON photo_faces USING hnsw (embedding vector_cosine_ops);") + + +def downgrade() -> None: + """Downgrade schema.""" + op.execute("DROP INDEX IF EXISTS idx_photo_faces_embedding;") + op.execute("DROP INDEX IF EXISTS idx_users_face_embedding;")