From 773b7bd3cacb3c644b2fcb67bf6355a463c47bf7 Mon Sep 17 00:00:00 2001 From: Sagar Bhat Date: Mon, 22 Apr 2024 18:43:45 +1000 Subject: [PATCH] PgVectorStore: creating an index only if missing - Resolve an issue where a new index keeps getting created during application start up. - Solution is is to create an index only if an index on the embedding column does not exist. - Add missing index name. --- .../org/springframework/ai/vectorstore/PgVectorStore.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/vector-stores/spring-ai-pgvector-store/src/main/java/org/springframework/ai/vectorstore/PgVectorStore.java b/vector-stores/spring-ai-pgvector-store/src/main/java/org/springframework/ai/vectorstore/PgVectorStore.java index 1d85ee361..c2b7954d9 100644 --- a/vector-stores/spring-ai-pgvector-store/src/main/java/org/springframework/ai/vectorstore/PgVectorStore.java +++ b/vector-stores/spring-ai-pgvector-store/src/main/java/org/springframework/ai/vectorstore/PgVectorStore.java @@ -60,6 +60,8 @@ public class PgVectorStore implements VectorStore, InitializingBean { public static final String VECTOR_TABLE_NAME = "vector_store"; + public static final String VECTOR_INDEX_NAME = "spring_ai_vector_index"; + public final FilterExpressionConverter filterExpressionConverter = new PgVectorFilterExpressionConverter(); private final JdbcTemplate jdbcTemplate; @@ -352,8 +354,8 @@ public class PgVectorStore implements VectorStore, InitializingBean { if (this.createIndexMethod != PgIndexType.NONE) { this.jdbcTemplate.execute(String.format(""" - CREATE INDEX ON %s USING %s (embedding %s) - """, VECTOR_TABLE_NAME, this.createIndexMethod, this.getDistanceType().index)); + CREATE INDEX IF NOT EXISTS %s ON %s USING %s (embedding %s) + """, VECTOR_INDEX_NAME, VECTOR_TABLE_NAME, this.createIndexMethod, this.getDistanceType().index)); } }