Udostępnij za pośrednictwem


Funkcja vector_search

Dotyczy:zaznacz pole wyboru oznaczone jako tak Databricks SQL

Ważne

Ta funkcja jest dostępna w publicznej wersji zapoznawczej.

Funkcja vector_search() umożliwia wykonywanie zapytań względem indeksu wyszukiwania wektorów mozaiki sztucznej inteligencji przy użyciu języka SQL.

Wymagania

  • Ta funkcja nie jest dostępna w klasycznych magazynach SQL.
  • Aby uzyskać więcej informacji, zobacz stronę cennika usługi Databricks SQL.
  • Ta funkcja jest dostępna w regionach, w których jest obsługiwane wyszukiwanie wektorów mozaiki sztucznej inteligencji.

Składnia

W środowisku Databricks Runtime 15.3 lub nowszym można użyć query_text lub query_vector, aby określić, co należy wyszukać w indeksie.

SELECT * FROM vector_search(
  index,
  { query_text | query_vector },
  [ num_results ]
)

W środowisku Databricks Runtime 15.2 lub nowszym można użyć query, aby określić, co należy wyszukać w indeksie.

SELECT * FROM vector_search(
  index, query, num_results
)

Argumenty

Wszystkie argumenty muszą być przekazywane według nazwy, na przykład vector_search(index => indexName, query_text => queryText).

  • index: stała, w pełni kwalifikowana STRING nazwa istniejącego indeksu wyszukiwania wektorów w tym samym obszarze roboczym dla wywołań. Definiowanie musi mieć uprawnienie "Wybierz" w indeksie.
  • Użyj jednego z następujących elementów, aby określić wyrażenie do wyszukania w indeksie:
    • W przypadku środowiska Databricks Runtime 15.3 lub nowszego użyj query_text, aby wyszukać określony ciąg tekstu w kolumnie źródłowej indeksu Delta Sync . Zapytanie musi być wyrażeniem ciągu STRING, który należy wyszukać w indeksie.
    • W przypadku środowiska Databricks Runtime 15.3 lub nowszego użyj query_vector, aby wyszukać konkretny wektor w kolumnie wektora osadzania indeksu Delta Sync. Ten argument jest wymagany do wyszukiwania indeksu synchronizacji różnicowej przy użyciu samodzielnie zarządzanych wektorów. Zapytanie musi być wyrażeniem wektora osadzenia ARRAY<FLOAT>, ARRAY<DOUBLE>lub ARRAY<DECIMAL(_, _)>, aby wyszukać w indeksie.
    • W przypadku środowiska Databricks Runtime 15.2 lub starszego użyj query, aby określić ciąg do wyszukania w indeksie.
  • num_results (opcjonalnie): stała całkowita, maksymalna liczba rekordów do zwrócenia. Wartość domyślna to 10.

Zwraca

Tabela najważniejszych pasujących rekordów z indeksu. Wszystkie kolumny indeksu są uwzględniane.

Przykłady

W poniższych sekcjach przedstawiono przykładowe zapytania SQL dotyczące różnych wyszukiwań indeksów.

Zapytania tekstowe dotyczące indeksów z osadzanymi kolumnami źródłowymi

Wyszukaj indeks jednostek SKU produktu, aby znaleźć podobne produkty według nazwy. W poniższym przykładzie użyto query_text, która jest obsługiwana tylko w środowisku Databricks Runtime 15.3 lub nowszym. W przypadku środowiska Databricks Runtime 15.2 lub starszego użyj query zamiast query_text.


SELECT * FROM VECTOR_SEARCH(index => "main.db.my_index", query_text => "iphone", num_results => 2)
ID Nazwa produktu
10 iPhone
20 iPhone SE

Poniższy przykład wyszukuje wiele terminów jednocześnie przy użyciu podzapytania LATERAL.


SELECT
  query_txt,
  query_id,
  search.*
FROM
  query_table,
  LATERAL(
SELECT * FROM VECTOR_SEARCH(index => "main.db.my_index", query_text => query_txt, num_results => 2)
  ) as search
query_txt query_id search.id search.product_name
iPhone 1 10 iPhone 10
iPhone 1 20 iPhone SE
piksel 8 2 30 Piksel 8
piksel 8 2 40 Piksel 8a

Zapytania tekstowe dotyczące indeksów z osadzanymi kolumnami źródłowymi

Wyszukaj indeks obrazów przy użyciu wstępnie obliczonych osadzeń, aby znaleźć podobne obrazy, osadzając. W poniższym przykładzie użyto query_vector, która jest obsługiwana tylko w środowisku Databricks Runtime 15.3 lub nowszym. W przypadku Databricks Runtime w wersji 15.2 lub starszej, użyj query zamiast query_vector.


SELECT * FROM VECTOR_SEARCH(index => "main.db.my_index", query_vector => ARRAY(0.45, -0.35, 0.78, 0.22), num_results => 3)

SELECT * FROM VECTOR_SEARCH(index => "main.db.my_index", query_vector => ARRAY(0.45F, -0.35F, 0.78F, 0.22F), num_results => 3)

SELECT * FROM VECTOR_SEARCH(index => "main.db.my_index", query_vector => ARRAY(0.45D, -0.35D, 0.78D, 0.22D), num_results => 3)
id image_name osadzanie obrazu
28 horse.jpg [0.46, -0.34, 0.77, 0.21]
27 donkey.jpg [0.44, -0.36, 0.79, 0.23]
5 elk.jpg [0.23, -0.44, 0.77, 0.80]

Poniższy przykład wyszukuje wiele terminów jednocześnie przy użyciu podzapytania LATERAL.


SELECT
  query_embedding,
  search.*
FROM
  query_table,
  LATERAL(
SELECT * FROM VECTOR_SEARCH(index => "main.db.my_index", query_vector => image_embedding, num_results => 1)
  ) as search
osadzanie zapytania search.id search.image_name search_image_embedding
[0.45, -0.35, 0.78, 0.22] 27 donkey.jpg [0.46, -0.34, 0.77, 0.21]
[0.14, 0.29, 0.30, -0.90] 3 landscape.jpg [0.15, 0.30, 0.31, -0.91]
[0.23, -0.44, 0.77, 0.80] 10 golden_gate_bridge.jpg [0.28, -0.40, 0.23, 0.81]
[0.88, 0.88, 0.88, 0.88] 44 blank.jpg [0.88, 0.88, 0.88, 0.88]

Ograniczenia

W wersji zapoznawczej obowiązują następujące ograniczenia:

  • Wykonywanie zapytań dotyczących typów indeksów DIRECT_ACCESS nie jest obsługiwane.
  • Parametry filters_json wejściowe lub columns nie są obsługiwane.
  • Wyszukiwanie wektorowe z num_results większa niż 100 nie jest obsługiwane.
  • Użytkownicy, którzy nie mają prawa do odczytu tabeli źródłowej, nie mogą używać vector_search().
  • Hybrydowe wyszukiwanie podobieństwa słów kluczowych nie jest obsługiwane przy użyciu vector_search().
  • vector_search nie można używać z punktami końcowymi obsługującymi model przy użyciu interfejsów API modelu foundation aprowizowanej przepływności.