Partager via


vector_search Fonction

S’applique à :coché 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

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 : constante STRING, nom complet d’un index de recherche vectorielle existant dans le même espace de travail pour les appels. Le definer doit avoir Select l’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_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 obligatoire pour la recherche d’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) : 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’est ANN pas spécifiée explicitement.
    • Si l’objet query_type est ANN , ou query_textquery_vector doit être spécifié pour effectuer une recherche voisine la plus proche ou une recherche de similarité approximative.
    • Si c’est query_typeHYBRIDle cas, vous query_text devez le spécifier. Vous pouvez spécifier à la fois query_text et query_vector pour 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.

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é)
  • Pour une recherche de similarité pour une chaîne spécifique de texte ou un vecteur, vous pouvez spécifier query_text.
  • L’incorporation peut être automatiquement calculée à partir de query_text, et utilisée pour la recherche de similarité. Il n’est donc pas nécessaire de spécifier query_vector.
ANN (également appelée recherche approximative de voisin le plus proche ou de similarité) Utiliser query_vector pour une recherche de similarité.
Hybride
  • Utiliser query_text pour une recherche par mot clé. La recherche de mots clés utilise le texte littéral comme cible. Il est donc query_text nécessaire.
  • L’incorporation peut être automatiquement calculée à partir de query_text, et utilisée pour la recherche de similarité. Il n’est donc pas nécessaire de spécifier query_vector.
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-9R2 sur 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_ACCESS n’est pas prise en charge.
  • Les paramètres d’entrée filters_json et columns ne sont pas pris en charge.
  • Les recherches vectorielles dont les num_results sont supérieurs à 100 ne sont pas prises en charge.
  • vector_search ne peut pas être utilisé avec des points de terminaison de service de modèle utilisant un débit provisionné par les API Foundation Model.