Funktionen vector_search
Gäller för: Databricks SQL
Viktigt!
Den här funktionen finns som allmänt tillgänglig förhandsversion.
Med vector_search()
funktionen kan du köra frågor mot ett Mosaic AI Vector Search-index med hjälp av SQL.
Krav
- Den här funktionen är inte tillgänglig på klassiska SQL-lager.
- Mer information finns på prissidan för Databricks SQL.
- Den här funktionen är tillgänglig i regioner där Mosaic AI Vector Search stöds.
Syntax
I Databricks Runtime 15.3 och senare kan du använda query_text
eller query_vector
för att ange vad du ska söka efter i indexet.
SELECT * FROM vector_search(
index,
{ query_text | query_vector },
[ num_results ]
)
I Databricks Runtime 15.2 och nedan kan du använda query
för att ange vad du ska söka efter i indexet.
SELECT * FROM vector_search(
index, query, num_results
)
Argument
Alla argument måste skickas med namn, till exempel vector_search(index => indexName, query_text => queryText)
.
-
index
: EnSTRING
konstant, det fullständigt kvalificerade namnet på ett befintligt vektorsökningsindex på samma arbetsyta för anrop. Definieraren måste ha behörigheten "Välj" för indexet. - Använd något av följande för att ange det uttryck som ska sökas efter i indexet:
- För Databricks Runtime 15.3 eller senare använder du
query_text
för att söka efter en viss textsträng i kolumnen för inbäddningskällan i Delta Sync Index. Frågan måste vara ettSTRING
uttryck för strängen som du vill söka efter i indexet. - För Databricks Runtime 15.3 eller senare använder du
query_vector
för att söka efter en specifik vektor i kolumnen inbäddningsvektor i deltasynkroniseringsindexet. Det här argumentet krävs för att söka i ett Delta Sync-index med hjälp av självhanterade vektorer. Frågan måste vara ettARRAY<FLOAT>
-,ARRAY<DOUBLE>
- ellerARRAY<DECIMAL(_, _)>
-uttryck för den inbäddningsvektor som ska sökas efter i indexet. - För Databricks Runtime 15.2 eller lägre använder du
query
för att ange strängen som du vill söka efter i ditt index.
- För Databricks Runtime 15.3 eller senare använder du
-
num_results
(valfritt): En heltalskonstant, det maximala antalet poster som ska returneras. Standardvärdet är 10.
Returer
En tabell med de främsta matchande posterna från indexet. Alla kolumner i indexet ingår.
Exempel
I följande avsnitt visas exempel på SQL-frågor för olika indexsökningar.
Textfrågor om index med inbäddning av källkolumner
Sök över ett index över produkt-SKU:er för att hitta liknande produkter efter namn. I följande exempel används query_text
som endast stöds i Databricks Runtime 15.3 och senare. För Databricks Runtime 15.2 och nedan använder du query
i stället för query_text
.
SELECT * FROM VECTOR_SEARCH(index => "main.db.my_index", query_text => "iphone", num_results => 2)
ID | Produktnamn |
---|---|
10 | iPhone |
20 | iPhone SE |
I följande exempel söker du efter flera termer samtidigt med hjälp av en LATERAL-underfråga.
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 | Bildpunkt 8 |
pixel 8 | 2 | 40 | Pixel 8a |
Textfrågor om index med inbäddning av källkolumner
Sök över ett index med bilder med förberäknade inbäddningar för att hitta liknande bilder genom att bädda in. I följande exempel används query_vector
som endast stöds i Databricks Runtime 15.3 och senare. För Databricks Runtime 15.2 och nedan använder du query
i stället för 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 | bildnamn | bildinbäddning |
---|---|---|
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] |
I följande exempel söker du efter flera termer samtidigt med hjälp av en LATERAL-underfråga.
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
frågeinbäddning | search.id | sök.bildnamn | sök_bildinbäddning |
---|---|---|---|
[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] |
Begränsningar
Följande begränsningar gäller under förhandsversionen:
- Det går inte att köra frågor mot
DIRECT_ACCESS
indextyper. - Indataparametrar
filters_json
ellercolumns
stöds inte. - Vektorsökning med
num_results
fler än 100 stöds inte. - Användare som inte har LÄS-åtkomst till källtabellen kan inte använda
vector_search()
. - Hybridsök med nyckelordslikhet stöds inte med hjälp av
vector_search()
. -
vector_search
kan inte användas med modell som betjänar slutpunkter med hjälp av Foundation Model-API:er som har etablerat dataflöde.