使用 JDBC Vector Store 连接器
概述
JDBC 矢量存储是特定于 Java 的功能,仅适用于 Java 应用程序。
概述
JDBC 矢量存储是特定于 Java 的功能,仅适用于 Java 应用程序。
概述
JDBC 矢量存储连接器可用于访问和管理 SQL 数据库中的数据。 连接器具有以下特征。
功能区域 | 支持 |
---|---|
集合映射到 | SQL 数据库表 |
支持的 SQL 数据源 |
|
支持的键属性类型 | 字符串 |
支持的数据属性类型 |
|
支持的向量属性类型 | 列表浮点数<> |
支持的索引类型 |
|
支持的距离函数 |
|
支持的筛选器子句 |
|
支持记录中的多个向量 | 是 |
是否支持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()
);