Udostępnij za pośrednictwem


Korzystanie z łącznika magazynu wektorów JDBC

Omówienie

Magazyn wektorów JDBC to funkcja specyficzna dla języka Java dostępna tylko dla aplikacji Java.

Omówienie

Magazyn wektorów JDBC to funkcja specyficzna dla języka Java dostępna tylko dla aplikacji Java.

Omówienie

Łącznik magazynu wektorów JDBC może służyć do uzyskiwania dostępu do danych w bazach danych SQL i zarządzania nimi. Łącznik ma następujące cechy.

Obszar funkcji Pomoc techniczna
Mapowania kolekcji na Tabela bazy danych SQL
Obsługiwane źródła danych SQL
  • PostgreSQL
  • MySQL
  • SQLite
  • HSQLDB
Obsługiwane typy właściwości kluczy String
Obsługiwane typy właściwości danych
  • String
  • int, liczba całkowita
  • długi, długi
  • podwójna, podwójna
  • float, float
  • wartość logiczna, wartość logiczna
  • OffsetDateTime
Obsługiwane typy właściwości wektorów Lista<zmiennoprzecinkowa>
Obsługiwane typy indeksów
  • PostgreSQL: Hnsw, IVFFlat, Flat
  • MySQL: Płaska
  • SQLite: Płaski
  • HSQLDB: Płaska
Obsługiwane funkcje odległości
  • CosineDistance
  • DotProductSimilarity
  • EuclideanDistance
Obsługiwane klauzule filtru
  • AnyTagEqualTo
  • EqualTo
Obsługuje wiele wektorów w rekordzie Tak
isFilterable supported? Tak
czy jest obsługiwany program isFullTextSearchable? Nie.
nazwa_magazynu jest obsługiwana? Nie, użyj @JsonProperty zamiast tego.

Ograniczenia

Baza danych PostgreSQL korzysta pgvector z funkcji indeksowania i wyszukiwania wektorowego, co unikatowo oferuje przybliżone możliwości wyszukiwania. Inni dostawcy nie obsługują indeksowania, zapewniając tylko wyczerpujące wyszukiwanie wektorów.

Wprowadzenie

Dołącz najnowszą wersję łącznika JDBC jądra semantycznego w projekcie maven, dodając następującą zależność do elementu pom.xml:

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

Następnie można utworzyć wystąpienie magazynu wektorów przy użyciu JDBCVectorStore klasy , używając źródła danych jako parametru.

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

Możesz również utworzyć kolekcję bezpośrednio.

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