Partager via


Fonction vector_search

S’applique à :coche marquée oui Databricks SQL

Important

Cette fonctionnalité est disponible en préversion publique.

La fonction vector_search() vous permet d’interroger un index de recherche vectorielle d’IA mosaïque à l’aide de SQL.

Spécifications

Syntaxe

Dans Databricks Runtime 15.3 et versions ultérieures, vous pouvez utiliser query_text ou query_vector pour spécifier les éléments à rechercher dans l’index.

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

Dans Databricks Runtime 15.2 et ci-dessous, vous pouvez utiliser query pour spécifier les éléments à rechercher dans l’index.

SELECT * FROM vector_search(
  index, query, num_results
)

Arguments

Tous les arguments doivent être passés par nom, comme vector_search(index => indexName, query_text => queryText).

  • index : une constante STRING, nom complet d’un index de recherche vectorielle existant dans le même espace de travail pour les appels. Le définisseur doit disposer de l’autorisation « Sélectionner » sur l’index.
  • Utilisez l’une des options suivantes pour spécifier l’expression à rechercher dans l’index :
    • Pour Databricks Runtime 15.3 ou version ultérieure, utilisez query_text pour rechercher une chaîne de texte spécifique dans la colonne source incorporée de votre index Delta Sync . La requête doit être une expression STRING de la chaîne à rechercher dans l’index.
    • Pour Databricks Runtime 15.3 ou version ultérieure, utilisez query_vector pour rechercher un vecteur spécifique dans la colonne de vecteur d’incorporation de votre index Delta Sync. Cet argument est requis pour rechercher un index Delta Sync à l’aide de vecteurs autogérés. La requête doit être une ARRAY<FLOAT>, ou ARRAY<DOUBLE>, ou ARRAY<DECIMAL(_, _)> expression du vecteur d’incorporation à rechercher dans l’index.
    • Pour Databricks Runtime 15.2 ou ci-dessous, utilisez query pour spécifier la chaîne à rechercher dans votre index.
  • num_results (facultatif) : une constante d'un nombre entier, le nombre maximum d'enregistrements à renvoyer. La valeur par défaut est 10.

Retours

Un tableau des enregistrements correspondants principaux de l’index. Toutes les colonnes de l’index sont incluses.

Exemples

Les sections suivantes montrent des exemples de requêtes SQL pour différentes recherches d’index.

Requêtes de texte sur les index avec incorporation de colonnes sources

Recherchez sur un index des références SKU de produit pour rechercher des produits similaires par nom. L’exemple suivant utilise query_text qui est uniquement pris en charge dans Databricks Runtime 15.3 et versions ultérieures. Pour Databricks Runtime 15.2 et ci-dessous, utilisez query au lieu de query_text.


SELECT * FROM VECTOR_SEARCH(index => "main.db.my_index", query_text => "iphone", num_results => 2)
id Nom du produit
10 iPhone
20 iPhone SE

L’exemple suivant recherche plusieurs termes en même temps à l’aide d’une sous-requête 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
pixel 8 2 30 Pixel 8
pixel 8 2 40 Pixel 8a

Requêtes de texte sur les index avec incorporation de colonnes sources

Recherchez dans un index d’images avec des descripteurs pré-calculés pour trouver des images similaires par descripteur. L’exemple suivant utilise query_vector qui est uniquement pris en charge dans Databricks Runtime 15.3 et versions ultérieures. Pour Databricks Runtime 15.2 et ci-dessous, utilisez query au lieu de 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 intégration d'image
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]

L’exemple suivant recherche plusieurs termes en même temps à l’aide d’une sous-requête 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
query_embedding 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]

Limites

Les limitations suivantes s’appliquent pendant la préversion :

  • L’interrogation des types d’index DIRECT_ACCESS n’est pas prise en charge.
  • Les paramètres d’entrée filters_json ou columns ne sont pas pris en charge.
  • La recherche vectorielle dont num_results est supérieure à 100 n’est pas prise en charge.
  • Les utilisateurs qui n’ont pas accès en lecture à la table source ne peuvent pas utiliser vector_search().
  • La recherche de similarité de mot clé hybride n’est pas prise en charge à l’aide de vector_search().
  • vector_search ne peut pas être utilisé avec des points de terminaison de service de modèle à l’aide du débit provisionné des API Foundation Model.