Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Funzione
Si applica a:
Databricks SQL
Importante
Questa funzionalità è disponibile in anteprima pubblica.
La funzione vector_search() consente di eseguire query su un indice di Mosaic AI Vector Search usando SQL.
Requisiti
- Questa funzione non è disponibile nei warehouse SQL classici.
- Per altre informazioni, vedere la pagina relativa ai prezzi di Databricks SQL.
- Questa funzione è disponibile nelle aree in cui è supportata la ricerca a vettori di intelligenza artificiale mosaici.
Sintassi
In Databricks Runtime 15.3 e versioni successive usare query_text o query_vector per specificare cosa cercare nell'indice.
SELECT * FROM vector_search(
index,
{ query_text | query_vector },
[ num_results ]
)
In Databricks Runtime 15.2 e versioni successive usare query per specificare cosa cercare nell'indice.
SELECT * FROM vector_search(
index, query, num_results
)
Argomenti
Tutti gli argomenti devono essere passati per nome, ad esempio vector_search(index => indexName, query_text => queryText).
-
index: una costanteSTRING, il nome completo di un indice di ricerca vettoriale esistente nella stessa area di lavoro per le chiamate. Il definer deve disporreSelectdell'autorizzazione per l'indice. - Usare una delle opzioni seguenti per specificare l'espressione da cercare nell'indice:
- Per Databricks Runtime 15.3 o versione successiva, usare
query_textper cercare una stringa di testo specifica nella colonna di origine di incorporamento dell'indice di sincronizzazione delta . La query deve essere un'espressioneSTRINGdi una stringa da ricercare nell'indice. - Per Databricks Runtime 15.3 o versioni successive, utilizzare
query_vectorper cercare un vettore specifico nella colonna dei vettori di embedding del tuo indice di sincronizzazione Delta. Questo argomento è Obbligatorio per la ricerca di un indice di sincronizzazione Delta usando vettori autogestiti. La query deve essere un'espressioneARRAY<FLOAT>, oARRAY<DOUBLE>oARRAY<DECIMAL(_, _)>del vettore di incorporamento per la ricerca nell'indice. - Per Databricks Runtime 15.2 o versione successiva, usare
queryper specificare la stringa da cercare nell'indice.
- Per Databricks Runtime 15.3 o versione successiva, usare
-
num_results(facoltativo): una costante intera, numero massimo di voci da restituire. L’impostazione predefinita è 10. -
query_type(facoltativo): tipo di ricerca da eseguire nell'indice di ricerca vettoriale. Il valore predefinito èANNse non specificato in modo esplicito.-
query_typeSe èANN, è necessarioquery_textspecificare oquery_vectorper eseguire una ricerca approssimativa più vicina o simile. - Se è
query_typeHYBRID,query_textè necessario specificare . È possibile specificare sia chequery_textquery_vectorper una ricerca ibrida. La ricerca ibrida in questa istanza significa una combinazione di ricerca di somiglianza e ricerca di parole chiave in cui una ricerca di parole chiave usa il testo letterale come destinazione.
-
Nella tabella seguente sono riepilogati gli argomenti che è possibile usare quando si dispone di un indice delta Sync con un modello di incorporamento:
query_type |
query_text |
query_vector |
Description |
|---|---|---|---|
| ANN (noto anche come vicino più vicino approssimativo o ricerca di somiglianza) | ✓ |
|
|
| ANN (noto anche come vicino più vicino approssimativo o ricerca di somiglianza) | ✓ | Usare query_vector per una ricerca di somiglianza. |
|
| Ibrido | ✓ |
|
|
| Ibrido | ✓ | ✓ | Usare query_text per la ricerca di parole chiave e usare query_vector per la ricerca di somiglianza. |
La tabella seguente descrive i diversi scenari e gli argomenti che possono essere usati quando si dispone di un indice di sincronizzazione Delta senza un modello di incorporamento:
query_type |
query_text |
query_vector |
Description |
|---|---|---|---|
ANN (noto anche come ricerca approssimata più vicina o simile) |
✓ | Usarequery_vector per una ricerca di somiglianza. La ricerca di somiglianza richiede un vettore di incorporamento come destinazione di ricerca. Poiché in questo scenario non è disponibile un modello di incorporamento per calcolare il vettore di incorporamento, è necessario specificarlo. |
|
| Ibrido | ✓ | ✓ | Per una ricerca ibrida per una stringa specifica di testo e un vettore, specificare sia query_text che query_vector. |
Valori restituiti
Tabella dei record corrispondenti principali dell'indice. Sono incluse tutte le colonne dell'indice.
Esempi
Le sezioni seguenti illustrano query SQL di esempio per ricerche di indici diverse.
Query di ricerca ibrida
L'esempio di ricerca ibrida seguente combina i tipi di ricerca seguenti per trovare i termini forniti nel testo o nei metadati dell'indice di ricerca vettoriale:
- Ricerca di somiglianza vettoriale: per trovare un significato semantico simile per
Wi-Fi issues. - Ricerca di parole chiave: per trovare
Wi-Fi issues LMP-9R2in un indice di parole chiave.
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 | Guida alla risoluzione dei problemi di Wi-Fi - LMP-9R2 | LMP-9R2 |
| 1332 | Problemi di connettività noti per i dispositivi LMP-9R2 | LMP-9R2 |
| 1271 | Guida alla risoluzione dei problemi di Wi-Fi generale | LMP-8R2 |
L'esempio di ricerca ibrida seguente specifica sia che query_textquery_vector per il termine , Wi-Fi issues LMP-9R2. In questo esempio, la ricerca di parole chiave offre prestazioni migliori in termini proprietari univoci per un'azienda (ad esempio "LMP-9R2" in questo caso), mentre la ricerca vettoriale, che in genere viene sottoposta a training su set di dati pubblici, non riconosce termini come "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 | Guida alla risoluzione dei problemi di Wi-Fi - LMP-9R2 | LMP-9R2 |
| 1332 | Problemi di connettività noti per i dispositivi LMP-9R2 | LMP-9R2 |
| 1271 | Guida alla risoluzione dei problemi di Wi-Fi generale | LMP-8R2 |
Query di testo sugli indici con colonne di origine incorporate
Cercare un indice di SKU di prodotto per trovare prodotti simili in base al nome. L'esempio seguente usa query_text supportato solo in Databricks Runtime 15.3 e versioni successive. Per Databricks Runtime 15.2 e versioni successive, usare query anziché query_text.
SELECT * FROM VECTOR_SEARCH(index => "main.db.my_index", query_text => "iphone", num_results => 2)
| Documento d'identità | Nome prodotto |
|---|---|
| 10 | iPhone |
| 20 | iPhone SE |
Nell'esempio seguente, vengono cercati più termini contemporaneamente usando una sottoquery 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 | ricerca.nome_prodotto |
|---|---|---|---|
| iPhone | 1 | 10 | iPhone 10 |
| iPhone | 1 | 20 | iPhone SE |
| pixel 8 | 2 | 30 | Pixel 8 |
| pixel 8 | 2 | 40 | Pixel 8a |
Query di testo sugli indici con colonne di origine incorporate
Cercare un indice di immagini con incorporamenti pre-calcolati per trovare immagini simili incorporando. L'esempio seguente usa query_vector supportato solo in Databricks Runtime 15.3 e versioni successive. Per Databricks Runtime 15.2 e versioni successive, usare query anziché 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 | nome_immagine | incorporamento di immagini |
|---|---|---|
| 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] |
Nell'esempio seguente, vengono cercati più termini contemporaneamente usando una sottoquery 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
| incorporamento della query | search.id | cerca.nome_immagine | incorporazione_di_immagini_per_la_ricerca |
|---|---|---|---|
| [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] |
Limiti
Durante l'anteprima, si applicano le limitazioni seguenti:
- I tipi di indice
DIRECT_ACCESSdi query non sono supportati. - I parametri di input
filters_jsonocolumnsnon sono supportati. - La ricerca vettoriale con
num_resultsmaggiore di 100 non è supportata. -
vector_searchnon può essere usato con gli endpoint di gestione del modello usando la velocità effettiva con provisioning delle API Modello di base.