Sdílet prostřednictvím


Funkce vector_search

Platí pro:zaškrtnuté ano Databricks SQL

Důležité

Tato funkce je ve verzi Public Preview.

Tato funkce umožňuje dotazovat index vector_search() pomocí SQL.

Požadavky

Syntaxe

V Databricks Runtime 15.3 a novějších použijte query_text nebo query_vector určete, co se má hledat v indexu.

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

V Databricks Runtime 15.2 a níže můžete query určit, co se má v indexu hledat.

SELECT * FROM vector_search(
  index, query, num_results
)

Argumenty

Všechny argumenty musí být předány názvem, například vector_search(index => indexName, query_text => queryText).

  • index: Konstanta STRING , plně kvalifikovaný název existujícího indexu vektorového vyhledávání ve stejném pracovním prostoru pro vyvolání. Definer musí mít Select oprávnění k indexu.
  • K zadání výrazu, který se má v indexu hledat, použijte jednu z následujících možností:
    • Pro Databricks Runtime 15.3 nebo novější použijte query_text k vyhledání konkrétního řetězce textu ve vloženém zdrojovém sloupci indexu Delta Sync. Dotaz musí být výrazem STRING řetězce, který se má vyhledat v indexu.
    • Pro Databricks Runtime 15.3 nebo novější použijte query_vector k vyhledání určitého vektoru ve sloupci s vektorovými reprezentacemi vašeho Delta Sync Indexu. Tento argument je povinný pro vyhledávání indexu rozdílové synchronizace pomocí vektorů spravovaných vlastním systémem. Dotaz musí být ARRAY<FLOAT>nebo ARRAY<DOUBLE>nebo ARRAY<DECIMAL(_, _)> výrazem vloženého vektoru, který se má vyhledat v indexu.
    • Pro Databricks Runtime 15.2 nebo novější použijte query k zadání řetězce, který chcete vyhledat v indexu.
  • num_results (volitelné): Celočíselná konstanta, maximální počet záznamů, které se mají vrátit. Výchozí nastavení je 10.
  • query_type(volitelné): Typ hledání, který chcete provést u indexu vektorového vyhledávání. Výchozí hodnota je ANN , pokud není explicitně zadána.
    • Pokud je query_type , ANN pak buď query_text nebo query_vector musí být zadán pro provedení přibližného hledání souseda nebo podobnost hledání.
    • Pokud je , query_typeHYBRIDpak query_text musí být zadán. Můžete zadat jak hybridní vyhledávání, tak query_textquery_vector pro hybridní vyhledávání. Hybridní vyhledávání v této instanci znamená kombinaci vyhledávání podobnosti a hledání klíčových slov, kde hledání klíčových slov používá jako cíl literálový text.

Následující tabulka shrnuje, které argumenty je možné použít, když máte index Delta Sync s modelem vkládání:

query_type query_text query_vector Description
ANN (označuje se také jako přibližné hledání nejbližšího souseda nebo podobnosti)
  • Pro hledání podobnosti pro určitý řetězec textu nebo vektoru můžete zadat query_text.
  • Vkládání lze automaticky vypočítat z query_texta použít pro vyhledávání podobnosti, takže není nutné zadávat query_vector.
ANN (označuje se také jako přibližné hledání nejbližšího souseda nebo podobnosti) Používá query_vector se pro vyhledávání podobnosti.
Hybridní
  • Slouží query_text k hledání klíčových slov. Hledání klíčových slov používá jako cíl literálový text, takže query_text je povinný.
  • Vkládání lze automaticky vypočítat z query_texta použít pro vyhledávání podobnosti, takže není nutné zadávat query_vector.
Hybridní Slouží query_text k vyhledávání klíčových slov a k query_vector hledání podobnosti.

Následující tabulka popisuje různé scénáře a argumenty, které je možné použít, když máte index synchronizace Delta bez modelu vkládání:

query_type query_text query_vector Description
ANN (označuje se také jako přibližné hledání nejbližšího souseda nebo podobnosti) Používáquery_vector se pro vyhledávání podobnosti. Hledání podobnosti vyžaduje vložený vektor jako cíl hledání. Vzhledem k tomu, že model vložení není v tomto scénáři k dispozici k výpočtu vektoru vkládání, musíte jej zadat.
Hybridní Pro hybridní hledání konkrétního řetězce textu a vektoru zadejte oba query_text a query_vector.

Návraty

Tabulka nejvyšších odpovídajících záznamů z indexu Zahrnou se všechny sloupce indexu.

Příklady

Následující části ukazují ukázkové dotazy SQL pro různá vyhledávání indexů.

Hybridní vyhledávací dotazy

Následující příklad hybridního vyhledávání kombinuje následující typy hledání a vyhledá zadané termíny v textu nebo metadatech indexu vektorového vyhledávání:

  • Hledání vektorové podobnosti: Vyhledání podobného sémantického významu pro Wi-Fi issues.
  • Hledání klíčových slov: Hledání Wi-Fi issues LMP-9R2 v indexu klíčových slov
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 Průvodce odstraňováním potíží – LMP-9R2 LMP-9R2
1332 Známé problémy s připojením pro zařízení LMP-9R2 LMP-9R2
1271 Obecný průvodce odstraňováním potíží s Wi-Fi LMP-8R2

Následující příklad hybridního vyhledávání určuje výraz i query_textquery_vector termín , Wi-Fi issues LMP-9R2. V tomto příkladu vyhledávání klíčových slov funguje lépe u proprietárních termínů jedinečných pro společnost (například "LMP-9R2" v tomto případě), zatímco vektorové vyhledávání, které jsou obvykle natrénované na veřejných datových sadách, nerozpozná termíny jako "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 Průvodce odstraňováním potíží – LMP-9R2 LMP-9R2
1332 Známé problémy s připojením pro zařízení LMP-9R2 LMP-9R2
1271 Obecný průvodce odstraňováním potíží s Wi-Fi LMP-8R2

Textové dotazy na indexy s vloženými zdrojovými sloupci

Vyhledejte podobné produkty podle názvu pomocí indexu skladových položek produktu. Následující příklad používá query_text, která je podporována pouze v Databricks Runtime 15.3 a vyšší. Pro Databricks Runtime 15.2 a níže použijte místo queryquery_text.


SELECT * FROM VECTOR_SEARCH(index => "main.db.my_index", query_text => "iphone", num_results => 2)
ID Název produktu
10 iPhone
20 iPhone SE

Následující příklad vyhledá více termínů najednou pomocí poddotazů 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 hledat.název_produktu
iphone 1 10 iPhone 10
iphone 1 20 iPhone SE
pixel 8 2 30 Pixel 8
pixel 8 2 40 Pixel 8a

Textové dotazy na indexy s vloženými zdrojovými sloupci

Prohledejte index obrázků s předem vypočítanými vkládáními, abyste našli podobné obrázky vložením. Následující příklad používá query_vector, která je podporována pouze v Databricks Runtime 15.3 a vyšší. Pro Databricks Runtime 15.2 a níže použijte místo queryquery_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)
identifikační číslo název_obrázku vkládání obrázků
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]

Následující příklad vyhledá více termínů najednou pomocí poddotazů 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
vložený dotaz search.id vyhledání.název_obrazu vyhledávání vkládání obrazu
[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]

Omezení

Během verze Preview platí následující omezení:

  • Dotazy na typy indexů DIRECT_ACCESS nejsou podporovány.
  • Vstupní parametry filters_json nebo columns se nepodporují.
  • Vektorové hledání s num_results větší než 100 není podporováno.
  • vector_search nelze použít s koncovými body pro obsluhu modelů s využitím základních modelů API se zřízenou propustností.