Fonction vector_search
S’applique à : 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
- Cette fonction n’est pas disponible sur les entrepôts SQL classiques.
- Pour plus d’informations, consultez la page de tarification Databricks SQL.
- Cette fonction est disponible dans les régions où Mosaic AI Vector Search est pris en charge.
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 constanteSTRING
, 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 expressionSTRING
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 uneARRAY<FLOAT>
, ouARRAY<DOUBLE>
, ouARRAY<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.
- Pour Databricks Runtime 15.3 ou version ultérieure, utilisez
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
oucolumns
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.