VECTOR_SEARCH est une fonction qui identifie les éléments les plus similaires sur le plan sémantique à partir d'un vecteur numérique haute dimension spécifié. Elle interroge une table de vecteurs Milvus depuis une tâche Flink SQL et renvoie les K entrées les plus similaires.
Limites
Prise en charge des versions : Ververica Runtime (VVR) 11.3 et versions ultérieures prennent en charge le mode flux. VVR 11.4 et versions ultérieures prennent en charge le mode lot.
Table de vecteurs : Milvus et DLF Paimon (VVR 11.8 et versions ultérieures) sont pris en charge en tant que tables de vecteurs.
Type de flux : Seuls les flux en insertion seule sont pris en charge (flux contenant uniquement des messages
INSERT).Mode d'exécution :
VECTOR_SEARCHs'exécute uniquement en mode flux ; le mode lot n'est pas pris en charge.
Syntaxe
VECTOR_SEARCH(
TABLE <SEARCH_TABLE>,
DESCRIPTOR(<COLUMN_TO_SEARCH>),
<COLUMN_TO_QUERY>,
<TOP_K>[,
<CONFIG>]
)
Paramètres
| Paramètre | Type | Description |
|---|---|---|
TABLE <SEARCH_TABLE> |
TABLE | Nom de la table de vecteurs. |
DESCRIPTOR(<COLUMN_TO_SEARCH>) |
DESC | Colonne de vecteur indexée dans la table de vecteurs. Les données d'entrée sont comparées à cette colonne pour calculer la similarité. |
COLUMN_TO_QUERY |
ARRAY<FLOAT> / ARRAY<DOUBLE> |
Colonne d'embedding du flux d'entrée, telle que l'embedding d'une image ou d'un texte téléchargé. |
TOP_K |
INT | Nombre maximal d'entrées similaires à renvoyer par ligne d'entrée. |
CONFIG |
MAP<STRING,STRING> |
Paramètres d'exécution facultatifs. Consultez la section Paramètres d'exécution. |
Valeur de retour
VECTOR_SEARCH renvoie une table. Chaque ligne contient toutes les colonnes de la table de vecteurs, ainsi qu'une colonne score de type DOUBLE. La colonne score indique la similarité entre les données d'entrée et les données de sortie.
Paramètres d'exécution
Transmettez les paramètres d'exécution sous forme de MAP<STRING,STRING> dans l'argument CONFIG, par exemple : MAP['async', 'false'].
Par défaut, le moteur sélectionne le mode d'exécution en fonction des capacités du connecteur Milvus. Si le connecteur prend en charge les modes asynchrone et synchrone, le moteur privilégie le mode asynchrone afin de maximiser le débit. Définissez explicitement le paramètre async pour modifier ce comportement.
| Paramètre | Type | Valeur par défaut | Description |
|---|---|---|---|
async |
Boolean | (aucune) | Indique s'il faut utiliser le mode asynchrone. Si le connecteur ne prend pas en charge le mode spécifié, le moteur signale une erreur. |
max-concurrent-operations |
Integer | 10 |
Nombre maximal de requêtes simultanées en mode asynchrone. |
output-mode |
Enum | ORDERED |
Mode de sortie pour les opérations asynchrones. Valeurs valides : ORDERED, ALLOW_UNORDERED. Pour plus de détails, consultez la page Async I/O — Order of results. |
timeout |
Duration | 3 min |
Délai d'expiration pour une opération asynchrone, depuis le premier appel jusqu'à la fin. Cette période peut inclure plusieurs tentatives et est réinitialisée lors d'un basculement. |
Exemple
Données de test
vector_table :
| id | topic | vector_index |
|---|---|---|
| 1 | "BigData" | [1, 1, 0] |
| 2 | "Streaming" | [-5, -12, -13] |
| 3 | "Batch" | [5, 12, 13] |
query_table :
| id | user_keyword | embedding |
|---|---|---|
| 1 | "Spark" | [5, 12, 13] |
| 2 | "Flink" | [-5, -12, -13] |
Requête
L'instruction suivante utilise chaque ligne de la table query_table pour rechercher dans la table vector_table et récupérer les deux enregistrements les plus similaires. L'option MAP['async', 'false'] active explicitement le mode synchrone.
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
))
Résultats
| user_keyword | topic |
|---|---|
| "Spark" | "Batch" |
| "Spark" | "BigData" |
| "Flink" | "Streaming" |
| "Flink" | "BigData" |