Delen via


vector_search-functie

Van toepassing op:aangevinkt als ja Databricks SQL

Belangrijk

Deze functie is beschikbaar als openbare preview.

Met de vector_search() functie kunt u een query uitvoeren op een Mozaïek AI Vector Search-index met behulp van SQL.

Vereisten

Syntaxis

Gebruik of query_text geef in Databricks Runtime 15.3 en hoger query_vector op wat u zoekt in de index.

SELECT * FROM vector_search(
  index,
  { query_text | query_vector },
  [ num_results ]
)

Gebruik in Databricks Runtime 15.2 en hieronder query om op te geven wat u zoekt in de index.

SELECT * FROM vector_search(
  index, query, num_results
)

Argumenten

Alle argumenten moeten worden gespecificeerd bij naam, zoals vector_search(index => indexName, query_text => queryText).

  • index: Een STRING constante, de volledig gekwalificeerde naam van een bestaande vectorzoekindex in dezelfde werkruimte voor aanroepen. De definitier moet gemachtigd zijn Select voor de index.
  • Gebruik een van de volgende opties om de expressie op te geven die u in de index wilt zoeken:
    • Gebruik voor Databricks Runtime 15.3 of hoger query_text om te zoeken naar een specifieke tekenreeks in de kolom met ingesloten bron van uw Delta Sync Index. De query moet een STRING expressie van de tekenreeks zijn om in de index te zoeken.
    • Gebruik voor Databricks Runtime 15.3 of hoger query_vector om te zoeken naar een specifieke vector in de insluitvectorkolom van uw Delta Sync-index. Dit argument is vereist voor het doorzoeken van een Delta Sync-index met behulp van zelfbeheerde vectoren. De query moet een ARRAY<FLOAT>of ARRAY<DOUBLE>of ARRAY<DECIMAL(_, _)> expressie van de insluitvector zijn om naar te zoeken in de index.
    • Voor Databricks Runtime 15.2 of lager gebruikt u query om de tekenreeks op te geven die u in uw index wilt zoeken.
  • num_results (optioneel): Een geheel getalconstante, het maximum aantal records dat moet worden geretourneerd. De standaardwaarde is 10.
  • query_type(optioneel): Het type zoekopdracht dat u wilt uitvoeren op uw vectorzoekindex. Standaard ingesteld ANN op indien niet expliciet opgegeven.
    • Als dit het query_type geval is ANN , query_text moet of query_vector worden opgegeven om een dichtstbijzijnde buurzoekopdracht of overeenkomstenzoekopdracht uit te voeren.
    • Als dit het query_type is HYBRID, query_text moet worden opgegeven. U kunt zowel query_text als query_vector voor een hybride zoekopdracht opgeven. Hybride zoeken in dit geval betekent een combinatie van overeenkomsten zoeken en zoeken naar trefwoorden waarbij een trefwoordzoekopdracht de letterlijke tekst als doel gebruikt.

De volgende tabel bevat een overzicht van de argumenten die kunnen worden gebruikt wanneer u een Delta Sync-index hebt met een insluitmodel:

query_type query_text query_vector Description
ANN (ook wel bekend als dichtstbijzijnde buren of overeenkomsten zoeken)
  • Als u een overeenkomst zoekt naar een specifieke tekenreeks of een vector, kunt u opgeven query_text.
  • De insluiting kan automatisch worden berekend op basis van query_texten wordt gebruikt voor het zoeken naar overeenkomsten, dus u hoeft niet op te geven query_vector.
ANN (ook wel bekend als dichtstbijzijnde buren of overeenkomsten zoeken) Gebruik query_vector deze zoekfunctie voor overeenkomsten.
Hybride
  • Gebruik query_text deze functie voor een trefwoordzoekopdracht. Trefwoorden zoeken maakt gebruik van de letterlijke tekst als doel, dus query_text is vereist.
  • De insluiting kan automatisch worden berekend op basis van query_texten wordt gebruikt voor het zoeken naar overeenkomsten, dus u hoeft niet op te geven query_vector.
Hybride Gebruik query_text dit voor trefwoorden zoeken en gebruiken query_vector voor overeenkomsten zoeken.

In de volgende tabel worden de verschillende scenario's en de argumenten beschreven die kunnen worden gebruikt wanneer u een Delta-synchronisatieindex hebt zonder een insluitmodel:

query_type query_text query_vector Description
ANN (ook wel bekend als bij benadering dichtstbijzijnde buren of overeenkomsten zoeken) Gebruikquery_vector deze zoekfunctie voor overeenkomsten. Zoeken naar overeenkomsten vereist een insluitvector als zoekdoel. Omdat een insluitmodel niet beschikbaar is in dit scenario om de insluitvector te berekenen, moet u dit opgeven.
Hybride Voor een hybride zoekopdracht naar een specifieke tekenreeks met tekst en een vector, geeft u zowel als query_textquery_vector.

Retouren

Een tabel met de meest overeenkomende records uit de index. Alle kolommen van de index worden opgenomen.

Voorbeelden

In de volgende secties ziet u voorbeelden van SQL-query's voor verschillende indexzoekopdrachten.

Hybride zoekquery's

In het volgende hybride zoekvoorbeeld worden de volgende zoektypen gecombineerd om de opgegeven termen in tekst of metagegevens van de vectorzoekindex te vinden:

  • Vector similarity zoekopdracht: Om vergelijkbare semantische betekenis te vinden voor Wi-Fi issues.
  • Trefwoorden zoeken: zoeken Wi-Fi issues LMP-9R2 op een trefwoordindex.
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 Gids voor probleemoplossing — LMP-9R2 LMP-9R2
1332 Bekende connectiviteitsproblemen voor LMP-9R2-apparaten LMP-9R2
1271 Handleiding voor het oplossen van problemen met algemene Wi-Fi LMP-8R2

In het volgende hybride zoekvoorbeeld worden zowel query_text als query_vector voor de term opgegeven. Wi-Fi issues LMP-9R2 In dit voorbeeld wordt het zoeken op trefwoorden beter uitgevoerd op bedrijfseigen termen die uniek zijn voor een bedrijf (zoals 'LMP-9R2' in dit geval), terwijl vectorzoekopdrachten, die doorgaans worden getraind op openbare gegevenssets, termen als 'LMP-9R2' niet herkent.


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 Gids voor probleemoplossing — LMP-9R2 LMP-9R2
1332 Bekende connectiviteitsproblemen voor LMP-9R2-apparaten LMP-9R2
1271 Handleiding voor het oplossen van problemen met algemene Wi-Fi LMP-8R2

Tekstquery's voor indexen met bronkolommen insluiten

Zoek naar een index van product-SKU's om vergelijkbare producten op naam te vinden. In het volgende voorbeeld wordt query_text gebruikt die alleen wordt ondersteund in Databricks Runtime 15.3 en hoger. Gebruik voor Databricks Runtime 15.2 en hieronder query in plaats van query_text.


SELECT * FROM VECTOR_SEARCH(index => "main.db.my_index", query_text => "iphone", num_results => 2)
Id Productnaam
10 iPhone
20 iPhone SE

In het volgende voorbeeld wordt gezocht naar meerdere termen tegelijk met behulp van een LATERAL-subquery.


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 zoeken.product_naam
iphone 1 10 iPhone 10
iphone 1 20 iPhone SE
pixel 8 2 30 Pixel 8
pixel 8 2 40 Pixel 8a

Tekstquery's voor indexen met bronkolommen insluiten

Doorzoek een index van afbeeldingen met vooraf berekende embeddingen om vergelijkbare afbeeldingen te vinden via embeddingen. In het volgende voorbeeld wordt query_vector gebruikt die alleen wordt ondersteund in Databricks Runtime 15.3 en hoger. Gebruik voor Databricks Runtime 15.2 en hieronder query in plaats van 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)
identiteitskaart afbeeldingnaam beeldinbedding
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]

In het volgende voorbeeld wordt gezocht naar meerdere termen tegelijk met behulp van een LATERAL-subquery.


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 zoeken.afbeeldingsnaam zoek_beelddoembedden
[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]

Beperkingen

De volgende beperkingen zijn van toepassing tijdens de preview:

  • Het uitvoeren van DIRECT_ACCESS query's op indextypen wordt niet ondersteund.
  • Invoerparameters filters_json of columns worden niet ondersteund.
  • Vector Search met num_results meer dan 100 wordt niet ondersteund.
  • vector_search kan niet worden gebruikt met eindpunten voor modeldiensten die gebruik maken van ingerichte doorvoer van Foundation Model API's.