Condividi tramite


Funzione vector_search

Si applica a:segno di spunta sì 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

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 costante STRING, il nome completo di un indice di ricerca vettoriale esistente nella stessa area di lavoro per le chiamate. Il definer deve disporre Select dell'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_text per cercare una stringa di testo specifica nella colonna di origine di incorporamento dell'indice di sincronizzazione delta . La query deve essere un'espressione STRING di una stringa da ricercare nell'indice.
    • Per Databricks Runtime 15.3 o versioni successive, utilizzare query_vector per 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'espressione ARRAY<FLOAT>, o ARRAY<DOUBLE>o ARRAY<DECIMAL(_, _)> del vettore di incorporamento per la ricerca nell'indice.
    • Per Databricks Runtime 15.2 o versione successiva, usare query per specificare la stringa da cercare nell'indice.
  • 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 è ANN se non specificato in modo esplicito.
    • query_type Se è ANN , è necessario query_text specificare o query_vector per eseguire una ricerca approssimativa più vicina o simile.
    • Se è query_typeHYBRID, query_text è necessario specificare . È possibile specificare sia che query_textquery_vector per 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)
  • Per una ricerca di somiglianza per una stringa specifica di testo o vettore, è possibile specificare query_text.
  • L'incorporamento può essere calcolato automaticamente da query_texte usato per la ricerca di somiglianza, quindi non è necessario specificare query_vector.
ANN (noto anche come vicino più vicino approssimativo o ricerca di somiglianza) Usare query_vector per una ricerca di somiglianza.
Ibrido
  • Usare query_text per una ricerca di parole chiave. La ricerca di parole chiave usa il testo letterale come destinazione, quindi query_text è obbligatorio.
  • L'incorporamento può essere calcolato automaticamente da query_texte usato per la ricerca di somiglianza, quindi non è necessario specificare query_vector.
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-9R2 in 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_ACCESS di query non sono supportati.
  • I parametri di input filters_json o columns non sono supportati.
  • La ricerca vettoriale con num_results maggiore di 100 non è supportata.
  • vector_search non può essere usato con gli endpoint di gestione del modello usando la velocità effettiva con provisioning delle API Modello di base.