Функция vector_search

Область применения:отмечено Databricks SQL

Внимание

Эта функция предоставляется в режиме общедоступной предварительной версии.

Эта vector_search() функция позволяет запрашивать индекс векторного поиска Mosaic AI с помощью SQL.

Требования

  • Эта функция недоступна в классических хранилищах SQL.
  • Дополнительные сведения см. на странице цен на Databricks SQL.
  • Эта функция доступна в регионах , где поддерживается Векторного Поиска Mosaic AI.

Синтаксис

В Databricks Runtime 15.3 и более поздних версиях используйте query_text или query_vector укажите, что нужно найти в индексе.

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

В Databricks Runtime 15.2 и ниже можно query указать, что следует искать в индексе.

SELECT * FROM vector_search(
  index, query, num_results
)

Аргументы

Все аргументы должны передаваться по имени, например vector_search(index => indexName, query_text => queryText).

  • index STRING: константа, полное имя существующего индекса векторного поиска в той же рабочей области для вызовов. Определяющий объект должен иметь Select разрешение на индекс.
  • Используйте одно из следующих действий, чтобы указать выражение для поиска в индексе:
    • Для Databricks Runtime 15.3 или более поздней версии используйте query_text для поиска определенной строки текста в столбце источника вашего Delta Sync Index. Запрос должен быть STRING выражением строки для поиска в индексе.
    • Для Databricks Runtime 15.3 или более поздней версии используйте query_vector для поиска определенного вектора в столбце встраивания векторов вашего индекса Delta Sync. Этот аргумент является обязательным для поиска индекса разностной синхронизации с помощью самоуправляемых векторов. Запрос должен быть выражением ARRAY<FLOAT>, ARRAY<DOUBLE>или ARRAY<DECIMAL(_, _)> вектора внедрения для поиска в индексе.
    • Для Databricks Runtime 15.2 или ниже используйте query, чтобы указать строку для поиска в индексе.
  • num_results (необязательно): целочисленная константа, максимальное число возвращаемых записей. Значение по умолчанию равно 10.
  • query_type(необязательно): тип поиска, который требуется выполнить в индексе векторного поиска. Значение по умолчанию, ANN если не указано явно.
    • Если значение query_type имеет значение ANN , то query_textquery_vector или должно быть указано для выполнения приблизительного ближайшего поиска соседа или поиска сходства.
    • Если значение query_type имеет значение HYBRID, query_text необходимо указать. Вы можете указать оба query_text варианта и query_vector для гибридного поиска. Гибридный поиск в этом экземпляре означает сочетание поиска сходства и поиска ключевых слов, где поиск по ключевым словам использует литеральный текст в качестве целевого объекта.

В следующей таблице приведены сведения о том, какие аргументы можно использовать при наличии индекса Delta Sync с моделью внедрения:

query_type query_text query_vector Description
ANN (также известный как приблизительный ближайший сосед или поиск сходства)
  • Для поиска сходства определенной строки текста или вектора можно указать query_text.
  • Внедрение можно вычислить query_textавтоматически и использовать для поиска сходства, поэтому не нужно указывать query_vector.
ANN (также известный как приблизительный ближайший сосед или поиск сходства) Используется query_vector для поиска сходства.
Гибридный
  • Используется query_text для поиска ключевых слов. Поиск ключевых слов использует литеральный текст в качестве целевого объекта, поэтому query_text требуется.
  • Внедрение можно вычислить query_textавтоматически и использовать для поиска сходства, поэтому не нужно указывать query_vector.
Гибридный Используется query_text для поиска ключевых слов и используется query_vector для поиска сходства.

В следующей таблице описаны различные сценарии и аргументы, которые можно использовать при наличии индекса разностной синхронизации без модели внедрения.

query_type query_text query_vector Description
ANN (также называется приблизительным ближайшим соседом или поиском сходства) Используетсяquery_vector для поиска сходства. Для поиска сходства требуется вектор внедрения в качестве целевого объекта поиска. Так как модель внедрения недоступна в этом сценарии для вычисления вектора внедрения, необходимо предоставить ее.
Гибридный Для гибридного поиска определенной строки текста и вектора укажите оба query_text и query_vector.

Возвраты

Таблица верхних соответствующих записей из индекса. Все столбцы индекса включены.

Примеры

В следующих разделах показаны примеры запросов SQL для различных поисковых запросов индекса.

Гибридные поисковые запросы

Следующий пример гибридного поиска объединяет следующие типы поиска, чтобы найти предоставленные термины в тексте или метаданных индекса векторного поиска:

  • Поиск сходства векторов: поиск аналогичного семантического значения для Wi-Fi issues.
  • Поиск по ключевым словам: поиск Wi-Fi issues LMP-9R2 по индексу ключевого слова.
SELECT * FROM vector_search(
  index => 'main.support_docs.index',
  query_text => 'Wi-Fi issues LMP-9R2',
  query_type => 'HYBRID',
  num_results => 3)
doc_id title product_code
1403 руководство по устранению неполадок Wi-Fi — LMP-9R2 LMP-9R2
1332 Известные проблемы с подключением для устройств LMP-9R2 LMP-9R2
1271 Общее руководство по устранению неполадок Wi-Fi LMP-8R2

В следующем примере гибридного поиска указывается как для термина, query_textтак query_vector и Wi-Fi issues LMP-9R2 для термина. В этом примере поиск ключевых слов лучше работает на собственных терминах, уникальных для компании (например, LMP-9R2), в то время как векторный поиск, который обычно обучен на общедоступных наборах данных, не распознает такие термины, как LMP-9R2.


SELECT * FROM vector_search(
  index => 'main.support_docs.index',
  query_text => 'Wi-Fi issues LMP-9R2',
  query_vector => array( 0.0213, 0.1045, 0.0871, 0.0562, 0.1459, ... 0.0131),-- a self computed embedding of the `query_text` param
  query_type => 'HYBRID',
  num_results => 3 )

doc_id title product_code
1403 руководство по устранению неполадок Wi-Fi — LMP-9R2 LMP-9R2
1332 Известные проблемы с подключением для устройств LMP-9R2 LMP-9R2
1271 Общее руководство по устранению неполадок Wi-Fi LMP-8R2

Текстовые запросы на индексы с внедрением исходных столбцов

Выполните поиск по индексу номеров SKU продукта, чтобы найти аналогичные продукты по имени. В следующем примере используется query_text, который поддерживается только в Databricks Runtime 15.3 и выше. Для Databricks Runtime 15.2 и ниже используйте query вместо query_text.


SELECT * FROM VECTOR_SEARCH(index => "main.db.my_index", query_text => "iphone", num_results => 2)
идентификатор Название продукта
10 iPhone
20 iPhone SE

В следующем примере выполняется поиск нескольких терминов одновременно с помощью подзапроса 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 идентификатор_запроса search.id поиск.название_продукта
iphone 1 10 iPhone 10
iphone 1 20 iPhone SE
пиксель 8 2 30 Пиксель 8
пиксель 8 2 40 Пиксель 8a

Текстовые запросы на индексы с внедрением исходных столбцов

Выполните поиск по индексу изображений с предвычисленными встраиваниями, чтобы найти аналогичные изображения по встраиваниям. В следующем примере используется query_vector, который поддерживается только в Databricks Runtime 15.3 и выше. Для Databricks Runtime 15.2 и ниже используйте query вместо 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)
идентификатор имя_изображения встраивание изображения
28 horse.jpg [0.46, -0.34, 0.77, 0.21]
двадцать семь donkey.jpg [0.44, -0.36, 0.79, 0.23]
5 elk.jpg [0.23, -0.44, 0.77, 0.80]

В следующем примере выполняется поиск нескольких терминов одновременно с помощью подзапроса 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
встраивание запроса search.id поиск.имя_изображения поиск встраивания изображения
[0.45, -0.35, 0.78, 0.22] двадцать семь 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]

Ограничения

Следующие ограничения применяются во время предварительной версии: