Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Función
Se aplica a:
Databricks SQL
Importante
Esta característica está en versión preliminar pública.
La función vector_search() permite consultar un índice de vector de búsqueda de IA de mosaico mediante SQL.
Requisitos
- Esta función no está disponible en los almacenes de SQL clásicos.
- Para más información, consulte página de precios de SQL de Databricks.
- Esta función está disponible en regiones en las que el vector de búsqueda de Mosaic AI se admite.
Sintaxis
En Databricks Runtime 15.3 y versiones posteriores, use query_text o query_vector para especificar qué buscar en el índice.
SELECT * FROM vector_search(
index,
{ query_text | query_vector },
[ num_results ]
)
En Databricks Runtime 15.2 y versiones posteriores, use query para especificar qué buscar en el índice.
SELECT * FROM vector_search(
index, query, num_results
)
Argumentos
Todos los argumentos deben pasarse por nombre, como vector_search(index => indexName, query_text => queryText).
-
index: unaSTRINGconstante, el nombre completo de un índice de vector de búsqueda existente en la misma área de trabajo para las invocaciones. El definidor debe tenerSelectpermiso en el índice. - Use una de las siguientes opciones para especificar la expresión que se va a buscar en el índice:
- Para Databricks Runtime 15.3 o superior, use
query_textpara buscar una cadena específica de texto en la columna de origen de inserción del índice de sincronización Delta. La consulta debe ser una expresiónSTRINGde la cadena para buscar en el índice. - Para Databricks Runtime 15.3 o superior, use
query_vectorpara buscar un vector específico en la columna de vector de inserción del índice de sincronización Delta. Este argumento es Obligatorio para buscar un índice de sincronización delta mediante vectores autoadministrados. La consulta debe ser una expresión deARRAY<FLOAT>,ARRAY<DOUBLE>oARRAY<DECIMAL(_, _)>del vector de incrustación para buscar en el índice. - Para Databricks Runtime 15.2 o versiones anteriores, use
querypara especificar la cadena que se va a buscar en el índice.
- Para Databricks Runtime 15.3 o superior, use
-
num_results(opcional): una constante entera, el número máximo de registros que se van a devolver. El valor predeterminado es 10. -
query_type(opcional): el tipo de búsqueda que desea realizar en el índice de búsqueda vectorial. El valor predeterminado esANNsi no se especifica explícitamente.-
query_typeSi esANN, se debe especificar oquery_textquery_vectorpara realizar una búsqueda de proximidad aproximada o similar. -
query_typeSi esHYBRID,query_textdebe especificarse. Puede especificar yquery_textquery_vectorpara una búsqueda híbrida. La búsqueda híbrida en esta instancia significa una combinación de búsqueda de similitud y búsqueda de palabras clave donde una búsqueda de palabras clave usa el texto literal como destino.
-
En la tabla siguiente se resumen los argumentos que se pueden usar cuando se tiene un índice delta Sync con un modelo de inserción:
query_type |
query_text |
query_vector |
Description |
|---|---|---|---|
| ANN (también conocido como búsqueda de similitud o vecino más cercano aproximado) | ✓ |
|
|
| ANN (también conocido como búsqueda de similitud o vecino más cercano aproximado) | ✓ | Se usa query_vector para una búsqueda de similitud. |
|
| Híbrido | ✓ |
|
|
| Híbrido | ✓ | ✓ | Use query_text para la búsqueda de palabras clave y use query_vector para la búsqueda de similitud. |
En la tabla siguiente se describen los distintos escenarios y los argumentos que se pueden usar cuando se tiene un índice de sincronización delta sin un modelo de inserción:
query_type |
query_text |
query_vector |
Description |
|---|---|---|---|
ANN (también conocido como búsqueda de similitud o vecino más cercano aproximado) |
✓ | Se usaquery_vector para una búsqueda de similitud. La búsqueda de similitud requiere un vector de inserción como destino de búsqueda. Dado que un modelo de inserción no está disponible en este escenario para calcular el vector de inserción, debe proporcionarlo. |
|
| Híbrido | ✓ | ✓ | Para una búsqueda híbrida de una cadena específica de texto y un vector, especifique y query_textquery_vector. |
Devuelve
Tabla de los registros coincidentes principales del índice. Se incluyen todas las columnas del índice.
Ejemplos
En las secciones siguientes se muestran consultas SQL de ejemplo para distintas búsquedas de índices.
Consultas de búsqueda híbrida
En el ejemplo de búsqueda híbrida siguiente se combinan los siguientes tipos de búsqueda para buscar los términos proporcionados en texto o metadatos del índice de búsqueda vectorial:
- Búsqueda de similitud de vectores: para buscar un significado semántico similar para
Wi-Fi issues. - Búsqueda de palabras clave: para buscar
Wi-Fi issues LMP-9R2en un índice de palabras clave.
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 | Guía de solución de problemas de Wi-Fi: LMP-9R2 | LMP-9R2 |
| 1332 | Problemas de conectividad conocidos para dispositivos LMP-9R2 | LMP-9R2 |
| 1271 | Guía general de solución de problemas de Wi-Fi | LMP-8R2 |
En el ejemplo de búsqueda híbrida siguiente se especifican y query_textquery_vector para el término , Wi-Fi issues LMP-9R2. En este ejemplo, la búsqueda de palabras clave funciona mejor en términos propietarios exclusivos de una empresa (como "LMP-9R2" en este caso), mientras que la búsqueda vectorial, que normalmente se entrena en conjuntos de datos públicos, no reconoce términos como "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 | Guía de solución de problemas de Wi-Fi: LMP-9R2 | LMP-9R2 |
| 1332 | Problemas de conectividad conocidos para dispositivos LMP-9R2 | LMP-9R2 |
| 1271 | Guía general de solución de problemas de Wi-Fi | LMP-8R2 |
Consultas de texto en índices con la inserción de columnas de origen
Busque en un índice de SKU de producto para buscar productos similares por nombre. En el ejemplo siguiente se usa query_text que solo se admite en Databricks Runtime 15.3 y versiones posteriores. Para Databricks Runtime 15.2 y versiones posteriores, use query en lugar de query_text.
SELECT * FROM VECTOR_SEARCH(index => "main.db.my_index", query_text => "iphone", num_results => 2)
| identificación | Nombre de producto |
|---|---|
| 10 | iPhone |
| 20 | iPhone SE |
En el ejemplo siguiente se buscan varios términos al mismo tiempo mediante una subconsulta 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 | search.product_name |
|---|---|---|---|
| iPhone | 1 | 10 | iPhone 10 |
| iPhone | 1 | 20 | iPhone SE |
| píxel 8 | 2 | 30 | Píxel 8 |
| píxel 8 | 2 | 40 | Píxel 8a |
Consultas de texto en índices con la inserción de columnas de origen
Busque en un índice de imágenes con inserciones calculadas previamente para buscar imágenes similares mediante inserción. En el ejemplo siguiente se usa query_vector que solo se admite en Databricks Runtime 15.3 y versiones posteriores. Para Databricks Runtime 15.2 y versiones posteriores, use query en lugar de 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 | nombre_de_imagen | incrustación de imágenes |
|---|---|---|
| 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] |
En el ejemplo siguiente se buscan varios términos al mismo tiempo mediante una subconsulta 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
| query_embedding | search.id | search.image_name | search_image_embedding |
|---|---|---|---|
| [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] |
Limitaciones
Se aplican las siguientes limitaciones durante la versión preliminar:
- No se admiten consultas
DIRECT_ACCESStipos de índice. - No se admiten parámetros de entrada
filters_jsonocolumns. - No se admite el vector de búsqueda con
num_resultsmayor que 100. -
vector_searchno se puede utilizar con puntos de conexión de servicio de modelos mediante el rendimiento aprovisionado de API del modelo fundacional.