Compartilhar via


Usando o conector do JDBC Vector Store

Visão geral

O armazenamento vetorial JDBC é um recurso específico do Java, disponível apenas para aplicativos Java.

Visão geral

O armazenamento vetorial JDBC é um recurso específico do Java, disponível apenas para aplicativos Java.

Visão geral

O conector do JDBC Vector Store pode ser usado para acessar e gerenciar dados em bancos de dados SQL. O conector tem as seguintes características.

Área de recurso Suporte
A coleção é mapeada para Tabela de Banco de Dados SQL
Fontes de dados SQL com suporte
  • PostgreSQL
  • MySQL
  • SQLite
  • HSQLDB
Tipos de propriedade de chave com suporte String
Tipos de propriedade de dados com suporte
  • String
  • int, Inteiro
  • longo, longo
  • duplo, duplo
  • flutuador, flutuador
  • booleano, booleano
  • DeslocamentoData/Hora
Tipos de propriedade de vetor com suporte Flutuação da lista<>
Tipos de índice com suporte
  • PostgreSQL: Hnsw, IVFFlat, Flat
  • MySQL: Plano
  • SQLite: Plano
  • HSQLDB: Plano
Funções de distância suportadas
  • Distância do cosseno
  • DotProductSimilarity
  • Distância Euclidiana
Cláusulas de filtro com suporte
  • AnyTagEqualTo
  • EqualTo
Suporta vários vetores em um registro Sim
isFilterable suportado? Sim
isFullTextSearchable suportado? Não
storageName suportado? Não, use @JsonProperty em vez disso.

Limitações

O PostgreSQL aproveita pgvector a indexação e a pesquisa de vetores, oferecendo recursos de pesquisa aproximados de forma exclusiva. Outros provedores não têm suporte para indexação, fornecendo apenas pesquisa vetorial exaustiva.

Introdução

Inclua a versão mais recente do conector JDBC do Kernel Semântico em seu projeto Maven adicionando a seguinte dependência ao seu pom.xml:

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

Em seguida, você pode criar uma instância de armazenamento de vetores usando a JDBCVectorStore classe, tendo a fonte de dados 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();
    }
}

Você também pode criar uma coleção diretamente.

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