Compartir a través de


Uso del conector del almacén de vectores JDBC

Información general

El almacén de vectores JDBC es una característica específica de Java, disponible solo para aplicaciones Java.

Información general

El almacén de vectores JDBC es una característica específica de Java, disponible solo para aplicaciones Java.

Información general

El conector del almacén de vectores JDBC se puede usar para acceder a los datos y administrarlos en bases de datos SQL. El conector tiene las siguientes características.

Área de características Soporte técnico
La colección se asigna a Tabla de Base de datos SQL
Orígenes de datos SQL admitidos
  • PostgreSQL
  • MySQL
  • SQLite
  • HSQLDB
Tipos de propiedades de clave admitidos Cadena
Tipos de propiedad de datos admitidos
  • Cadena
  • int, Integer
  • long, Long
  • double, Double
  • float, Float
  • booleano, booleano
  • OffsetDateTime
Tipos de propiedades vectoriales admitidos List<Float>
Tipos de índice admitidos
  • PostgreSQL: Hnsw, OBJECTFlat, Flat
  • MySQL: plano
  • SQLite: Plano
  • HSQLDB: Plano
Funciones de distancia admitidas
  • CosineDistance
  • DotProductSimilarity
  • EuclideanDistance
Admite varios vectores en un registro
¿Se admite isFilterable?
¿Se admite isFullTextSearchable? No
storageName compatible? No, use @JsonProperty en su lugar.

Limitaciones

PostgreSQL aprovecha pgvector para la indexación de vectores y la búsqueda, ofreciendo funcionalidades de búsqueda aproximadas de forma única. Otros proveedores no admiten la indexación, lo que proporciona solo una búsqueda de vectores exhaustiva.

Introducción

Incluya la versión más reciente del conector JDBC del kernel semántico en el proyecto de Maven agregando la siguiente dependencia a pom.xml:

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

A continuación, puede crear una instancia de almacén de vectores mediante la JDBCVectorStore clase , teniendo el origen de datos como parámetro.

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();
    }
}

También puede crear una colección directamente.

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