LangChain4j PGVector integration for PostgreSQL-based vector embedding storage and retrieval
—
LangChain4j PGVector is a PostgreSQL-based vector embedding storage and retrieval implementation for LangChain4j. It provides seamless integration with the PGVector extension, enabling developers to store and query vector embeddings directly in PostgreSQL databases with support for both standard cosine similarity search and hybrid search combining vector similarity with full-text keyword search.
pom.xml:<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-pgvector</artifactId>
<version>1.11.0</version>
</dependency>Or for Gradle:
implementation 'dev.langchain4j:langchain4j-pgvector:1.11.0'import dev.langchain4j.store.embedding.pgvector.PgVectorEmbeddingStore;
import dev.langchain4j.store.embedding.pgvector.PgVectorEmbeddingStore.SearchMode;
import dev.langchain4j.store.embedding.pgvector.MetadataStorageConfig;
import dev.langchain4j.store.embedding.pgvector.MetadataStorageMode;
import dev.langchain4j.store.embedding.pgvector.DefaultMetadataStorageConfig;
import dev.langchain4j.store.embedding.EmbeddingStore;
import dev.langchain4j.store.embedding.EmbeddingSearchRequest;
import dev.langchain4j.store.embedding.EmbeddingSearchResult;
import dev.langchain4j.data.embedding.Embedding;
import dev.langchain4j.data.segment.TextSegment;import dev.langchain4j.store.embedding.EmbeddingStore;
import dev.langchain4j.data.segment.TextSegment;
import dev.langchain4j.store.embedding.pgvector.PgVectorEmbeddingStore;
// Create embedding store with minimal configuration
EmbeddingStore<TextSegment> embeddingStore = PgVectorEmbeddingStore.builder()
.host("localhost")
.port(5432)
.database("postgres")
.user("my_user")
.password("my_password")
.table("my_embeddings")
.dimension(384) // Must match your embedding model's dimension
.build();
// Add embedding
String id = embeddingStore.add(embedding);
// Add embedding with text segment
String id2 = embeddingStore.add(embedding, textSegment);
// Search for similar embeddings
EmbeddingSearchRequest request = EmbeddingSearchRequest.builder()
.queryEmbedding(queryEmbedding)
.maxResults(5)
.minScore(0.7)
.build();
EmbeddingSearchResult<TextSegment> results = embeddingStore.search(request);import javax.sql.DataSource;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
// Configure connection pool
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:postgresql://localhost:5432/postgres");
config.setUsername("my_user");
config.setPassword("my_password");
config.setMaximumPoolSize(10);
DataSource dataSource = new HikariDataSource(config);
// Create embedding store with DataSource
EmbeddingStore<TextSegment> embeddingStore = PgVectorEmbeddingStore.datasourceBuilder()
.datasource(dataSource)
.table("my_embeddings")
.dimension(384)
.build();LangChain4j PGVector is built around several key components:
EmbeddingStore<TextSegment> interface, providing storage and retrieval operationsCreate and configure PgVectorEmbeddingStore instances with flexible builder patterns supporting both direct database connections and DataSource integration.
/**
* Creates a builder for PgVectorEmbeddingStore with individual connection parameters
* @return PgVectorEmbeddingStoreBuilder instance
*/
public static PgVectorEmbeddingStoreBuilder builder();
/**
* Creates a builder for PgVectorEmbeddingStore with DataSource
* @return DatasourceBuilder instance
*/
public static DatasourceBuilder datasourceBuilder();Add, remove, and manage embeddings with support for single and batch operations, including text segments and metadata.
/**
* Adds an embedding to the store with auto-generated ID
* @param embedding The embedding to be added
* @return The auto-generated ID
*/
String add(Embedding embedding);
/**
* Adds an embedding with text segment to the store
* @param embedding The embedding to be added
* @param textSegment The original content that was embedded
* @return The auto-generated ID
*/
String add(Embedding embedding, TextSegment textSegment);
/**
* Adds multiple embeddings to the store
* @param embeddings List of embeddings to be added
* @return List of auto-generated IDs
*/
List<String> addAll(List<Embedding> embeddings);
/**
* Removes a single embedding by its ID
* @param id The ID of the embedding to remove
*/
void remove(String id);
/**
* Removes all embeddings from the store
*/
void removeAll();
/**
* Removes embeddings by their IDs
* @param ids Collection of embedding IDs to remove
*/
void removeAll(Collection<String> ids);Search for similar embeddings using vector similarity (VECTOR mode) or hybrid search combining vector similarity with full-text keyword search (HYBRID mode).
/**
* Searches for the most similar embeddings
* @param request Search request containing query embedding, filters, and parameters
* @return Search results with matching embeddings
*/
EmbeddingSearchResult<TextSegment> search(EmbeddingSearchRequest request);Configure how metadata is stored and indexed in the database with three flexible storage modes.
/**
* Metadata storage mode enumeration
*/
enum MetadataStorageMode {
/** For static metadata when you know the list of keys in advance */
COLUMN_PER_KEY,
/** For dynamic metadata stored as JSON */
COMBINED_JSON,
/** For dynamic metadata stored as binary JSON (optimized for queries) */
COMBINED_JSONB
}
/**
* Creates a default metadata storage configuration
* @return Default configuration with COMBINED_JSON mode
*/
static MetadataStorageConfig defaultConfig();Metadata Storage Configuration
/**
* Search mode enumeration for PgVectorEmbeddingStore
*/
enum SearchMode {
/** Standard vector similarity search using cosine distance */
VECTOR,
/** Combines vector search with full-text keyword search using Reciprocal Rank Fusion (RRF) */
HYBRID
}/**
* PGVector EmbeddingStore Implementation
* Only cosine similarity is used for vector distance
* Only IVFFlat index type is supported
* Implements EmbeddingStore<TextSegment> interface
*/
class PgVectorEmbeddingStore implements EmbeddingStore<TextSegment> {
// Main implementation - see capabilities for methods
}Install with Tessl CLI
npx tessl i tessl/maven-dev-langchain4j--langchain4j-pgvector@1.11.0