Class PgVectorStore
java.lang.Object
org.springframework.ai.vectorstore.observation.AbstractObservationVectorStore
org.springframework.ai.vectorstore.pgvector.PgVectorStore
- All Implemented Interfaces:
Consumer<List<Document>>,DocumentWriter,VectorStore,VectorStoreRetriever,org.springframework.beans.factory.InitializingBean
public class PgVectorStore
extends AbstractObservationVectorStore
implements org.springframework.beans.factory.InitializingBean
PostgreSQL-based vector store implementation using the pgvector extension.
The store uses a database table to persist the vector embeddings along with their associated document content and metadata. By default, it uses the "vector_store" table in the "public" schema, but this can be configured.
Features:
- Automatic schema initialization with configurable table and index creation
- Support for different distance metrics: Cosine, Euclidean, and Inner Product
- Flexible indexing options: HNSW (default), IVFFlat, or exact search (no index)
- Metadata filtering using JSON path expressions
- Configurable similarity thresholds for search results
- Batch processing support with configurable batch sizes
Basic usage example:
PgVectorStore vectorStore = PgVectorStore.builder(jdbcTemplate, embeddingModel)
.dimensions(1536) // Optional: defaults to model dimensions or 1536
.distanceType(PgDistanceType.COSINE_DISTANCE)
.indexType(PgIndexType.HNSW)
.build();
// Add documents
vectorStore.add(List.of(
new Document("content1", Map.of("key1", "value1")),
new Document("content2", Map.of("key2", "value2"))
));
// Search with filters
List<Document> results = vectorStore.similaritySearch(
SearchRequest.query("search text")
.withTopK(5)
.withSimilarityThreshold(0.7)
.withFilterExpression("key1 == 'value1'")
);
Advanced configuration example:
PgVectorStore vectorStore = PgVectorStore.builder(jdbcTemplate, embeddingModel)
.schemaName("custom_schema")
.vectorTableName("custom_vectors")
.distanceType(PgDistanceType.NEGATIVE_INNER_PRODUCT)
.removeExistingVectorStoreTable(true)
.initializeSchema(true)
.maxDocumentBatchSize(1000)
.build();
Database Requirements:
- PostgreSQL with pgvector extension installed
- Required extensions: vector, hstore, uuid-ossp
- Table schema with id (uuid), content (text), metadata (json), and embedding (vector) columns
Distance Types:
- COSINE_DISTANCE: Default, suitable for most use cases
- EUCLIDEAN_DISTANCE: L2 distance between vectors
- NEGATIVE_INNER_PRODUCT: Best performance for normalized vectors (e.g., OpenAI embeddings)
Index Types:
- HNSW: Default, better query performance but slower builds and more memory
- IVFFLAT: Faster builds, less memory, but lower query performance
- NONE: Exact search without indexing
- Since:
- 1.0.0
- Author:
- Christian Tzolov, Josh Long, Muthukumaran Navaneethakrishnan, Thomas Vitale, Soby Chacko, Sebastien Deleuze, Jihoon Kim, YeongMin Song, Jonghoon Park
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic enumDefaults to CosineDistance.static enumThe ID type for the Pg vector store schema.static enumBy default, pgvector performs exact nearest neighbor search, which provides perfect recall.static final classNested classes/interfaces inherited from interface org.springframework.ai.vectorstore.VectorStore
VectorStore.Builder<T extends VectorStore.Builder<T>> -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final PgVectorStore.PgIdTypestatic final Stringstatic final booleanstatic final Stringstatic final Stringstatic final intstatic final intstatic final intFields inherited from class org.springframework.ai.vectorstore.observation.AbstractObservationVectorStore
batchingStrategy, embeddingModel -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotected -
Method Summary
Modifier and TypeMethodDescriptionvoidbuilder(org.springframework.jdbc.core.JdbcTemplate jdbcTemplate, EmbeddingModel embeddingModel) createObservationContextBuilder(String operationName) Create a newVectorStoreObservationContext.Builderinstance.voidPerform the actual add operation.voidPerform the actual delete operation.protected voiddoDelete(Filter.Expression filterExpression) Template method for concrete implementations to provide filter-based deletion logic.doSimilaritySearch(SearchRequest request) Perform the actual similarity search operation.embeddingDistance(String query) <T> Optional<T> Returns the native client if available in this vector store implementation.Methods inherited from class org.springframework.ai.vectorstore.observation.AbstractObservationVectorStore
add, delete, delete, similaritySearchMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.springframework.ai.document.DocumentWriter
writeMethods inherited from interface org.springframework.ai.vectorstore.VectorStore
accept, delete, getNameMethods inherited from interface org.springframework.ai.vectorstore.VectorStoreRetriever
similaritySearch
-
Field Details
-
OPENAI_EMBEDDING_DIMENSION_SIZE
public static final int OPENAI_EMBEDDING_DIMENSION_SIZE- See Also:
-
INVALID_EMBEDDING_DIMENSION
public static final int INVALID_EMBEDDING_DIMENSION- See Also:
-
DEFAULT_TABLE_NAME
- See Also:
-
DEFAULT_ID_TYPE
-
DEFAULT_VECTOR_INDEX_NAME
- See Also:
-
DEFAULT_SCHEMA_NAME
- See Also:
-
DEFAULT_SCHEMA_VALIDATION
public static final boolean DEFAULT_SCHEMA_VALIDATION- See Also:
-
MAX_DOCUMENT_BATCH_SIZE
public static final int MAX_DOCUMENT_BATCH_SIZE- See Also:
-
filterExpressionConverter
-
-
Constructor Details
-
PgVectorStore
- Parameters:
builder-VectorStore.Builderfor pg vector store
-
-
Method Details
-
getDistanceType
-
builder
public static PgVectorStore.PgVectorStoreBuilder builder(org.springframework.jdbc.core.JdbcTemplate jdbcTemplate, EmbeddingModel embeddingModel) -
doAdd
Description copied from class:AbstractObservationVectorStorePerform the actual add operation.- Specified by:
doAddin classAbstractObservationVectorStore- Parameters:
documents- the documents to add
-
doDelete
Description copied from class:AbstractObservationVectorStorePerform the actual delete operation.- Specified by:
doDeletein classAbstractObservationVectorStore- Parameters:
idList- the list of document IDs to delete
-
doDelete
Description copied from class:AbstractObservationVectorStoreTemplate method for concrete implementations to provide filter-based deletion logic.- Overrides:
doDeletein classAbstractObservationVectorStore- Parameters:
filterExpression- Filter expression to identify documents to delete
-
doSimilaritySearch
Description copied from class:AbstractObservationVectorStorePerform the actual similarity search operation.- Specified by:
doSimilaritySearchin classAbstractObservationVectorStore- Parameters:
request- the search request- Returns:
- the list of documents that match the query request conditions
-
embeddingDistance
-
afterPropertiesSet
public void afterPropertiesSet()- Specified by:
afterPropertiesSetin interfaceorg.springframework.beans.factory.InitializingBean
-
createObservationContextBuilder
Description copied from class:AbstractObservationVectorStoreCreate a newVectorStoreObservationContext.Builderinstance.- Specified by:
createObservationContextBuilderin classAbstractObservationVectorStore- Parameters:
operationName- the operation name- Returns:
- the observation context builder
-
getNativeClient
Description copied from interface:VectorStoreReturns the native client if available in this vector store implementation. Note on usage: 1. Returns empty Optional when no native client is available 2. Due to Java type erasure, runtime type checking is not possible Example usage: When working with implementation with known native client: Optionalclient = vectorStore.getNativeClient(); Note: Using Optionalinvalid input: '<'?> will return the native client if one exists, rather than an empty Optional. For type safety, prefer using the specific client type. - Specified by:
getNativeClientin interfaceVectorStore- Type Parameters:
T- The type of the native client- Returns:
- Optional containing native client if available, empty Optional otherwise
-