Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de changer d’annuaire.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer d’annuaire.
S’applique à :
Databricks SQL
Importante
Cette fonctionnalité est disponible en préversion publique.
La fonction vector_search() vous permet d’interroger un index Mosaic AI Vector Search à 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 des tarifs de 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, utilisez query_text ou query_vector spécifiez 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, utilisez query pour spécifier les éléments à rechercher dans l’index.
SELECT * FROM vector_search(
index, query, num_results
)
Les arguments
Tous les arguments doivent être passés par nom, comme vector_search(index => indexName, query_text => queryText).
-
index: constanteSTRING, nom complet d’un index de recherche vectorielle existant dans le même espace de travail pour les appels. Le definer doit avoirSelectl’autorisation 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_textpour 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 expressionSTRINGde la chaîne à rechercher dans l’index. - Pour Databricks Runtime 15.3 ou version ultérieure, utilisez
query_vectorpour rechercher un vecteur spécifique dans la colonne de vecteur d’incorporation de votre index Delta Sync. Cet argument est obligatoire pour la recherche d’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
querypour spécifier la chaîne à rechercher dans votre index.
- Pour Databricks Runtime 15.3 ou version ultérieure, utilisez
-
num_results(facultatif) : constante d'un nombre entier, nombre maximum d'enregistrements à renvoyer. La valeur par défaut est 1.0. -
query_type(facultatif) : type de recherche que vous souhaitez effectuer sur votre index de recherche vectorielle. La valeur par défaut est si elle n’estANNpas spécifiée explicitement.- Si l’objet
query_typeestANN, ouquery_textquery_vectordoit être spécifié pour effectuer une recherche voisine la plus proche ou une recherche de similarité approximative. - Si c’est
query_typeHYBRIDle cas, vousquery_textdevez le spécifier. Vous pouvez spécifier à la foisquery_textetquery_vectorpour une recherche hybride. La recherche hybride dans cette instance signifie une combinaison de recherche de similarité et de recherche de mots clés où une recherche par mot clé utilise le texte littéral comme cible.
- Si l’objet
Le tableau suivant récapitule quels arguments peuvent être utilisés lorsque vous disposez d’un index Delta Sync avec un modèle d’incorporation :
query_type |
query_text |
query_vector |
Descriptif |
|---|---|---|---|
| ANN (également appelée recherche approximative de voisin le plus proche ou de similarité) | ✓ |
|
|
| ANN (également appelée recherche approximative de voisin le plus proche ou de similarité) | ✓ | Utiliser query_vector pour une recherche de similarité. |
|
| Hybride | ✓ |
|
|
| Hybride | ✓ | ✓ | Utiliser query_text pour la recherche par mot clé et l’utiliser query_vector pour la recherche de similarité. |
Le tableau suivant décrit les différents scénarios et les arguments qui peuvent être utilisés lorsque vous disposez d’un index de synchronisation Delta sans modèle d’incorporation :
query_type |
query_text |
query_vector |
Descriptif |
|---|---|---|---|
ANN (également connu sous le nom approximatif voisin le plus proche ou recherche de similarité) |
✓ | Utiliserquery_vector pour une recherche de similarité. La recherche de similarité nécessite un vecteur d’incorporation en tant que cible de recherche. Étant donné qu’un modèle d’incorporation n’est pas disponible dans ce scénario pour calculer le vecteur d’incorporation, vous devez le fournir. |
|
| Hybride | ✓ | ✓ | Pour une recherche hybride pour une chaîne spécifique de texte et un vecteur, spécifiez à la fois query_text et query_vector. |
retourne :
Une table des premiers enregistrements correspondants 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 recherche hybride
L’exemple de recherche hybride suivant combine les types de recherche suivants pour rechercher les termes fournis dans le texte ou les métadonnées de l’index de recherche vectorielle :
- Recherche de similarité vectorielle : pour trouver une signification sémantique similaire pour
Wi-Fi issues. - Recherche de mots clés : pour rechercher
Wi-Fi issues LMP-9R2sur un index de mot clé.
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 | Guide de résolution des problèmes Wi-Fi — LMP-9R2 | LMP-9R2 |
| 1332 | Problèmes de connectivité connus pour les appareils LMP-9R2 | LMP-9R2 |
| 1271 | Guide général de résolution des problèmes Wi-Fi | LMP-8R2 |
L’exemple de recherche hybride suivant spécifie à la fois query_text et query_vector pour le terme. Wi-Fi issues LMP-9R2 Dans cet exemple, la recherche de mots clés s’effectue mieux sur les termes propriétaires propres à une entreprise (comme « LMP-9R2 » dans ce cas), tandis que la recherche vectorielle, qui sont généralement formées sur des jeux de données publics, ne reconnaît pas les termes tels que « 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 | Guide de résolution des problèmes Wi-Fi — LMP-9R2 | LMP-9R2 |
| 1332 | Problèmes de connectivité connus pour les appareils LMP-9R2 | LMP-9R2 |
| 1271 | Guide général de résolution des problèmes Wi-Fi | LMP-8R2 |
Requêtes de texte sur les index avec incorporation de colonnes sources
Recherche sur un index de références SKU de produits pour trouver des produits similaires par leur 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 |
identifiant_de_requête | search.id | recherche.nom_du_produit |
|---|---|---|---|
| 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
Recherche sur 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] |
Limitations
Les limitations suivantes s’appliquent à la préversion .
- L’interrogation des types d’index
DIRECT_ACCESSn’est pas prise en charge. - Les paramètres d’entrée
filters_jsonetcolumnsne sont pas pris en charge. - Les recherches vectorielles dont les
num_resultssont supérieurs à 100 ne sont pas prises en charge. -
vector_searchne peut pas être utilisé avec des points de terminaison de service de modèle utilisant un débit provisionné par les API Foundation Model.