Spring AI 中的 pgvector 向量数据库集成了 PostgreSQL 的 pgvector 扩展,提供向量存储和搜索能力。

概述

pgvector 向量数据库支持:

  • 基于 PostgreSQL 的向量存储
  • 基于 SQL 的向量操作
  • 全文搜索集成
  • 事务支持

特性

PostgreSQL

PostgreSQL 集成

SQL

基于 SQL 的操作

事务

事务支持

搜索

全文搜索

实现

基本设置

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-pgvector-vectordb</artifactId>
    <version>${spring-ai.version}</version>
</dependency>

配置

# pgvector 向量数据库配置
spring.ai.pgvector.vectordb.enabled=true
spring.ai.pgvector.vectordb.url=jdbc:postgresql://localhost:5432/vectordb
spring.ai.pgvector.vectordb.username=postgres
spring.ai.pgvector.vectordb.password=postgres
spring.ai.pgvector.vectordb.table-name=vectors

用法

@Service
public class PgVectorService {
    private final PgVectorClient vectorClient;

    public PgVectorService(PgVectorClient vectorClient) {
        this.vectorClient = vectorClient;
    }

    public void storeVector(String id, float[] vector, Map<String, Object> metadata) {
        vectorClient.store(id, vector, metadata);
    }

    public List<SearchResult> searchSimilar(float[] queryVector, int k) {
        return vectorClient.search(queryVector, k);
    }
}

向量操作

1. 向量存储

@Configuration
public class PgVectorStorageConfig {
    @Bean
    public VectorStorage pgVectorStorage(PgVectorProperties properties) {
        return new PgVectorStorage(properties);
    }
}

2. 相似性搜索

@Configuration
public class PgVectorSimilaritySearchConfig {
    @Bean
    public SimilaritySearch pgVectorSimilaritySearch(PgVectorProperties properties) {
        return new PgVectorSimilaritySearch(properties);
    }
}

3. 表管理

@Service
public class TableService {
    private final PgVectorClient vectorClient;

    public void createTable(String name, int dimension) {
        vectorClient.createTable(name, dimension);
    }

    public void dropTable(String name) {
        vectorClient.dropTable(name);
    }
}

高级特性

自定义表配置

@Configuration
public class TableConfig {
    @Bean
    public TableConfig tableConfig() {
        return TableConfig.builder()
            .name("custom_vectors")
            .vectorColumn("vector")
            .metadataColumns(Arrays.asList("title", "content"))
            .build();
    }
}

索引管理

@Configuration
public class IndexConfig {
    @Bean
    public IndexConfig indexConfig() {
        return IndexConfig.builder()
            .name("vector_idx")
            .type(IndexType.IVFFLAT)
            .dimension(1536)
            .build();
    }
}

扩展管理

@Configuration
public class ExtensionConfig {
    @Bean
    public ExtensionConfig extensionConfig() {
        return ExtensionConfig.builder()
            .name("vector")
            .version("0.5.1")
            .build();
    }
}

监控

management.endpoints.web.exposure.include=pgvector-vectordb
management.endpoint.pgvector-vectordb.enabled=true

最佳实践

使用 pgvector 向量数据库时,请考虑以下最佳实践:

  • 表设计:设计高效的表结构
  • 索引管理:优化索引配置
  • 扩展版本:保持 pgvector 更新
  • 资源管理:配置资源分配
  • 监控:设置全面的监控

故障排除

常见问题及解决方案:

  1. 连接问题

    • 验证连接 URL
    • 检查凭据
    • 查看网络设置
  2. 性能问题

    • 优化表结构
    • 配置索引
    • 查看查询模式
  3. 存储问题

    • 监控表大小
    • 执行清理
    • 查看保留策略

文档有误?请协助编辑

发现文档问题?点击此处直接在 GitHub 上编辑并提交 PR,帮助我们改进文档!