使用 JDBC Vector Store 连接器

概述

JDBC 矢量存储是特定于 Java 的功能,仅适用于 Java 应用程序。

概述

JDBC 矢量存储是特定于 Java 的功能,仅适用于 Java 应用程序。

概述

JDBC 矢量存储连接器可用于访问和管理 SQL 数据库中的数据。 连接器具有以下特征。

功能区域 支持
集合映射到 SQL 数据库表
支持的 SQL 数据源
  • PostgreSQL
  • MySQL
  • SQLite
  • HSQLDB
支持的键属性类型 字符串
支持的数据属性类型
  • 字符串
  • int、Integer
  • long、Long
  • double、Double
  • float、Float
  • boolean、Boolean
  • OffsetDateTime
支持的向量属性类型 列表浮点数<>
支持的索引类型
  • PostgreSQL:Hnsw、IVFFlat、Flat
  • MySQL:平面
  • SQLite:平面
  • HSQLDB:平面
支持的距离函数
  • CosineDistance
  • DotProductSimilarity
  • EuclideanDistance
支持的筛选器子句
  • AnyTagEqualTo
  • EqualTo
支持记录中的多个向量
是否支持Filterable?
是否支持FullTextSearchable?
storageName 受支持? 否,请改用 @JsonProperty

限制

PostgreSQL 利用 pgvector 矢量索引和搜索,提供近似搜索功能。 其他提供程序缺乏对索引的支持,仅提供详尽的矢量搜索。

入门

通过在 Maven 项目中添加以下依赖项 pom.xml,在 Maven 项目中包括最新版本的语义内核 JDBC 连接器:

<dependency>
    <groupId>com.microsoft.semantic-kernel</groupId>
    <artifactId>semantickernel-data-jdbc</artifactId>
    <version>[LATEST]</version>
</dependency>

然后,可以使用类创建矢量存储实例 JDBCVectorStore ,并将数据源作为参数。

import com.microsoft.semantickernel.data.jdbc.JDBCVectorStore;
import com.microsoft.semantickernel.data.jdbc.JDBCVectorStoreOptions;
import com.microsoft.semantickernel.data.jdbc.JDBCVectorStoreRecordCollection;
import com.microsoft.semantickernel.data.jdbc.JDBCVectorStoreRecordCollectionOptions;
import com.microsoft.semantickernel.data.jdbc.mysql.MySQLVectorStoreQueryProvider;
import org.postgresql.ds.PGSimpleDataSource;

public class Main {
    public static void main(String[] args) {
        // Configure the data source
        PGSimpleDataSource dataSource = new PGSimpleDataSource();
        dataSource.setUrl("jdbc:postgresql://localhost:5432/sk");
        dataSource.setUser("postgres");
        dataSource.setPassword("root");

        // Build a query provider
        // Other available query providers are PostgreSQLVectorStoreQueryProvider, SQLiteVectorStoreQueryProvider
        // and HSQDBVectorStoreQueryProvider
        var queryProvider = MySQLVectorStoreQueryProvider.builder()
                .withDataSource(dataSource)
                .build();

        // Build a vector store
        var vectorStore = JDBCVectorStore.builder()
                .withDataSource(dataSource)
                .withOptions(JDBCVectorStoreOptions.builder()
                        .withQueryProvider(queryProvider)
                        .build())
                .build();
    }
}

也可以直接创建集合。

var collection = new JDBCVectorStoreRecordCollection<>(
    dataSource,
    "skhotels",
    JDBCVectorStoreRecordCollectionOptions.<Hotel>builder()
        .withRecordClass(Hotel.class)
        .build()
);