VECTOR_SEARCH es una función que encuentra los elementos semánticamente más similares a partir de un vector numérico de alta dimensión especificado. Esta función consulta una tabla vectorial de Milvus desde un trabajo de Flink SQL y devuelve las K entradas principales con mayor similitud (top-K).
Límites
Compatibilidad de versiones: Ververica Runtime (VVR) 11.3 y posteriores son compatibles con el modo de streaming. VVR 11.4 y posteriores admiten el modo por lotes.
El parámetro
OUTPUT_COLUMNSse admite a partir de la versión VVR 11.9 de Realtime Compute for Apache Flink.Tabla vectorial: Se admiten Milvus y DLF Paimon (VVR 11.8 y posteriores) como tablas vectoriales.
Tipo de flujo: Solo se admiten flujos de solo inserción (flujos que contienen únicamente mensajes
INSERT).Modo de ejecución:
VECTOR_SEARCHse ejecuta exclusivamente en modo de streaming; no se admite el modo por lotes.
Sintaxis
VECTOR_SEARCH(
TABLE <SEARCH_TABLE>,
DESCRIPTOR(<COLUMN_TO_SEARCH>),
<COLUMN_TO_QUERY>,
<TOP_K>[,
<CONFIG>]
)
Parámetros
|
Parámetro |
Tipo de datos |
Descripción |
|
async |
Boolean |
Especifica si se habilita el modo asíncrono. Si el conector de la tabla vectorial no admite el modo indicado, el motor devuelve un error. |
|
max-concurrent-operations |
Integer |
Número máximo de solicitudes simultáneas en modo asíncrono. |
|
output-mode |
Enum |
Columna de características vectoriales de la entrada, como el embedding de una imagen o un texto subido por el usuario. La columna se compara por similitud con la columna vectorial indexada. |
|
TOP_K |
INT |
Número máximo de registros similares que se devuelven. |
|
CONFIG |
MAP<STRING,STRING> |
El Runtime parameters que puede configurar. |
|
OUTPUT_COLUMNS |
DESC |
Opcional. Especifica las columnas que se devuelven en el resultado de la búsqueda vectorial. Puede seleccionar columnas de nivel superior de la tabla vectorial y la columna de similitud |
Valor de retorno
VECTOR_SEARCH devuelve una tabla. Si no se especifica OUTPUT_COLUMNS, cada fila contiene todas las columnas de la tabla vectorial y una columna adicional score, lo cual mantiene la compatibilidad con versiones anteriores. Si se especifica OUTPUT_COLUMNS, cada fila contiene únicamente las columnas indicadas, en el orden declarado en DESCRIPTOR.
La columna score es de tipo DOUBLE y describe la similitud entre los datos de entrada y cada resultado de búsqueda. También puede seleccionar o descartar esta columna mediante OUTPUT_COLUMNS. Si ya existe una columna llamada score en la tabla vectorial, el motor asigna un nombre único a la columna de similitud generada, como score0. En ese caso, utilice el nombre real de la columna en OUTPUT_COLUMNS.
OUTPUT_COLUMNS no puede estar vacío, no admite campos anidados y no puede contener columnas duplicadas.
Parámetros de tiempo de ejecución
|
Parámetro |
Tipo de datos |
Valor predeterminado |
Descripción |
|
async |
Boolean |
(none) |
Especifica si se habilita el modo asíncrono. Si el conector de la tabla vectorial no admite el modo indicado, el motor devuelve un error. De forma predeterminada, el motor selecciona el modo de ejecución según los modos que admite el conector. Si el conector es compatible con los modos asíncrono y síncrono, el motor prefiere el asíncrono para mejorar el throughput general. |
|
max-concurrent-operations |
Integer |
10 |
Número máximo de solicitudes simultáneas en modo asíncrono. |
|
output-mode |
Enum |
|
Modo de salida de las operaciones asíncronas. Valores válidos:
Para obtener más información sobre estos dos valores, consulte Async I/O. |
|
timeout |
Duration |
3min |
Periodo de tiempo de espera desde la primera invocación hasta que finaliza la operación asíncrona. Este periodo puede abarcar varios reintentos y se restablece durante un failover. |
Ejemplo
Datos de prueba
La tabla vectorial vector_table contiene los siguientes datos:
|
id |
topic |
vector_index |
|
1 |
'Spark' |
[5, 12, 13] |
|
2 |
'Flink' |
[-5, -12, -13] |
|
3 |
'Batch' |
[5, 12, 13] |
La tabla de consulta query_table contiene los siguientes datos:
|
id |
user_keyword |
embedding |
|
1 |
'Spark' |
[5, 12, 13] |
|
2 |
'Flink' |
[-5, -12, -13] |
Consulta
Para cada fila de query_table, la siguiente instrucción SQL busca en vector_table y devuelve los dos registros más similares.
SELECT user_keyword, topic
FROM
query_table,
LATERAL TABLE (VECTOR_SEARCH(
SEARCH_TABLE => TABLE vector_table,
COLUMN_TO_SEARCH => DESCRIPTOR(vector_index),
COLUMN_TO_QUERY => query_table.embedding,
TOP_K => 2,
MAP['async', 'false'] -- Enable synchronous mode
))
Resultados
|
user_keyword |
topic |
score |
|
'Spark' |
'Batch' |
1.0 |
|
'Spark' |
'BigData' |
0.6538461538461539 |
|
'Flink' |
'Streaming' |
1.0 |
|
'Flink' |
'BigData' |
-0.6538461538461539 |