TairVector est une structure de données étendue de Tair, conçue pour le stockage et la récupération de vecteurs en temps réel avec des performances élevées.
TairVector
TairVector repose sur une structure de données de type hash multi-niveaux.
TairVector propose deux algorithmes d'indexation : Hierarchical Navigable Small World (HNSW) et la recherche à plat (flat search) :
HNSW : génère des index basés sur des graphes pour la recherche vectorielle et prend en charge la récupération d'espace asynchrone. Cette méthode garantit une grande précision des requêtes tout en conciliant performance et mises à jour en temps réel.
Recherche à plat : offre une précision de requête de 100 % et une insertion rapide des données, ce qui la rend idéale pour les petits jeux de données.
TairVector prend également en charge plusieurs métriques de distance, telles que la distance euclidienne, le produit scalaire, la distance cosinus et la distance de Jaccard. Par rapport aux services traditionnels de recherche vectorielle, TairVector présente les avantages suivants :
Stockage intégral des données en mémoire avec mise à jour des index en temps réel, permettant de réduire la latence en lecture et en écriture.
Utilisation d'une structure de données en mémoire optimisée afin de diminuer la consommation mémoire.
Service cloud prêt à l'emploi, doté d'une architecture simple et efficace, sans dépendances complexes entre composants.
Prise en charge de la recherche hybride, combinant recherche vectorielle et recherche en texte intégral.
Possibilité de créer un index inversé sur des champs scalaires, tels que les attributs de tag. Ainsi, une recherche des k plus proches voisins (KNN) peut d'abord filtrer les résultats selon ces scalaires avant d'effectuer la recherche vectorielle sur le sous-ensemble obtenu.
Notes de version
13 octobre 2022 : lancement de TairVector sur les instances Tair basées sur DRAM compatibles avec Redis 6.0.
22 novembre 2022 (version 6.2.2.0) : ajout de la prise en charge de la métrique de distance de Jaccard. Amélioration de la commande TVS.GETINDEX pour retourner les statistiques d'utilisation mémoire de chaque index via les champs
index_data_sizeetattribute_data_size.26 décembre 2022 (version 6.2.3.0) : ajout de la prise en charge du mode proxy dans les clusters, du type de données vectorielles FLOAT16, ainsi que des commandes TVS.MINDEXKNNSEARCH et TVS.MINDEXMKNNSEARCH.
4 juillet 2023 (version 6.2.8.2) : ajout de la prise en charge de la métrique de distance cosinus et du ramasse-miettes automatique pour les index HNSW.
3 août 2023 (version 23.8.0.0) : ajout de la possibilité de définir une durée de vie (TTL) au niveau de la clé via des commandes comme TVS.HEXPIREAT et TVS.HPEXPIREAT, ainsi que de la recherche des plus proches voisins vectoriels sur des listes de clés spécifiées avec la commande TVS.GETDISTANCE. Cette version a également introduit la recherche en texte intégral grâce à la mise à jour de commandes telles que TVS.CREATEINDEX et TVS.KNNSEARCH, permettant ainsi la recherche hybride.
6 juin 2024 (version 24.5.1.0) : ajout des commandes TVS.KNNSEARCHFIELD et TVS.MINDEXKNNSEARCHFIELD pour retourner les informations d'attributs de tag lors des recherches de plus proches voisins.
22 juillet 2024 (version 24.7.0.0) : activation des index HNSW pour les vecteurs creux.
Bonnes pratiques
Prérequis
L'instance doit être une instance basée sur DRAM compatible avec Redis 6.0 ou version ultérieure.
Une instance basée sur DRAM exécutant Redis 5.0 ne peut pas être mise à niveau vers Redis 6.0. Pour utiliser Redis 6.0, vous devez créer une nouvelle instance basée sur DRAM.
Remarques
Ces opérations s'appliquent aux données TairVector au sein d'une instance Tair.
TairVector ne prend pas en charge la fonctionnalité de hashtags Redis sur des champs tels que index_name et Key.
TairVector ne prend pas en charge certaines commandes comme MOVE.
Pour des exigences élevées en matière de persistance des données, activez le mode de réplication semi-synchrone.
Référence des commandes
Tableau 1. Commandes TairVector
|
Type |
Commande |
Syntaxe |
Description |
|
Opérations sur les index |
|
Crée un index vectoriel en spécifiant l'algorithme de construction et d'interrogation ainsi que la fonction de distance. La suppression de cet index s'effectue uniquement via la commande |
|
|
|
Récupère les métadonnées d'un index vectoriel spécifié. |
||
|
|
Supprime un index vectoriel spécifié ainsi que toutes les données qu'il contient. |
||
|
|
Analyse de manière incrémentielle les index vectoriels d'une instance Tair correspondant aux critères spécifiés. |
||
|
Opérations sur les données vectorielles |
|
Insère un enregistrement de données dans un index vectoriel. Si un enregistrement avec la clé spécifiée existe déjà, il est écrasé. |
|
|
|
Récupère tous les attributs et valeurs de l'enregistrement correspondant à la clé spécifiée dans un index vectoriel. |
||
|
|
Retourne les valeurs des clés d'attribut spécifiées pour une clé donnée dans un index vectoriel. |
||
|
|
Supprime l'enregistrement de données spécifié (clé) de l'index vectoriel indiqué. |
||
|
|
Supprime une ou plusieurs attribute_key et leurs valeurs d'un enregistrement (clé) dans un index vectoriel. |
||
|
|
Parcourt les enregistrements de données (identifiés par une clé) répondant aux conditions spécifiées au sein d'un index vectoriel donné. |
||
|
|
Incrémente la valeur entière de |
||
|
|
Incrémente la valeur de |
||
|
|
Définit le délai d'expiration absolu, en millisecondes, d'un enregistrement de données identifié par sa clé au sein d'un index vectoriel spécifié. |
||
|
|
Définit un délai d'expiration relatif, en millisecondes, pour une clé spécifiée dans un index vectoriel. |
||
|
|
Définit un délai d'expiration absolu, précis à la seconde près, pour une clé spécifiée dans un index vectoriel. |
||
|
|
Définit un délai d'expiration relatif, en secondes, pour un vecteur spécifié (clé) dans un index vectoriel. |
||
|
|
Retourne le TTL, en millisecondes, d'un enregistrement de données spécifié (clé) dans un index vectoriel. |
||
|
|
Récupère le TTL, en secondes, d'un enregistrement de données spécifié (clé) dans un index vectoriel donné. |
||
|
|
Retourne le délai d'expiration absolu d'un enregistrement de données spécifié (clé) dans un index vectoriel, sous forme d'horodatage Unix en millisecondes. |
||
|
|
Retourne le délai d'expiration absolu d'un enregistrement de données spécifié (clé) dans un index vectoriel, sous forme d'horodatage Unix en secondes. |
||
|
Requêtes de plus proches voisins vectoriels |
|
Effectue une requête de plus proches voisins pour un vecteur spécifié dans un index vectoriel et retourne jusqu'à topN résultats. |
|
|
|
Recherche les plus proches voisins d'un vecteur spécifié dans un index vectoriel. La logique de recherche est identique à celle de TVS.KNNSEARCH, mais cette commande retourne également les attributs de tag. |
||
|
|
Identifie les plus proches voisins d'un vecteur de requête à partir d'une liste de clés spécifiée au sein d'un index vectoriel. |
||
|
|
Effectue une recherche par lots des plus proches voisins pour plusieurs vecteurs dans un index vectoriel spécifié. |
||
|
|
Recherche les plus proches voisins d'un vecteur spécifié à travers plusieurs index vectoriels. |
||
|
|
Effectue une requête de plus proches voisins pour un vecteur spécifié à travers plusieurs index vectoriels et retourne éventuellement les tags. |
||
|
|
Recherche les plus proches voisins de plusieurs vecteurs à travers plusieurs index vectoriels. |
||
|
Général |
|
Supprime un ou plusieurs index TairVector à l'aide de la commande native Redis DEL. |
La liste suivante décrit les conventions utilisées pour la syntaxe des commandes dans cette rubrique :
Mot-clé en majuscules: désigne le mot-clé de la commande.Texte en italique : indique des variables.
[options]: signale que les paramètres entre crochets sont facultatifs. Les paramètres non encadrés par des crochets sont obligatoires.A|B: indique que les paramètres séparés par des barres verticales (|) sont mutuellement exclusifs. Un seul de ces paramètres peut être spécifié....: précise que le paramètre précédant ce symbole peut être répété plusieurs fois.
TVS.CREATEINDEX
|
Élément |
Description |
|
Syntaxe |
|
|
Complexité temporelle |
O(1) |
|
Description de la commande |
Crée un index vectoriel en spécifiant l'algorithme de construction et d'interrogation ainsi que la fonction de distance. La suppression de cet index s'effectue exclusivement via la commande |
|
Paramètres |
|
|
Valeur de retour |
|
|
Exemple |
Exemples de commandes :
Exemple de sortie :
|
TVS.GETINDEX
|
Élément |
Description |
|
Syntaxe |
|
|
Complexité temporelle |
O(1) |
|
Description de la commande |
Récupère les métadonnées d'un index vectoriel spécifié. |
|
Paramètre |
|
|
Sortie |
|
|
Exemple |
Exécutez d'abord les commandes suivantes :
Exemple de commande pour un index HNSW :
Exemple de sortie :
|
TVS.DELINDEX
|
Élément |
Description |
|
Syntaxe |
|
|
Complexité temporelle |
O(N), où N représente le nombre de clés dans l'index vectoriel. |
|
Description |
Supprime un index vectoriel spécifié ainsi que toutes les données qu'il contient. |
|
Paramètre |
|
|
Valeur de retour |
|
|
Exemple |
Commande :
Sortie :
|
TVS.SCANINDEX
|
Élément |
Description |
|
Syntaxe |
|
|
Complexité temporelle |
O(N), où N correspond au nombre d'index vectoriels dans l'instance Tair. |
|
Description de la commande |
Analyse de manière incrémentielle les index vectoriels d'une instance Tair correspondant aux critères spécifiés. |
|
Options |
|
|
Sortie |
|
|
Exemple |
Exemple de commande :
Exemple de sortie :
Exemple de commande avec un motif :
Exemple de sortie :
|
TVS.HSET
|
Élément |
Description |
|
Syntaxe |
|
|
Complexité temporelle |
La complexité temporelle est O(1) si aucune donnée vectorielle n'est créée ou mise à jour ; sinon, elle est O(log(N)), où N est le nombre de clés dans l'index vectoriel. |
|
Description de la commande |
Insère un enregistrement de données dans un index vectoriel. Si un enregistrement avec la key spécifiée existe déjà, l'enregistrement existant est écrasé. |
|
Paramètres |
|
|
Valeur de retour |
|
|
Exemple |
Exemple de commande :
Exemple de sortie :
|
TVS.HGETALL
|
Élément |
Description |
|
Syntaxe |
|
|
Complexité temporelle |
O(1) |
|
Description de la commande |
Récupère tous les attributs et valeurs de l'enregistrement de données associé à la key spécifiée dans un index vectoriel. |
|
Paramètre |
|
|
Valeur de retour |
|
|
Exemple |
Exemple de commande :
Exemple de retour :
|
TVS.HMGET
|
Élément |
Description |
|
Syntaxe |
|
|
Complexité temporelle |
O(1) |
|
Description de la commande |
Retourne les valeurs des attribute keys spécifiées pour une key donnée dans un index vectoriel. |
|
Paramètres |
|
|
Retours |
|
|
Exemple |
Exemple de commande :
Exemple de sortie :
|
TVS.DEL
|
Élément |
Description |
|
Syntaxe |
|
|
Complexité temporelle |
O(1) |
|
Description de la commande |
Supprime l'enregistrement de données spécifié (key) de l'index vectoriel indiqué. |
|
Paramètre |
|
|
Valeur de retour |
|
|
Exemple |
Exemple de commande :
Exemple de sortie :
|
TVS.HDEL
|
Élément |
Description |
|
Syntaxe |
|
|
Complexité temporelle |
O(1) |
|
Description de la commande |
Supprime une ou plusieurs clés d'attribut (attribute_key) ainsi que leurs valeurs d'un enregistrement (key) dans un index vectoriel. |
|
Paramètres |
|
|
Valeur de retour |
|
|
Exemple |
Exemple de commande :
Exemple de sortie :
|
TVS.SCAN
|
Catégorie |
Description |
|
Syntaxe |
|
|
Complexité temporelle |
O(N), où N correspond au nombre de clés dans l'index vectoriel. |
|
Description de la commande |
Parcourt les enregistrements de données (identifiés par key) répondant aux conditions spécifiées au sein d'un index vectoriel donné. |
|
Paramètres |
|
|
Valeur de retour |
|
|
Exemple |
Exemple de commande :
Exemple de valeur de retour :
|
TVS.HINCRBY
|
Catégorie |
Description |
|
Syntaxe |
|
|
Complexité temporelle |
O(1) |
|
Description de la commande |
Incrémente la valeur entière de Si |
|
Paramètres |
|
|
Valeur de retour |
|
|
Exemple |
Exemple de commande :
Exemple de sortie :
|
TVS.HINCRBYFLOAT
|
Catégorie |
Description |
|
Syntaxe |
|
|
Complexité temporelle |
O(1) |
|
Description de la commande |
Incrémente la valeur de Si la clé |
|
Paramètres |
|
|
Valeur de retour |
|
|
Exemple |
Exemple de commande :
Exemple de sortie :
|
TVS.HPEXPIREAT
|
Catégorie |
Description |
|
Syntaxe |
|
|
Complexité temporelle |
O(1) |
|
Description de la commande |
Définit le délai d'expiration absolu, en millisecondes, pour un enregistrement de données identifié par sa key au sein d'un index vectoriel spécifié. |
|
Paramètres |
|
|
Valeur de retour |
|
|
Exemple |
Exemple de commande :
Exemple de sortie :
|
TVS.HPEXPIRE
|
Élément |
Description |
|
Syntaxe |
|
|
Complexité temporelle |
O(1) |
|
Description de la commande |
Définit un délai d'expiration relatif, en millisecondes, pour une key spécifiée dans un index vectoriel. |
|
Paramètres |
|
|
Valeur de retour |
|
|
Exemple |
Exemple de commande :
Exemple de sortie :
|
TVS.HEXPIREAT
|
Catégorie |
Description |
|
Syntaxe |
|
|
Complexité temporelle |
O(1) |
|
Description de la commande |
Définit un délai d'expiration absolu, précis à la seconde près, pour une key spécifiée dans un index vectoriel. |
|
Options |
|
|
Valeur de retour |
|
|
Exemple |
Exemple de commande :
Exemple de retour :
|
TVS.HEXPIRE
|
Catégorie |
Description |
|
Syntaxe |
|
|
Complexité temporelle |
O(1) |
|
Description de la commande |
Définit un délai d'expiration relatif, en secondes, pour un vecteur spécifié (key) dans un index vectoriel. |
|
Paramètres |
|
|
Sortie |
|
|
Exemple |
Exemple de commande :
Exemple de sortie :
|
TVS.HPTTL
|
Catégorie |
Description |
|
Syntaxe |
|
|
Complexité temporelle |
O(1) |
|
Description de la commande |
Renvoie le TTL, en millisecondes, pour un enregistrement de données spécifié (key) dans un index vectoriel. |
|
Paramètres |
|
|
Valeur de retour |
|
|
Exemple |
Exemple de commande :
Exemple de sortie :
|
TVS.HTTL
|
Catégorie |
Description |
|
Syntaxe |
|
|
Complexité temporelle |
O(1) |
|
Description de la commande |
Récupère le TTL en secondes pour un enregistrement de données spécifié (key) dans un index vectoriel donné. |
|
Paramètres |
|
|
Valeur de retour |
|
|
Exemple |
Exemple de commande :
Exemple de retour :
|
TVS.HPEXPIRETIME
|
Catégorie |
Description |
|
Syntaxe |
|
|
Complexité temporelle |
O(1) |
|
Description de la commande |
Renvoie le délai d'expiration absolu d'un enregistrement de données spécifié (key) dans un index vectoriel, sous forme d'horodatage Unix en millisecondes. |
|
Paramètre |
|
|
Valeur de retour |
|
|
Exemple |
Exemple de commande :
Exemple de sortie :
|
TVS.HEXPIRETIME
|
Élément |
Description |
|
Syntaxe |
|
|
Complexité temporelle |
O(1) |
|
Description de la commande |
Renvoie le délai d'expiration absolu d'un enregistrement de données spécifié (key) dans un index vectoriel, sous forme de timestamp Unix en secondes. |
|
Paramètres |
|
|
Sortie |
|
|
Exemple |
Exemple de commande :
Exemple de sortie :
|
TVS.KNNSEARCH
|
Élément |
Description |
|
Syntaxe |
|
|
Complexité temporelle |
N correspond au nombre de clés dans l'index vectoriel. |
|
Description de la commande |
Effectue une recherche des plus proches voisins pour un vecteur spécifié dans un index vectoriel et renvoie jusqu'à topN résultats. |
|
Paramètres |
|
|
Valeur de retour |
|
|
Exemples |
Exécutez d'abord les commandes suivantes :
Exemple 1 :
Réponse 1 :
Exemple 2 :
Réponse 2 :
|
TVS.KNNSEARCHFIELD
|
Élément |
Description |
|
Syntaxe |
|
|
Complexité temporelle |
N correspond au nombre de clés dans l'index vectoriel. |
|
Description de la commande |
Recherche les plus proches voisins d'un vecteur spécifié dans un index vectoriel. La logique de recherche est identique à celle de TVS.KNNSEARCH, mais cette commande renvoie également les attributs de tag. |
|
Paramètre |
|
|
Valeur de retour |
|
|
Exemple |
Exécutez d'abord les commandes suivantes :
Exemple de commande :
Exemple de sortie :
|
TVS.GETDISTANCE
|
Élément |
Description |
|
Syntaxe |
|
|
Complexité temporelle |
N correspond au nombre de clés dans l'index vectoriel. |
|
Description de la commande |
Recherche les plus proches voisins d'un vecteur de requête à partir d'une liste de clés spécifiée au sein d'un index vectoriel. |
|
Paramètre |
|
|
Sortie |
|
|
Exemple |
Exécutez d'abord les commandes suivantes :
Exemple de commande :
Exemple de sortie :
|
TVS.MKNNSEARCH
|
Élément |
Description |
|
Syntaxe |
|
|
Complexité temporelle |
N correspond au nombre de clés dans l'index vectoriel. |
|
Description de la commande |
Effectue une recherche par lots des plus proches voisins pour plusieurs vecteurs dans un index vectoriel spécifié. |
|
Paramètres |
|
|
Valeur de retour |
|
|
Exemple |
Exécutez d'abord les commandes suivantes :
Exemple de commande :
Exemple de sortie :
|
TVS.MINDEXKNNSEARCH
|
Élément |
Description |
|
Syntaxe |
|
|
Complexité temporelle |
N correspond au nombre de clés dans l'index vectoriel. |
|
Description de la commande |
Recherche les plus proches voisins d'un vecteur spécifié dans plusieurs index vectoriels. |
|
Paramètre |
|
|
Sortie |
|
|
Exemple |
Exécutez d'abord ces commandes :
Exemple de commande :
Exemple de sortie :
|
TVS.MINDEXKNNSEARCHFIELD
|
Catégorie |
Description |
|
Syntaxe |
|
|
Complexité temporelle |
N correspond au nombre de clés dans l'index vectoriel. |
|
Description de la commande |
Effectue une recherche des plus proches voisins pour un vecteur spécifié dans plusieurs index vectoriels et renvoie éventuellement des tags. |
|
Paramètres |
|
|
Sortie |
|
|
Exemple |
Exécutez d'abord les commandes suivantes :
Exemple de commande :
Exemple de sortie :
|
TVS.MINDEXMKNNSEARCH
|
Élément |
Description |
|
Syntaxe |
|
|
Complexité temporelle |
N correspond au nombre de clés dans l'index vectoriel. |
|
Description de la commande |
Recherche les plus proches voisins de plusieurs vecteurs dans plusieurs index vectoriels. |
|
Paramètres |
|
|
Valeur de retour |
|
|
Exemple |
Exécutez d'abord ces commandes :
Exemple de commande :
Exemple de sortie :
|