Dela via


Funktionen vector_search

Gäller för:markerad ja 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

Syntax

I Databricks Runtime 15.3 och senare använder query_text eller query_vector anger du 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 använder du 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: En STRING konstant, det fullständigt kvalificerade namnet på ett befintligt vektorsökningsindex på samma arbetsyta för anrop. Definieraren måste ha Select behörighet 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 ett STRING 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 ett ARRAY<FLOAT>-, ARRAY<DOUBLE>- eller ARRAY<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.
  • num_results (valfritt): En heltalskonstant, det maximala antalet poster som ska returneras. Standardvärdet är 10.
  • query_type(valfritt): Den typ av sökning som du vill utföra i vektorsökningsindexet. Standardvärdet är ANN om det inte uttryckligen anges.
    • query_type Om är ANN måste antingen query_text eller query_vector anges för att utföra en ungefärlig sökning efter närmaste granne eller likhetssökning.
    • query_type Om är HYBRIDmåste du query_text ange . Du kan ange både query_text och query_vector för en hybridsökning. Hybridsökning i den här instansen innebär en kombination av likhetssökning och nyckelordssökning där en nyckelordssökning använder literaltexten som mål.

I följande tabell sammanfattas vilka argument som kan användas när du har ett Delta Sync-index med en inbäddningsmodell:

query_type query_text query_vector Description
ANN (kallas även ungefärlig närmsta granne eller likhetssökning)
  • För en likhetssökning efter en specifik textsträng eller en vektor kan du ange query_text.
  • Inbäddningen kan beräknas automatiskt från query_textoch användas för likhetssökningen, så du behöver inte ange query_vector.
ANN (kallas även ungefärlig närmsta granne eller likhetssökning) Använd query_vector för en likhetssökning.
Hybrid
  • Använd query_text för en nyckelordssökning. Nyckelordssökningen använder literaltexten som mål, så query_text krävs.
  • Inbäddningen kan beräknas automatiskt från query_textoch användas för likhetssökningen, så du behöver inte ange query_vector.
Hybrid Använd query_text för nyckelordssökning och användning query_vector för likhetssökning.

I följande tabell beskrivs de olika scenarierna och argumenten som kan användas när du har ett Delta-synkroniseringsindex utan en inbäddningsmodell:

query_type query_text query_vector Description
ANN (kallas även ungefärlig närmsta granne eller likhetssökning) Användquery_vector för en likhetssökning. Likhetssökning kräver en inbäddningsvektor som sökmål. Eftersom en inbäddningsmodell inte är tillgänglig i det här scenariot för att beräkna inbäddningsvektorn måste du ange den.
Hybrid För en hybridsökning efter en specifik textsträng och en vektor anger du både query_text och query_vector.

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.

Hybridsökningsfrågor

I följande hybridsökningsexempel kombineras följande söktyper för att hitta de angivna termerna i text eller metadata för vektorsökningsindexet:

  • Vektorlikhetssökning: För att hitta liknande semantisk betydelse för Wi-Fi issues.
  • Nyckelordssökning: Hitta Wi-Fi issues LMP-9R2 på ett nyckelordsindex.
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 Wi-Fi felsökningsguide – LMP-9R2 LMP-9R2
1332 Kända anslutningsproblem för LMP-9R2-enheter LMP-9R2
1271 Allmän felsökningsguide för Wi-Fi LMP-8R2

Följande hybridsökningsexempel anger både query_text och query_vector för termen , Wi-Fi issues LMP-9R2. I det här exemplet fungerar nyckelordssökning bättre på egna termer som är unika för ett företag (t.ex. "LMP-9R2" i det här fallet), medan vektorsökning, som vanligtvis tränas på offentliga datamängder, inte känner igen termer som "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 Wi-Fi felsökningsguide – LMP-9R2 LMP-9R2
1332 Kända anslutningsproblem för LMP-9R2-enheter LMP-9R2
1271 Allmän felsökningsguide för Wi-Fi LMP-8R2

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-nummer 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 förfrågnings-ID search.id sök.produkt_namn
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-nummer 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 eller columns stöds inte.
  • Vektorsökning med num_results fler än 100 stöds inte.
  • 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.