Udostępnij za pomocą


VECTOR_SEARCH (Transact-SQL) (wersja zapoznawcza)

Dotyczy do: SQL Server 2025 (17.x) Azure SQL DatabaseSQL database in Microsoft Fabric

Wyszukaj wektory podobne do danych wektorów zapytań przy użyciu przybliżonego algorytmu wyszukiwania wektorów najbliższych sąsiadów. Aby dowiedzieć się więcej o tym, jak działa indeksowanie wektorów i wyszukiwanie wektorów oraz różnice między dokładnym i przybliżonym wyszukiwaniem, zapoznaj się z indeksami wyszukiwania wektorowego i wektorów w a aparatu bazy danych SQL.

Usługa Azure SQL Database i baza danych SQL w Fabric

Funkcja jest dostępna w wersji podglądowej. Przed rozpoczęciem korzystania z niego zapoznaj się z bieżącymi ograniczeniami .

Uwaga / Notatka

Jako funkcja w wersji zapoznawczej technologia przedstawiona w tym artykule podlega dodatkowym warunkom użytkowania dla wersji zapoznawczych platformy Microsoft Azure.

Funkcja podglądowa SQL Server 2025

W SQL Server 2025 funkcja ta jest w podglądzie i może ulec zmianie. Aby móc korzystać z tej funkcji, należy włączyć konfigurację PREVIEW_FEATURESw zakresie bazy danych.

Przed rozpoczęciem korzystania z niego zapoznaj się z bieżącymi ograniczeniami .

Syntax

Transact-SQL konwencje składni

VECTOR_SEARCH(
    TABLE = object [ AS source_table_alias ]
    , COLUMN = vector_column
    , SIMILAR_TO = query_vector
    , METRIC = { 'cosine' | 'dot' | 'euclidean' }
    , TOP_N = k
) [ AS result_table_alias ]

Arguments

TABELA = obiekt [JAK source_table_alias]

Tabela, na której jest wykonywane wyszukiwanie. Musi to być tabela podstawowa. Widoki, tabele tymczasowe, zarówno lokalne, jak i globalne, nie są obsługiwane.

KOLUMNA = vector_column

Kolumna wektorowa, w której jest wykonywane wyszukiwanie. Kolumna musi być typem danych wektorowych .

SIMILAR_TO = query_vector

Wektor używany do wyszukiwania. Musi to być zmienna lub kolumna typu wektora .

METRIC = { 'cosine' | 'dot' | "euclidean" }

Metryka odległości używana do obliczania odległości między wektorem zapytania a wektorami w określonej kolumnie. Indeks ANN (Przybliżony najbliższy sąsiad) jest używany tylko wtedy, gdy zostanie znaleziony pasujący indeks ANN z tą samą metryką i w tej samej kolumnie. Jeśli nie ma żadnych zgodnych indeksów ANN, zostanie zgłoszone ostrzeżenie i zostanie użyty algorytm KNN (k najbliższego sąsiada).

TOP_N = <k>

Maksymalna liczba podobnych wektorów, które muszą być zwracane. Musi to być dodatnia liczba całkowita.

result_table_alias

Alias jest używany do odwołowania się do zestawu wyników.

Zwracanie zestawu wyników

Zestaw wyników zwracany przez VECTOR_SEARCH funkcję obejmuje:

  • Wszystkie kolumny z tabeli określonej w argumencie TABLE .

  • Dodatkowa kolumna o nazwie distance, która reprezentuje odległość między wektorem w kolumnie określonej przez COLUMN argument i wektor podany w argumencie SIMILAR_TO .

Kolumna odległości jest generowana przez VECTOR_SEARCH samą funkcję, podczas gdy wszystkie inne kolumny pochodzą z tabeli, do których TABLE odwołuje się argument .

Jeśli używasz aliasu dla tabeli w argumencie TABLE , musisz użyć tego samego aliasu, aby odwołać się do jego kolumn w instrukcji SELECT . Nie można użyć aliasu przypisanego do do odwołań do VECTOR_SEARCH kolumn z tabeli określonej w pliku TABLE. To zachowanie jest łatwiejsze do zrozumienia, jeśli myślisz o zestawie wyników utworzonym przez pobranie danych wyjściowych VECTOR_SEARCH i scalenie go z danymi tabeli.

Jeśli tabela określona w TABLE argumencie zawiera już kolumnę o nazwie distance, zachowanie będzie podobne do sprzężenia SQL między dwiema tabelami, które współużytkują nazwę kolumny. W takich przypadkach należy użyć aliasów tabeli, aby uściślić odwołania do kolumn — w przeciwnym razie zostanie zgłoszony błąd.

Limitations

Bieżąca wersja zapoznawcza ma następujące ograniczenia:

Tylko po filtrze

Wyszukiwanie wektorowe odbywa się przed zastosowaniem dowolnego predykatu. Dodatkowe predykaty są stosowane tylko po zwracaniu najbardziej podobnych wektorów. Poniższy przykład zwraca 10 pierwszych wierszy z osadzanymi najbardziej podobnymi do wektora @qvzapytania , a następnie stosuje predykat określony w klauzuli WHERE . Jeśli żadna z 10 wierszy skojarzonych z wektorami zwróconymi przez wyszukiwanie wektorowe ma kolumnę accepted równą 1, wynik jest pusty.

SELECT TOP (10) s.id,
                s.title,
                r.distance
FROM VECTOR_SEARCH(
         TABLE = dbo.sessions AS s,
         COLUMN = embedding,
         SIMILAR_TO = @qv,
         METRIC = 'cosine',
         TOP_N = 10
     ) AS r
WHERE accepted = 1
ORDER BY r.distance;

VECTOR_SEARCH nie można używać w widokach

VECTOR_SEARCH Nie można jej używać w treści widoku.

Examples

Przykład 1

W poniższym przykładzie znaleziono 10 najbardziej podobnych artykułów do Pink Floyd music style tabeli wikipedia_articles_embeddings .

DECLARE @qv VECTOR(1536) = AI_GENERATE_EMBEDDING(N'Pink Floyd music style' USE MODEL Ada2Embeddings);

SELECT TOP (10) s.id,
                s.title,
                r.distance
FROM VECTOR_SEARCH(
        TABLE = [dbo].[wikipedia_articles_embeddings] as t,
        COLUMN = [content_vector],
        SIMILAR_TO = @qv,
        METRIC = 'cosine',
        TOP_N = 10
    ) AS s
ORDER BY s.distance

Przykład 2

Tak samo jak w przykładzie 1, ale tym razem wektory zapytań pochodzą z innej tabeli zamiast zmiennej.

CREATE TABLE #t
(
    id INT,
    q NVARCHAR (MAX),
    v VECTOR(1536)
);

INSERT INTO #t
SELECT id,
       q,
       AI_GENERATE_EMBEDDINGS(q USE MODEL Ada2Embeddings)
FROM (VALUES (1, N'four legged furry animal'),
             (2, N'pink floyd music style')
     ) AS S(id, q);

SELECT TOP (10) t.id,
                s.distance,
                t.title
FROM #t AS qv
    CROSS APPLY VECTOR_SEARCH(
        TABLE = [dbo].[wikipedia_articles_embeddings] AS t,
        COLUMN = [content_vector],
        SIMILAR_TO = qv.v,
        METRIC = 'cosine',
        TOP_N = 10
    ) AS s
WHERE qv.id = 2
ORDER BY s.distance;

Przykład 3

Podstawowy przykład kompleksowego użycia CREATE VECTOR INDEX i powiązanej VECTOR_SEARCH funkcji. Osadzanie są wyśmiewane. W rzeczywistym scenariuszu osadzanie jest generowane przy użyciu modelu osadzania i AI_GENERATE_EMBEDDINGS lub zewnętrznej biblioteki, takiej jak zestaw OpenAI SDK.

Poniższy blok kodu demonstruje VECTOR_SEARCH funkcję z pozornymi osadzaniami:

  1. Włącza flagę śledzenia niezbędną w bieżącej wersji zapoznawczej.
  2. Utwórz przykładową tabelę dbo.Articles z kolumną embedding z wektorem typu danych (5).
  3. Wstaw przykładowe dane z pozorowanym osadzaniem danych.
  4. Utwórz indeks wektora w pliku dbo.Articles.embedding.
  5. Demonstruj wyszukiwanie podobieństwa wektorów za pomocą VECTOR_SEARCH funkcji .
-- Step 0: Enable Preview Feature
ALTER DATABASE SCOPED CONFIGURATION
SET PREVIEW_FEATURES = ON;
GO

-- Step 1: Create a sample table with a VECTOR(5) column
CREATE TABLE dbo.Articles
(
    id INT PRIMARY KEY,
    title NVARCHAR(100),
    content NVARCHAR(MAX),
    embedding VECTOR(5) -- mocked embeddings
);
GO

-- Step 2: Insert sample data
INSERT INTO Articles (id, title, content, embedding)
VALUES (1, 'Intro to AI', 'This article introduces AI concepts.', '[0.1, 0.2, 0.3, 0.4, 0.5]'),
       (2, 'Deep Learning', 'Deep learning is a subset of ML.', '[0.2, 0.1, 0.4, 0.3, 0.6]'),
       (3, 'Neural Networks', 'Neural networks are powerful models.', '[0.3, 0.3, 0.2, 0.5, 0.1]'),
       (4, 'Machine Learning Basics', 'ML basics for beginners.', '[0.4, 0.5, 0.1, 0.2, 0.3]'),
       (5, 'Advanced AI', 'Exploring advanced AI techniques.', '[0.5, 0.4, 0.6, 0.1, 0.2]');
GO

-- Step 3: Create a vector index on the embedding column
CREATE VECTOR INDEX vec_idx ON Articles(embedding)
WITH (METRIC = 'cosine', TYPE = 'diskann');
GO

-- Step 4: Perform a vector similarity search
DECLARE @qv VECTOR(5) = '[0.3, 0.3, 0.3, 0.3, 0.3]';
SELECT TOP(3)
    t.id,
    t.title,
    t.content,
    s.distance
FROM
    VECTOR_SEARCH(
        TABLE = Articles AS t,
        COLUMN = embedding,
        SIMILAR_TO = @qv,
        METRIC = 'cosine',
        TOP_N = 3
    ) AS s
ORDER BY s.distance, t.title;