Partilhar via


Usando o conector JDBC Vetor Store

Descrição geral

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

Descrição geral

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

Descrição geral

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

Área de funcionalidades Suporte
Mapas da coleção para Tabela do banco de dados SQL
Fontes de dados SQL suportadas
  • PostgreSQL
  • MySQL
  • SQLite
  • HSQLDB
Tipos de propriedade de chave suportados String
Tipos de propriedade de dados suportados
  • String
  • int, inteiro
  • longo, longo
  • duplo, Duplo
  • flutuar, Flutuar
  • booleano, booleano
  • OffsetDateTime
Tipos de propriedade vetorial suportados Lista<Float>
Tipos de índice suportados
  • PostgreSQL: Hnsw, IVFFlat, Plano
  • MySQL: Plano
  • SQLite: Plano
  • HSQLDB: Plano
Funções de distância suportadas
  • CosineDistância
  • DotProductSimilarity
  • Distância Euclidiana
Cláusulas de filtro suportadas
  • 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 vetorial e a pesquisa, oferecendo exclusivamente recursos de pesquisa aproximados. 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()
);