PgVectorStore
public class PgVectorStore implements VDBStoreBase, AutoCloseable
io/agentscope/core/rag/store/PgVectorStore.java:106–1081Pg 向量存储,负责持久化与读取数据。位于 io.agentscope.core.rag.store 包,实现 VDBStoreBase、AutoCloseable。核心成员包括 create、add、search、delete、getConnection、getJdbcUrl。
PostgreSQL pgvector database store implementation.
This class provides an interface for storing and searching vectors using PostgreSQL with the pgvector extension. It implements the VDBStoreBase interface to provide a unified API for vector storage operations.
In PostgreSQL with pgvector, we use a table to store the vectors and metadata, including the document ID, chunk ID, content, and custom payload as JSONB.
This implementation uses the pgvector JDBC driver (com.pgvector:pgvector). To use this class, add the following dependencies:
`<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.7.4</version>
</dependency>
<dependency>
<groupId>com.pgvector</groupId>
<artifactId>pgvector</artifactId>
<version>0.1.6</version>
</dependency>
`
Prerequisites:
-
PostgreSQL 11+ with pgvector extension installed
-
Run: CREATE EXTENSION IF NOT EXISTS vector;
Example usage:
`// Using builder with full configuration (recommended)
try (PgVectorStore store = PgVectorStore.builder()
.jdbcUrl("jdbc:postgresql://localhost:5432/mydb")
.username("postgres")
.password("password")
.schema("my_schema") // optional, defaults to "public"
.tableName("embeddings")
.dimensions(1024)
.distanceType(PgVectorStore.DistanceType.COSINE)
.build()) {
store.add(documents).block();
List<Document> results = store.search(searchDto).block();
}
// Using static factory method (simpler, uses defaults)
try (PgVectorStore store = PgVectorStore.create(
"jdbc:postgresql://localhost:5432/mydb",
"postgres", "password", "embeddings", 1024)) {
store.add(documents).block();
List<Document> results = store.search(searchDto).block();
}
`
Note: The JDBC URL should follow PostgreSQL format:
-
jdbc:postgresql://host:port/database
-
jdbc:postgresql://localhost:5432/vectordb
嵌套类摘要Nested Class Summary
| 类Class | 类型Kind | 说明Description |
|---|---|---|
DistanceType | 枚举enum | 定义Distance 类型的枚举。 Distance types supported by pgvector. |
Builder | 类class | 构建器,用于构建并配置目标实例。 Builder for creating PgVectorStore instances with fluent configuration. |
方法摘要Method Summary
方法详情Method Detail
create
public static PgVectorStore create(String jdbcUrl, String username, String password, String tableName, int dimensions) throws VectorStoreException
创建并返回实例。
Creates a new PgVectorStore with minimal configuration.
| 名称Name | 类型Type | 说明Description |
|---|---|---|
jdbcUrl | String | JDBC URL(类型 `String`)。the PostgreSQL JDBC URL (e.g., "jdbc:postgresql://localhost:5432/mydb") |
username | String | username(类型 `String`)。the database username |
password | String | 数据库密码。the database password |
tableName | String | table 名称(类型 `String`)。the name of the table to use |
dimensions | int | 向量维度(类型 `int`)。the dimension of vectors that will be stored |
PgVectorStoreVectorStoreException可能抛出 `VectorStoreException`。Thrown when the operation cannot be completed.
io/agentscope/core/rag/store/PgVectorStore.java:256–266add
public Mono<Void> add(List<Document> documents)
设置添加。
Performs the add operation.
| 名称Name | 类型Type | 说明Description |
|---|---|---|
documents | List<Document> | 文档列表(类型 `List`)。The documents. |
Mono<Void>io/agentscope/core/rag/store/PgVectorStore.java:268–313search
public Mono<List<Document>> search(SearchDocumentDto searchDocumentDto)
设置搜索。
Performs the search operation.
| 名称Name | 类型Type | 说明Description |
|---|---|---|
searchDocumentDto | SearchDocumentDto | 搜索文档 Dto(类型 `SearchDocumentDto`)。The search document dto. |
Mono<List<Document>>io/agentscope/core/rag/store/PgVectorStore.java:315–353delete
public Mono<Boolean> delete(String docId)
删除数据。
Performs the delete operation.
| 名称Name | 类型Type | 说明Description |
|---|---|---|
docId | String | 文档标识(类型 `String`)。The doc id. |
Mono<Boolean>io/agentscope/core/rag/store/PgVectorStore.java:355–378getConnection
public Connection getConnection() throws VectorStoreException
获取连接。
Gets the underlying JDBC connection for advanced operations.
ConnectionVectorStoreException可能抛出 `VectorStoreException`。Thrown when the operation cannot be completed.
io/agentscope/core/rag/store/PgVectorStore.java:395–398getJdbcUrl
public String getJdbcUrl()
获取JDBC URL。
Gets the JDBC URL.
Stringio/agentscope/core/rag/store/PgVectorStore.java:792–794getSchema
public String getSchema()
获取模式名称。
Gets the schema name.
Stringio/agentscope/core/rag/store/PgVectorStore.java:801–803getTableName
public String getTableName()
获取 getTableName。
Gets the table name.
Stringio/agentscope/core/rag/store/PgVectorStore.java:810–812getDimensions
public int getDimensions()
获取向量维度。
Gets the vector dimensions.
intio/agentscope/core/rag/store/PgVectorStore.java:819–821getDistanceType
public DistanceType getDistanceType()
获取 getDistanceType。
Gets the distance type used for similarity search.
DistanceTypeio/agentscope/core/rag/store/PgVectorStore.java:828–830close
public void close()
关闭连接并释放相关资源。
Closes the PostgreSQL connection and releases all resources.
io/agentscope/core/rag/store/PgVectorStore.java:852–876isClosed
public boolean isClosed()
判断是否已关闭。
Checks if this store has been closed.
booleanio/agentscope/core/rag/store/PgVectorStore.java:883–885builder
public static Builder builder()
返回构建器实例。
Creates a new builder for constructing PgVectorStore instances.
Builderio/agentscope/core/rag/store/PgVectorStore.java:1049–1051嵌套类详情Nested Class Detail
DistanceType
public enum DistanceType定义Distance 类型的枚举。位于 io.agentscope.core.rag.store 包。核心成员包括 getIndexOps、getOperator、L2、INNER_PRODUCT、COSINE。
Distance types supported by pgvector.
Builder
public static class Builder构建器,用于构建并配置目标实例。位于 io.agentscope.core.rag.store 包。核心成员包括 jdbcUrl、username、password、schema、tableName、dimensions。
Builder for creating PgVectorStore instances with fluent configuration.
Example usage:
`PgVectorStore store = PgVectorStore.builder()
.jdbcUrl("jdbc:postgresql://localhost:5432/mydb")
.username("postgres")
.password("password")
.schema("my_schema")
.tableName("embeddings")
.dimensions(1024)
.distanceType(PgVectorStore.DistanceType.COSINE)
.connectionTimeoutMs(30000)
.build();
`