Tous les produits
Search
Centre de documentation

Tair (Redis® OSS-Compatible):Vecteur

Dernière mise à jour :Aug 13, 2026

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 data structure 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

  1. 13 octobre 2022 : lancement de TairVector sur les instances Tair basées sur DRAM compatibles avec Redis 6.0.

  2. 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_size et attribute_data_size.

  3. 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. 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.

  5. 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. 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.

  7. 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.

Remarque

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

TVS.CREATEINDEX

TVS.CREATEINDEX index_name dims algorithm distance_method [algo_param_key alog_param_value] ...

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 TVS.DELINDEX.

TVS.GETINDEX

TVS.GETINDEX index_name

Récupère les métadonnées d'un index vectoriel spécifié.

TVS.DELINDEX

TVS.DELINDEX index_name

Supprime un index vectoriel spécifié ainsi que toutes les données qu'il contient.

TVS.SCANINDEX

TVS.SCANINDEX cursor [MATCH pattern] [COUNT count]

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

TVS.HSET

TVS.HSET index_name key attribute_key attribute_value [attribute_key attribute_value] ...

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é.

TVS.HGETALL

TVS.HGETALL index_name key

Récupère tous les attributs et valeurs de l'enregistrement correspondant à la clé spécifiée dans un index vectoriel.

TVS.HMGET

TVS.HMGET index_name key attribute_key [attribute_key ...]

Retourne les valeurs des clés d'attribut spécifiées pour une clé donnée dans un index vectoriel.

TVS.DEL

TVS.DEL index_name key [key ...]

Supprime l'enregistrement de données spécifié (clé) de l'index vectoriel indiqué.

TVS.HDEL

TVS.HDEL index_name key attribute_key [attribute_key ...]

Supprime une ou plusieurs attribute_key et leurs valeurs d'un enregistrement (clé) dans un index vectoriel.

TVS.SCAN

TVS.SCAN index_name cursor [MATCH pattern] [COUNT count] [FILTER filter_string] [VECTOR vector] [MAX_DIST max_distance]

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é.

TVS.HINCRBY

TVS.HINCRBY index_name key attribute_key num

Incrémente la valeur entière de attribute_key pour l'enregistrement de données spécifié (clé) dans un index vectoriel, selon la valeur num.

TVS.HINCRBYFLOAT

TVS.HINCRBYFLOAT index_name key attribute_key num

Incrémente la valeur de attribute_key pour un enregistrement de données donné (clé) du nombre à virgule flottante num dans un index vectoriel spécifié.

TVS.HPEXPIREAT

TVS.HPEXPIREAT index_name key milliseconds-timestamp

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é.

TVS.HPEXPIRE

TVS.HPEXPIRE index_name key milliseconds-timestamp

Définit un délai d'expiration relatif, en millisecondes, pour une clé spécifiée dans un index vectoriel.

TVS.HEXPIREAT

TVS.HEXPIREAT index_name key timestamp

Définit un délai d'expiration absolu, précis à la seconde près, pour une clé spécifiée dans un index vectoriel.

TVS.HEXPIRE

TVS.HEXPIRE index_name key timestamp

Définit un délai d'expiration relatif, en secondes, pour un vecteur spécifié (clé) dans un index vectoriel.

TVS.HPTTL

TVS.HPTTL index_name key

Retourne le TTL, en millisecondes, d'un enregistrement de données spécifié (clé) dans un index vectoriel.

TVS.HTTL

TVS.HTTL index_name key

Récupère le TTL, en secondes, d'un enregistrement de données spécifié (clé) dans un index vectoriel donné.

TVS.HPEXPIRETIME

TVS.HPEXPIRETIME index_name key

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.

TVS.HEXPIRETIME

TVS.HEXPIRETIME index_name key

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

TVS.KNNSEARCH

TVS.KNNSEARCH index_name topN vector [filter_string] [param_key param_value]

Effectue une requête de plus proches voisins pour un vecteur spécifié dans un index vectoriel et retourne jusqu'à topN résultats.

TVS.KNNSEARCHFIELD

TVS.KNNSEARCHFIELD index_name topN vector field_count field_name [field_name ...] [filter_string] [param_key param_value]

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.

TVS.GETDISTANCE

TVS.GETDISTANCE index_name vector key_count key [key, ...] [TOPN topN] [FILTER filter_string] [MAX_DIST max_distance]

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.

TVS.MKNNSEARCH

TVS.MKNNSEARCH index_name topN vector_count vector [vector ...] [filter_string] [param_key param_value]

Effectue une recherche par lots des plus proches voisins pour plusieurs vecteurs dans un index vectoriel spécifié.

TVS.MINDEXKNNSEARCH

TVS.MINDEXKNNSEARCH index_count index_name [index_name ...] topN vector [filter_string] [param_key param_value]

Recherche les plus proches voisins d'un vecteur spécifié à travers plusieurs index vectoriels.

TVS.MINDEXKNNSEARCHFIELD

TVS.MINDEXKNNSEARCHFIELD index_count index_name [index_name ...] topN vector field_count field_name [field_name ...] [filter_string] [param_key param_value]

Effectue une requête de plus proches voisins pour un vecteur spécifié à travers plusieurs index vectoriels et retourne éventuellement les tags.

TVS.MINDEXMKNNSEARCH

TVS.MINDEXMKNNSEARCH index_count index_name [index_name ...] topN vector_count vector [vector ...] [filter_string] [param_key param_value]

Recherche les plus proches voisins de plusieurs vecteurs à travers plusieurs index vectoriels.

Général

DEL

DEL key [key ...]

Supprime un ou plusieurs index TairVector à l'aide de la commande native Redis DEL.

Remarque

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

TVS.CREATEINDEX index_name dims algorithm distance_method [algo_param_key algo_param_value] ...

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 TVS.DELINDEX.

Paramètres

  • index_name : nom de l'index vectoriel.

  • dims : dimension du vecteur. Tous les vecteurs insérés dans l'index doivent partager cette même dimension, dont la valeur doit se situer dans l'intervalle [1, 32768].

  • algorithm : algorithme utilisé pour construire et interroger l'index. Valeurs autorisées :

    • FLAT : exécute les requêtes par recherche exhaustive sans créer d'index distinct. Cet algorithme convient aux petits jeux de données contenant moins de 10 000 enregistrements.

    • HNSW : construit un index basé sur un graphe HNSW pour les requêtes. Cette méthode est adaptée aux jeux de données volumineux.

  • distance_method : méthode de calcul de la distance entre les vecteurs. Valeurs autorisées :

    • L2 : distance euclidienne au carré.

    • IP : produit scalaire. La distance se calcule selon la formule 1 - inner product.

    • COSINE : distance cosinus. Le calcul s'effectue comme suit : 1 - cosine similarity. Lors de l'utilisation de la distance cosinus, les vecteurs d'entrée sont convertis en vecteurs unitaires (normalisation L2). Par conséquent, les vecteurs retournés peuvent différer des vecteurs originaux.

    • JACCARD : distance de Jaccard. La distance correspond à 1 - Jaccard coefficient. Ce choix impose de définir le paramètre data_type sur BINARY.

  • algo_param_key et algo_param_value :

    • data_type : type de données du vecteur dense. Valeurs autorisées :

      • FLOAT32 (par défaut) : nombre à virgule flottante simple précision codé sur 4 octets.

      • FLOAT16 : nombre à virgule flottante demi-précision codé sur 2 octets, conforme à la norme IEEE 754-2008. Ce type réduit l'espace de stockage des vecteurs mais peut entraîner une perte de précision. L'intervalle de valeurs pour FLOAT16 est [-65519, 65519].

      • BINARY : vecteur binaire composé uniquement de 0 et de 1. Ce type de données est exclusivement compatible avec la fonction de distance de Jaccard.

    • Paramètres spécifiques aux index HNSW :

      • ef_construct : taille de la liste dynamique utilisée lors de la construction de l'index avec l'algorithme HNSW. La valeur par défaut est 100 et l'intervalle valide est [1, 1000]. Une valeur plus élevée améliore généralement la précision des requêtes, mais réduit les performances.

      • M : nombre maximal de connexions sortantes pour chaque nœud à chaque couche du graphe. La valeur par défaut est 16 et l'intervalle valide est [1, 100]. Une valeur supérieure accroît habituellement la précision des requêtes au détriment des performances.

      • auto_gc : active ou désactive la récupération automatique de l'espace d'index. Les valeurs valides sont false (par défaut) et true. Cette fonctionnalité requiert une version mineure d'instance 6.2.8.2 ou ultérieure. Les index HNSW utilisent un marquage de suppression. L'activation de cette option permet une récupération automatique de l'espace, ce qui réduit l'utilisation de la mémoire mais peut affecter les performances des requêtes de plus proches voisins. Nous recommandons d'activer cette fonctionnalité pour les scénarios sensibles à la mémoire.

    • Paramètres spécifiques aux index hybrides :

      • Pour créer un index inversé sur un champ de tag spécifique, vous devez spécifier le nom du champ et son type de données.

        Utilisez la syntaxe inverted_index_<field_name> int|long|float|double|string pour créer un index inversé sur le champ field_name. Les types de données pris en charge sont int, long, float, double et string. Le nom du champ (field_name) et les mots-clés de type de données doivent être en minuscules.

        Par exemple, pour créer un index inversé sur un champ nommé productname de type String, utilisez inverted_index_productname string.

      • lexical_algorithm : algorithme de recherche en texte intégral.

        • bm25 : algorithme BM25 (Okapi BM25), adapté à la recherche en texte intégral.

          • Lorsque vous écrivez ensuite des données avec TVS.HSET, définissez attribute_key sur TEXT (en majuscules). Un index en texte intégral est alors automatiquement construit sur la attribute_value correspondante.

          • Vous fournissez le texte brut et Tair construit l'index.

        • vector : algorithme vectoriel, adapté aux vecteurs creux.

          Vous devez encoder le texte original (embedding) et fournir le vecteur creux. Le format des données est "[[,],[,],...]", où index est un uint32_t et value est un Float représentant le poids ou la fréquence du terme.

      • Si vous définissez lexical_algorithm sur bm25, vous pouvez également configurer les paramètres suivants.

        • analyzer : analyseur. Actuellement, jieba (par défaut) et ik_smart sont pris en charge.

        • k1 : contrôle la saturation de la fréquence des termes dans l'algorithme BM25. La valeur doit être supérieure à 0. La valeur par défaut est 1,2.

        • b : contrôle l'influence de la longueur du document dans l'algorithme BM25. La valeur doit se situer dans l'intervalle [0, 1]. La valeur par défaut est 0,75.

      • Si vous définissez lexical_algorithm sur vector, vous pouvez également configurer les paramètres suivants.

        • lexical_use_hnsw : indique s'il faut utiliser un index HNSW pour les vecteurs creux. Valeurs valides : 1 (utiliser un index HNSW) et 0 (par défaut, utiliser un index inversé).

        • lexical_hnsw_m : lorsque lexical_use_hnsw est défini sur 1, ce paramètre spécifie la valeur M pour l'index HNSW, comme décrit dans la section Paramètres spécifiques aux index HNSW ci-dessus.

        • lexical_hnsw_ef_construct : lorsque lexical_use_hnsw est défini sur 1, ce paramètre spécifie la valeur ef_construct pour l'index HNSW, comme décrit dans la section Paramètres spécifiques aux index HNSW ci-dessus.

      • hybrid_ratio : poids par défaut de la recherche vectorielle dans une requête. La valeur doit être un nombre flottant compris dans l'intervalle [0, 1]. La valeur par défaut est 0,5. Le poids de la recherche en texte intégral est calculé comme suit : 1 - hybrid_ratio.

Valeur de retour

  • Retourne OK en cas de succès.

  • Dans le cas contraire, retourne un message d'erreur.

Exemple

Exemples de commandes :

# Create a vector index with a vector dimension of 2, the HNSW algorithm, the Jaccard distance function, and the BINARY data type.
TVS.CREATEINDEX index_name0 2 HNSW JACCARD data_type BINARY

# Create a vector index with a vector dimension of 2, the HNSW algorithm, the L2 distance function, and the FLOAT32 data type.
TVS.CREATEINDEX index_name1 2 HNSW L2 

# Create a vector index with a vector dimension of 2, the FLAT algorithm, the IP distance function, and the FLOAT32 data type.
TVS.CREATEINDEX index_name2 2 FLAT IP 

# Create a vector index with a vector dimension of 2, the FLAT algorithm, the Jaccard distance function, and the BINARY data type.
TVS.CREATEINDEX index_name3 2 FLAT JACCARD data_type BINARY

# Create a hybrid index combining HNSW vector search with bm25 full-text search.
TVS.CREATEINDEX index_name4 2 HNSW IP lexical_algorithm bm25 inverted_index_productname string

# Create a sparse vector index with a vector dimension of 2, the IP distance function, and an HNSW index.
TVS.CREATEINDEX index_name5 2 HNSW IP lexical_algorithm vector lexical_use_hnsw 1 lexical_hnsw_m 8 lexical_hnsw_ef_construct 100

Exemple de sortie :

OK

TVS.GETINDEX

Élément

Description

Syntaxe

TVS.GETINDEX index_name

Complexité temporelle

O(1)

Description de la commande

Récupère les métadonnées d'un index vectoriel spécifié.

Paramètre

  • index_name : nom de l'index vectoriel.

Sortie

  • En cas de succès, la commande retourne les métadonnées de l'index vectoriel.

  • Si l'index vectoriel spécifié n'existe pas, elle retourne (empty array).

  • Sinon, elle retourne un message d'erreur.

Exemple

Exécutez d'abord les commandes suivantes :

TVS.CREATEINDEX my_index 2 HNSW L2 auto_gc true lexical_algorithm bm25
TVS.HSET my_index key0 VECTOR [1,2] creation_time 1730
TVS.HSET my_index key1 VECTOR [3,4] creation_time 1740
TVS.HSET my_index key2 VECTOR [5,6] creation_time 1750

Exemple de commande pour un index HNSW :

TVS.GETINDEX my_index

Exemple de sortie :

 1) "lexical_term_count"   // The number of terms in the full-text index.
 2) "0"
 3) "lexical_record_count" // The number of documents in the full-text index.
 4) "0"
 5) "lexical_algorithm"    // The full-text indexing algorithm.
 6) "bm25"
 7) "auto_gc"              // Specifies if automatic memory space reclamation is enabled for the HNSW index.
 8) "1"
 9) "dimension"            // The vector dimension.
10) "2"
11) "attribute_data_size"  // The memory usage of attribute data, in bytes.
12) "3720"
13) "distance_method"      // The distance method.
14) "L2"
15) "data_type"            // The vector data type.
16) "FLOAT32"
17) "algorithm"            // The indexing algorithm.
18) "HNSW"
19) "index_data_size"      // The memory usage of vector data, in bytes.
20) "105128040"
21) "M"                    // The maximum number of outgoing neighbors for each node in the graph index structure. This parameter is returned only for HNSW indexes.
22) "16"
23) "data_count"           // The number of user records.
24) "3"
25) "current_record_count" // The total number of vectors.
26) "3"
27) "ef_construct"         // The size of the dynamic array used during index construction. This parameter is returned only for HNSW indexes.
28) "100"
29) "inverted_index_productname" // Information about the inverted index, including the field name, data type, and count.
30) "field: productname, type: string, size: 1"
31) "delete_record_count"  // The number of vectors to be deleted.
32) "0"

TVS.DELINDEX

Élément

Description

Syntaxe

TVS.DELINDEX index_name

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

  • index_name : nom de l'index vectoriel.

Valeur de retour

  • Retourne 1 si l'index vectoriel est supprimé avec succès.

  • Retourne 0 si l'index spécifié n'existe pas.

  • Dans les autres cas, retourne un message d'erreur.

Exemple

Commande :

TVS.DELINDEX index_name0

Sortie :

(integer) 1

TVS.SCANINDEX

Élément

Description

Syntaxe

TVS.SCANINDEX cursor [MATCH pattern] [COUNT count]

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

  • cursor : curseur pour l'analyse. Utilisez 0 pour l'analyse initiale. Pour les analyses suivantes, utilisez le curseur retourné par l'appel précédent.

  • pattern : motif de style glob permettant de filtrer les index vectoriels par nom.

  • count : indication suggérant le nombre d'éléments à analyser par itération. La valeur par défaut est 10, mais le nombre réel d'éléments retournés peut varier.

Sortie

  • Retourne un tableau contenant deux éléments :

    • Le curseur pour la prochaine itération. Une valeur de « 0 » indique que l'analyse est terminée.

    • Un tableau des noms d'index vectoriels (index_name) trouvés lors de l'analyse en cours.

  • En cas d'échec de la commande, un message d'erreur est retourné.

Exemple

Exemple de commande :

TVS.SCANINDEX 0

Exemple de sortie :

1) "0"
2) 1) "index_name1"
   2) "index_name0"
   3) "index_name2"
   4) "index_name3"

Exemple de commande avec un motif :

TVS.SCANINDEX 0 MATCH **name[0|1]

Exemple de sortie :

1) "0"
2) 1) "index_name1"
   2) "index_name0"

TVS.HSET

Élément

Description

Syntaxe

TVS.HSET index_name key attribute_key attribute_value [attribute_key attribute_value] ...

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

  • index_name : nom de l'index vectoriel.

  • key : clé primaire de l'enregistrement de données. Vous pouvez utiliser la commande TVS.DEL pour supprimer l'enregistrement.

  • attribute_key et attribute_value : attributs de l'enregistrement, spécifiés sous forme d'une ou plusieurs paires clé-valeur.

    • Pour insérer des données vectorielles, définissez attribute_key sur le mot-clé VECTOR (en majuscules). La attribute_value correspondante doit être une chaîne de données vectorielles respectant la dimension (dims) de l'index vectoriel. Exemple : VECTOR [1,2]. Chaque clé ne peut avoir qu'un seul attribut VECTOR. Si vous redéfinissez cet attribut pour la même clé, les données existantes sont écrasées.

    • Pour insérer des données textuelles, vous devez avoir configuré les paramètres d'index hybride lors de la création de l'index. Définissez attribute_key sur le mot-clé TEXT (en majuscules). La attribute_value correspondante peut être soit des données textuelles, telles que "TairVector is a proprietary vector database service developed by Tair", soit un embedding, tel que "[[2,0.221],[42,09688],...]".

    • Vous pouvez également ajouter d'autres attributs personnalisés ou métadonnées, tels que create_time 1663637425 (date de création) ou location Hangzhou (emplacement).

Valeur de retour

  • En cas de succès, la commande retourne le nombre de nouveaux attributs ajoutés à l'enregistrement de données. Si seuls des attributs existants ont été mis à jour, elle retourne 0.

  • Sinon, elle retourne un message d'erreur.

Exemple

Exemple de commande :

TVS.HSET my_index key5 VECTOR [7,8] TEXT "TairVector is a proprietary vector database service developed by Tair" create_time 1800

Exemple de sortie :

(integer) 3

TVS.HGETALL

Élément

Description

Syntaxe

TVS.HGETALL index_name key

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

  • index_name : nom de l'index vectoriel.

  • key : clé primaire de l'enregistrement de données.

Valeur de retour

  • En cas de succès, retourne un tableau alternant les attributs et leurs valeurs correspondantes pour la key spécifiée.

  • Si l'index vectoriel spécifié ou la key n'existe pas, un (empty array) est retourné.

  • Dans le cas contraire, un message d'erreur est retourné.

Exemple

Exemple de commande :

TVS.HGETALL index_name0 key0

Exemple de retour :

1) "VECTOR"
2) "[1,2]"
3) "location"
4) "Hangzhou"
5) "create_time"
6) "1663637425"

TVS.HMGET

Élément

Description

Syntaxe

TVS.HMGET index_name key attribute_key [attribute_key ...]

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

  • index_name : nom de l'index vectoriel.

  • key : clé primaire de l'enregistrement.

  • attribute_key : clé(s) d'attribut à récupérer. Pour récupérer le vecteur, spécifiez le mot-clé VECTOR (en majuscules). Pour récupérer des données textuelles brutes depuis l'index en texte intégral, spécifiez le mot-clé TEXT (en majuscules).

Retours

  • En cas de succès, retourne un tableau de valeurs pour les attribute_key spécifiées, dans l'ordre demandé. Si une clé d'attribut n'existe pas, la commande retourne nil à sa place.

  • Sinon, la commande retourne un message d'erreur.

Exemple

Exemple de commande :

TVS.HMGET index_name0 key0 create_time location VECTOR TEXT

Exemple de sortie :

1) "1800"
2) "[7,8]"
3) "TairVector is a proprietary vector database service developed by Tair"

TVS.DEL

Élément

Description

Syntaxe

TVS.DEL index_name key [key ...]

Complexité temporelle

O(1)

Description de la commande

Supprime l'enregistrement de données spécifié (key) de l'index vectoriel indiqué.

Paramètre

  • index_name : nom de l'index vectoriel.

  • key : clé primaire d'un enregistrement de données.

Valeur de retour

  • Succès : supprime l'enregistrement de données spécifié (key) et retourne le nombre de suppressions pour cette key.

  • Retourne 0 si l'index vectoriel n'existe pas.

  • Dans le cas contraire, retourne un message d'erreur.

Exemple

Exemple de commande :

TVS.DEL index_name0 keyV

Exemple de sortie :

 (integer) 1

TVS.HDEL

Élément

Description

Syntaxe

TVS.HDEL index_name key attribute_key [attribute_key ...]

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

  • index_name : nom de l'index vectoriel.

  • key : clé primaire de l'enregistrement.

  • attribute_key : clé d'attribut ciblée par l'opération. Plusieurs clés peuvent être spécifiées. Pour supprimer des données vectorielles, utilisez le mot-clé VECTOR en majuscules. Pour supprimer l'intégralité des données de l'index, utilisez le mot-clé TEXT en majuscules.

Valeur de retour

  • Renvoie le nombre de clés attribute_key supprimées.

  • Renvoie 0 si l'index vectoriel n'existe pas.

  • Renvoie un message d'erreur dans les autres cas.

Exemple

Exemple de commande :

TVS.HDEL index_name0 keyc VECTOR

Exemple de sortie :

 (integer) 1

TVS.SCAN

Catégorie

Description

Syntaxe

TVS.SCAN index_name cursor [MATCH pattern] [COUNT count] [FILTER filter_string] [VECTOR vector] [MAX_DIST max_distance]

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

  • index_name : nom de l'index vectoriel.

  • cursor : curseur pour le parcours. Utilisez 0 pour la première itération. Pour les itérations suivantes, utilisez le curseur renvoyé par l'appel précédent.

  • pattern : motif de type glob pour la correspondance des clés.

  • count : nombre suggéré d'éléments à parcourir à chaque itération. La valeur par défaut est 10. Le nombre réel d'éléments retournés n'est pas garanti.

  • filter_string : conditions de filtrage.

    • Prend en charge les opérateurs tels que +, -, *, /, <, >, !=, (), && et ||. Les opérateurs > et < ne permettent pas les comparaisons de chaînes. Pour inclure une chaîne littérale dans votre filtre, échappez les guillemets avec une barre oblique inverse (\). Exemple : create_time > 1663637425 && location == \"Hangzhou\".

    • Séparez les opérateurs de leurs opérandes par des espaces. Exemple : « creation_time > 1735 ».

    • Les comparaisons booléennes directes, comme flag == true, ne sont pas prises en charge. Comparez plutôt la valeur en tant que chaîne : flag == \"true\".

  • vector : vecteur de requête. Ce paramètre doit être utilisé conjointement avec le paramètre max_distance.

  • max_distance : seuil de distance maximale. Ce paramètre doit être utilisé avec le paramètre vector. Lorsque les deux sont spécifiés, la commande ne retourne que les résultats dont la distance par rapport au vector de requête est inférieure à max_distance.

Valeur de retour

  • En cas de succès, la commande renvoie un tableau composé de deux éléments :

    • Le premier élément est le curseur pour l'itération suivante. Une valeur de 0 indique que le parcours est terminé.

    • Le second élément est un tableau contenant les noms de key des enregistrements trouvés lors de l'itération en cours.

  • En cas d'échec, la commande renvoie un message d'erreur.

Exemple

Exemple de commande :

TVS.SCAN index_name0 0

Exemple de valeur de retour :

1) "0"
2) 1) "key0"
   2) "keyV"

TVS.HINCRBY

Catégorie

Description

Syntaxe

TVS.HINCRBY index_name key attribute_key num

Complexité temporelle

O(1)

Description de la commande

Incrémente la valeur entière de attribute_key pour l'enregistrement de données spécifié (key) dans un index vectoriel, selon la valeur num.

Si attribute_key n'existe pas, la commande l'initialise à 0 avant d'effectuer l'incrémentation. Si la valeur de attribute_key n'est pas un entier, la commande renvoie une erreur.

Paramètres

  • index_name : nom de l'index vectoriel.

  • key : identifiant de clé primaire de l'enregistrement de données.

  • attribute_key : clé d'attribut à incrémenter.

  • num : valeur entière à ajouter.

Valeur de retour

  • Réponse entière : nouvelle valeur de attribute_key.

  • Dans le cas contraire, un message d'erreur est renvoyé.

Exemple

Exemple de commande :

TVS.HINCRBY index_name0 key0 tv01 20

Exemple de sortie :

(integer) 20

TVS.HINCRBYFLOAT

Catégorie

Description

Syntaxe

TVS.HINCRBYFLOAT index_name key attribute_key num

Complexité temporelle

O(1)

Description de la commande

Incrémente la valeur de attribute_key pour un enregistrement de données donné (key) du nombre à virgule flottante num dans un index vectoriel spécifié.

Si la clé attribute_key spécifiée n'existe pas, elle est créée avec num comme valeur initiale.

Paramètres

  • index_name : nom de l'index vectoriel.

  • key : identifiant de clé primaire de l'enregistrement.

  • attribute_key : clé d'attribut à incrémenter.

  • num : valeur à virgule flottante à ajouter.

Valeur de retour

  • En cas de succès, la valeur mise à jour de la clé d'attribut.

  • En cas d'échec, un message d'erreur.

Exemple

Exemple de commande :

TVS.HINCRBYFLOAT index_name0 key0 tv02 9.34

Exemple de sortie :

"9.34"

TVS.HPEXPIREAT

Catégorie

Description

Syntaxe

TVS.HPEXPIREAT index_name key milliseconds-timestamp

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

  • index_name : nom de l'index vectoriel.

  • key : clé primaire de l'enregistrement de données.

  • milliseconds-timestamp : horodatage UNIX exprimé en millisecondes. Si cet horodatage est antérieur à l'heure actuelle, la key expire immédiatement.

Valeur de retour

  • Renvoie 1 si le délai d'expiration a été défini pour une key existante.

  • Renvoie 0 si la key n'existe pas.

  • Dans les autres cas, une exception est renvoyée.

Exemple

Exemple de commande :

TVS.HPEXPIREAT index_name0 key1 16914619090000

Exemple de sortie :

(integer) 1

TVS.HPEXPIRE

Élément

Description

Syntaxe

TVS.HPEXPIRE index_name key milliseconds-timestamp

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

  • index_name : nom de l'index vectoriel.

  • key : identifiant de clé primaire du vecteur.

  • milliseconds-timestamp : délai d'expiration relatif, exprimé en millisecondes.

Valeur de retour

  • 1 si l'expiration a été définie.

  • 0 si la clé n'existe pas.

  • Une erreur dans les autres cas.

Exemple

Exemple de commande :

TVS.HPEXPIRE index_name0 key1 1000

Exemple de sortie :

(integer) 1

TVS.HEXPIREAT

Catégorie

Description

Syntaxe

TVS.HEXPIREAT index_name key timestamp

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

  • index_name : nom de l'index vectoriel.

  • key : clé primaire de l'enregistrement.

  • timestamp : horodatage UNIX en secondes. Si cet horodatage est antérieur à l'heure actuelle, la key expire immédiatement.

Valeur de retour

  • Renvoie 1 si le délai d'expiration a été défini pour la key.

  • Renvoie 0 si la key n'existe pas.

  • Renvoie un message d'erreur dans les autres cas.

Exemple

Exemple de commande :

TVS.HEXPIREAT index_name0 key2 1691466981

Exemple de retour :

(integer) 1

TVS.HEXPIRE

Catégorie

Description

Syntaxe

TVS.HEXPIRE index_name key timestamp

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

  • index_name : nom de l'index vectoriel.

  • key : identifiant de clé primaire du vecteur.

  • timestamp : délai d'expiration relatif, exprimé en secondes.

Sortie

  • Si le délai d'expiration est défini avec succès pour une key existante : 1.

  • Si la key n'existe pas : 0.

  • Dans le cas contraire, un message d'erreur est renvoyé.

Exemple

Exemple de commande :

TVS.HEXPIRE index_name0 key2 100

Exemple de sortie :

(integer) 1

TVS.HPTTL

Catégorie

Description

Syntaxe

TVS.HPTTL index_name key

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

  • index_name : nom de l'index vectoriel.

  • key : clé primaire de l'enregistrement de données.

Valeur de retour

  • Le TTL en millisecondes, si la key existe et possède un délai d'expiration défini.

  • -1 si la key existe mais qu'aucun délai d'expiration n'est défini.

  • -2 si la key ou l'index_name n'existe pas.

  • Un message d'erreur.

Exemple

Exemple de commande :

TVS.HPTTL index_name0 key2

Exemple de sortie :

(integer) 65417

TVS.HTTL

Catégorie

Description

Syntaxe

TVS.HTTL index_name key

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

  • index_name : nom de l'index vectoriel.

  • key : clé primaire de l'enregistrement de données.

Valeur de retour

  • Le TTL restant en secondes, si la key existe et possède un délai d'expiration.

  • -1, si la key existe mais sans délai d'expiration défini.

  • -2, si la key ou l'index_name n'existe pas.

  • Un message d'exception pour toute autre erreur.

Exemple

Exemple de commande :

TVS.HTTL index_name0 key2

Exemple de retour :

(integer) 58

TVS.HPEXPIRETIME

Catégorie

Description

Syntaxe

TVS.HPEXPIRETIME index_name key

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

  • index_name : nom de l'index vectoriel.

  • key : identifiant de clé primaire de l'enregistrement de données.

Valeur de retour

  • Si la key existe et possède un délai d'expiration défini : le délai d'expiration absolu sous forme d'horodatage Unix en millisecondes.

  • Si la key existe mais sans délai d'expiration défini : -1.

  • Si la key ou l'index_name n'existe pas : -2.

  • Dans les autres cas : un message d'erreur correspondant.

Exemple

Exemple de commande :

TVS.HPEXPIRETIME index_name0 key2

Exemple de sortie :

(integer) 1691473985764

TVS.HEXPIRETIME

Élément

Description

Syntaxe

TVS.HEXPIRETIME index_name key

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

  • index_name : nom de l'index vectoriel.

  • key : identifiant de clé primaire de l'enregistrement de données.

Sortie

  • Si la key existe et possède un délai d'expiration défini, la valeur retournée correspond au délai d'expiration absolu (timestamp Unix) en secondes.

  • La key existe mais n'a pas de délai d'expiration : -1.

  • Si la key ou l'index_name n'existe pas, la commande renvoie -2.

  • Dans les autres cas, un message d'erreur est renvoyé.

Exemple

Exemple de commande :

TVS.HEXPIRETIME index_name0 key2

Exemple de sortie :

(integer) 1691473985

TVS.KNNSEARCH

Élément

Description

Syntaxe

TVS.KNNSEARCH index_name topN vector [filter_string] [param_key param_value]

Complexité temporelle

  • Algorithme HNSW : O(log(N))

  • Algorithme FLAT : O(N)

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

  • index_name : nom de l'index vectoriel.

  • topN : nombre de résultats à renvoyer. La valeur doit se situer dans l'intervalle [1, 10000].

  • vector : valeur vectorielle utilisée pour la recherche des plus proches voisins. Pour effectuer uniquement une recherche plein texte sur un index hybride, transmettez "" à ce champ.

  • filter_string : condition de filtrage.

    • Prend en charge des opérateurs tels que +-*/<>!=()&&||. Les comparaisons de chaînes (supérieur ou inférieur) ne sont pas prises en charge. Pour inclure une chaîne littérale dans votre filtre, vous devez échapper les guillemets avec un caractère antislash (\). Exemple : "create_time > 1663637425 && location == \"Hangzhou\"".

    • Les opérateurs doivent être séparés de leurs opérandes par des espaces. Exemple : "creation_time > 1735".

    • Les comparaisons booléennes directes, comme flag == true, ne sont pas prises en charge. Comparez plutôt la valeur en tant que chaîne : flag == \"true\".

  • param_key et param_value : paramètres opérationnels de la requête, spécifiés sous forme de paires clé-valeur. Les paramètres suivants sont pris en charge :

    • ef_search : taille de la liste dynamique pour la recherche. La valeur par défaut est 100 et l'intervalle valide est [1, 1000]. Une valeur plus élevée améliore généralement la précision de la recherche, mais augmente la charge sur les performances. Ce paramètre est spécifique à l'algorithme HNSW.

      Pour un index hybride utilisant un index HNSW pour les vecteurs creux, utilisez sparse_ef_search afin de définir le paramètre ef_search pour l'index de vecteurs creux.

    • MAX_DIST : limite de distance maximale. Doit être un nombre à virgule flottante. Filtre les clés dont la distance par rapport au vecteur de requête est supérieure à cette valeur.

    • TEXT : texte de requête pour une recherche hybride, pouvant être du texte ou un vecteur. Si ce paramètre n'est pas spécifié ou s'il est défini sur "", aucune recherche plein texte n'est effectuée ; seule une recherche vectorielle a lieu.

    • hybrid_ratio : pondération des résultats de recherche vectorielle pour cette requête. La valeur doit être un nombre à virgule flottante compris dans l'intervalle [0, 1]. Par défaut, il s'agit de la valeur hybrid_ratio définie lors de la création de l'index. La pondération de la recherche plein texte est calculée selon la formule 1-hybrid_ratio.

    • Par défaut, le système applique une stratégie PostFilter, qui exécute la recherche vectorielle des k plus proches voisins (KNN) avant d'appliquer le filtrage scalaire.

      • vector_filter_count : nombre maximal de candidats à filtrer parmi les résultats de la recherche vectorielle. Valeur par défaut : 10 000.

        Avec la stratégie PostFilter, la recherche s'arrête si le nombre de candidats filtrés dépasse cette valeur sans avoir trouvé topN résultats.

      • fulltext_filter_count : nombre maximal de candidats à filtrer parmi les résultats de la recherche plein texte. Valeur par défaut : 10 000.

        Avec la stratégie PostFilter, la recherche s'arrête si le nombre de candidats filtrés dépasse cette valeur sans avoir trouvé topN résultats.

      • Pour utiliser une stratégie PreFilter, qui effectue un filtrage scalaire basé sur l'index inversé avant la recherche vectorielle KNN, ajoutez le paramètre search_policy scalar à votre requête.

        Vous pouvez également fournir le paramètre ivf_filter_count, qui définit le nombre maximal d'enregistrements à extraire de l'index inversé pendant la phase de pré-filtrage. La valeur par défaut est 10 000. Avec la stratégie PreFilter, si le nombre d'enregistrements correspondant au filtre scalaire dépasse cette valeur, le système revient automatiquement à la stratégie PostFilter.

      Remarque

      Dans la plupart des cas, ces paramètres par défaut garantissent une faible latence tout en maintenant une précision élevée. Vous pouvez les ajuster pour des requêtes spécifiques, mais gardez à l'esprit que des valeurs plus élevées peuvent augmenter la latence des requêtes.

Valeur de retour

  • Une exécution réussie renvoie les key des plus proches voisins ainsi que leurs distances par rapport au vecteur cible, classées de la plus proche à la plus éloignée.

  • Si l'index vectoriel spécifié n'existe pas, la commande renvoie un (empty array).

  • Dans les autres cas, un message d'erreur est renvoyé.

Exemples

Exécutez d'abord les commandes suivantes :

TVS.CREATEINDEX my_index_k 2 HNSW L2 inverted_index_productname string
TVS.HSET my_index_k key0 VECTOR [1,2] creation_time 1730 productname "Aliyun"
TVS.HSET my_index_k key1 VECTOR [3,4] creation_time 1740 productname "other"
TVS.HSET my_index_k key2 VECTOR [5,6] creation_time 1750 productname "Aliyun"

Exemple 1 :

TVS.KNNSEARCH my_index_k 2 [3,3.1] "creation_time > 1735"

Réponse 1 :

1) "key1"
2) "0.81000018119812012"
3) "key2"
4) "12.410000801086426"

Exemple 2 :

TVS.KNNSEARCH my_index_k 2 [3,3.1]  "creation_time > 1735 && productname ==  \"Aliyun\"" search_policy scala ivf_filter_count 15000

Réponse 2 :

1) "key2"
2) "12.410000801086426"

TVS.KNNSEARCHFIELD

Élément

Description

Syntaxe

TVS.KNNSEARCHFIELD index_name topN vector field_count field_name [field_name ...] [filter_string] [param_key param_value]

Complexité temporelle

  • Algorithme HNSW : O(log(N))

  • Algorithme FLAT : O(N)

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

  • index_name : nom de l'index vectoriel.

  • topN : nombre de résultats à renvoyer. La valeur doit se situer dans l'intervalle [1, 10000].

  • vector : vecteur de requête pour la recherche des plus proches voisins. Pour effectuer uniquement une recherche plein texte sur un index hybride, vous pouvez transmettre une chaîne vide ("") pour ce paramètre.

  • field_count : nombre d'attributs de tag à renvoyer. Pour renvoyer tous les attributs de tag, définissez field_count sur 0.

  • field_name : noms des attributs de tag à renvoyer. Le nombre de noms doit correspondre à la valeur de field_count.

  • filter_string : condition de filtrage. Pour plus d'informations, consultez TVS.KNNSEARCH.

  • param_key et param_value : paramètres opérationnels de la requête. Pour plus d'informations, consultez TVS.KNNSEARCH.

Valeur de retour

  • En cas de succès, cette commande renvoie la key, la distance par rapport au vecteur de requête et les paires clé-valeur des attributs de tag pour chaque plus proche voisin. Les résultats sont triés par distance croissante.

  • Si l'index vectoriel spécifié n'existe pas, elle renvoie (empty array).

  • Sinon, un message d'erreur est renvoyé.

Exemple

Exécutez d'abord les commandes suivantes :

TVS.CREATEINDEX my_index_k 2 HNSW L2
TVS.HSET my_index_k key0 VECTOR [1,2] creation_time 1730
TVS.HSET my_index_k key1 VECTOR [3,4] creation_time 1740
TVS.HSET my_index_k key2 VECTOR [5,6] creation_time 1750

Exemple de commande :

TVS.KNNSEARCHFIELD my_index_k 2 [3,3.1] 0 "creation_time > 1735"

Exemple de sortie :

1) 1) "key1"
   2) "0.81000018119812012"
   3) "VECTOR"
   4) "[3,4]"
   5) "creation_time"
   6) "1740"
2) 1) "key2"
   2) "12.410000801086426"
   3) "VECTOR"
   4) "[5,6]"
   5) "creation_time"
   6) "1750"

TVS.GETDISTANCE

Élément

Description

Syntaxe

TVS.GETDISTANCE index_name vector key_count key [key, ...] [TOPN topN] [FILTER filter_string] [MAX_DIST max_distance]

Complexité temporelle

  • Algorithme HNSW : O(log N)

  • Algorithme FLAT : O(N)

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

  • index_name : nom de l'index vectoriel.

  • vector : vecteur de requête.

  • key_count : nombre de clés candidates.

  • key : noms des clés candidates. Le nombre de clés doit correspondre à la valeur de key_count.

  • TOPN : nombre maximal de résultats à renvoyer. La valeur par défaut est key_count. La valeur doit se situer dans l'intervalle [1, key_count].

  • FILTER : condition de filtrage.

    • Prend en charge des opérateurs tels que +-*/<>!=()&&||. Les comparaisons supérieur à et inférieur à ne sont pas prises en charge pour les chaînes. Pour inclure une chaîne littérale, vous devez échapper les guillemets avec un antislash (\). Exemple : create_time > 1663637425 && location == \"Hangzhou\".

    • Les opérateurs doivent être séparés de leurs opérandes par des espaces. Par exemple, "creation_time > 1735".

    • Les comparaisons booléennes directes, telles que flag == true, ne sont pas prises en charge. Comparez plutôt la valeur en tant que chaîne : flag == \"true\".

  • MAX_DIST : filtre les clés dont la distance par rapport au vecteur de requête dépasse cette valeur.

Sortie

  • Renvoie les clés correspondantes et leurs distances. Par défaut, les résultats sont retournés dans le même ordre que les clés fournies. Si TOPN est spécifié, la commande renvoie les topN clés les plus proches et leurs distances, triées de la plus proche à la plus éloignée.

  • Renvoie un (empty array) si l'index vectoriel n'existe pas.

  • Pour toutes les autres erreurs, un message d'erreur est renvoyé.

Exemple

Exécutez d'abord les commandes suivantes :

TVS.CREATEINDEX my_index_k 2 HNSW L2
TVS.HSET my_index_k key0 VECTOR [1,2] creation_time 1730
TVS.HSET my_index_k key1 VECTOR [3,4] creation_time 1740
TVS.HSET my_index_k key2 VECTOR [5,6] creation_time 1750

Exemple de commande :

TVS.GETDISTANCE my_index_k [1,1] 2 key1 key2

Exemple de sortie :

1) "key1"
2) "13"
3) "key2"
4) "41"

TVS.MKNNSEARCH

Élément

Description

Syntaxe

TVS.MKNNSEARCH index_name topN vector_count vector [vector ...] [filter_string] [param_key param_value]

Complexité temporelle

  • Algorithme HNSW : vector_count * O(log(N))

  • Algorithme FLAT : vector_count * O(N)

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

  • index_name : nom de l'index vectoriel.

  • topN : nombre de résultats à renvoyer pour chaque vecteur de requête. La valeur doit se situer dans l'intervalle [1, 10000].

  • vector_count : nombre de vecteurs de requête.

  • vector : un ou plusieurs vecteurs pour la recherche des plus proches voisins. Pour effectuer uniquement une recherche plein texte sur un index hybride, transmettez "" pour ce paramètre.

  • filter_string : condition de filtrage. Pour plus d'informations, consultez la description dans TVS.KNNSEARCH.

  • param_key et param_value : paramètres d'exécution de la requête. Pour plus d'informations, consultez la description dans TVS.KNNSEARCH.

Valeur de retour

  • En cas de succès, la commande renvoie plusieurs tableaux de résultats, un pour chaque vecteur de requête. Chaque tableau contient les keys des plus proches voisins et leurs distances, triées de la plus proche à la plus éloignée.

  • Si l'index vectoriel n'existe pas, la commande renvoie un (empty array).

  • Sinon, la commande renvoie un message d'erreur.

Exemple

Exécutez d'abord les commandes suivantes :

TVS.CREATEINDEX my_index_m 2 HNSW L2
TVS.HSET my_index_m key0 VECTOR [1,2] creation_time 1730
TVS.HSET my_index_m key1 VECTOR [3,4] creation_time 1740
TVS.HSET my_index_m key2 VECTOR [5,6] creation_time 1750

Exemple de commande :

TVS.MKNNSEARCH my_index_m 2 2 [3,4] [5,6] "creation_time > 1735"

Exemple de sortie :

1) 1) "key1"
   2) "0"
   3) "key2"
   4) "8"
2) 1) "key2"
   2) "0"
   3) "key1"
   4) "8"

TVS.MINDEXKNNSEARCH

Élément

Description

Syntaxe

TVS.MINDEXKNNSEARCH index_count index_name [index_name ...] topN vector [filter_string] [param_key param_value]

Complexité temporelle

  • Algorithme HNSW : index_count * O(log(N))

  • Algorithme FLAT : index_count * O(N)

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

  • index_count : nombre d'index vectoriels.

  • index_name : noms des index vectoriels.

  • topN : nombre de plus proches voisins à renvoyer, de 1 à 10 000. La commande récupère les topN premiers résultats de chaque index spécifié, les agrège, puis renvoie les topN plus proches voisins globaux issus de l'ensemble combiné.

  • vector : vecteur de requête pour la recherche des plus proches voisins.

  • filter_string : conditions de filtrage. Pour plus d'informations, consultez la description dans TVS.KNNSEARCH.

  • param_key et param_value : paramètres opérationnels de la requête. Pour plus d'informations, consultez la description dans TVS.KNNSEARCH.

Sortie

  • Renvoie un tableau contenant les key des plus proches voisins et leurs distances par rapport au vecteur de requête, triées de la plus proche à la plus éloignée.

  • Renvoie un (empty array) si un index vectoriel spécifié n'existe pas.

  • Sinon, renvoie un message d'erreur.

Exemple

Exécutez d'abord ces commandes :

TVS.CREATEINDEX my_index_mk 2 HNSW L2
TVS.HSET my_index_mk key0 VECTOR [1,2] creation_time 1730
TVS.HSET my_index_mk key1 VECTOR [3,4] creation_time 1740
TVS.HSET my_index_mk key2 VECTOR [5,6] creation_time 1750
TVS.CREATEINDEX my_index_mx 2 HNSW L2
TVS.HSET my_index_mx key5 VECTOR [8,7] creation_time 1730
TVS.HSET my_index_mx key6 VECTOR [6,5] creation_time 1740
TVS.HSET my_index_mx key7 VECTOR [4,3] creation_time 1750

Exemple de commande :

TVS.MINDEXKNNSEARCH 2 my_index_mk my_index_mx 2 [0,0]

Exemple de sortie :

1) "key0"
2) "5"
3) "key7"
4) "25"

TVS.MINDEXKNNSEARCHFIELD

Catégorie

Description

Syntaxe

TVS.MINDEXKNNSEARCHFIELD index_count index_name [index_name ...] topN vector field_count field_name [field_name ...] [filter_string] [param_key param_value]

Complexité temporelle

  • Algorithme HNSW : index_count * O(log(N))

  • Algorithme FLAT : index_count * O(N)

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

  • index_count : nombre d'index vectoriels.

  • index_name : noms des index vectoriels.

  • topN : nombre de plus proches voisins à renvoyer, compris entre 1 et 10 000. La commande recherche les topN plus proches voisins dans chaque index vectoriel, agrège ces résultats, puis renvoie les topN résultats globaux ayant les distances les plus courtes.

  • vector : vecteur d'entrée pour la recherche des plus proches voisins.

  • field_count : nombre de tags à renvoyer. Pour renvoyer tous les tags, définissez field_count sur 0.

  • field_name : noms des tags à renvoyer. Le nombre de noms fournis doit correspondre à la valeur de field_count.

  • filter_string : conditions de filtrage. Pour plus d'informations, consultez TVS.KNNSEARCH.

  • param_key et param_value : paramètres d'exécution de la requête. Pour plus d'informations, consultez TVS.KNNSEARCH.

Sortie

  • En cas de succès, la commande renvoie les keys des plus proches voisins, leurs distances par rapport au vecteur de requête et leurs paires clé-valeur de tag correspondantes. Les résultats sont triés par distance croissante.

  • Si un index vectoriel spécifié n'existe pas, la commande renvoie un (empty array).

  • Sinon, la commande renvoie un message d'erreur.

Exemple

Exécutez d'abord les commandes suivantes :

TVS.CREATEINDEX my_index_mk 2 HNSW L2
TVS.HSET my_index_mk key0 VECTOR [1,2] creation_time 1730
TVS.HSET my_index_mk key1 VECTOR [3,4] creation_time 1740
TVS.HSET my_index_mk key2 VECTOR [5,6] creation_time 1750
TVS.CREATEINDEX my_index_mx 2 HNSW L2
TVS.HSET my_index_mx key5 VECTOR [8,7] creation_time 1730
TVS.HSET my_index_mx key6 VECTOR [6,5] creation_time 1740
TVS.HSET my_index_mx key7 VECTOR [4,3] creation_time 1750

Exemple de commande :

TVS.MINDEXKNNSEARCHFIELD 2 my_index_mk my_index_mx 2 [0,0] 0

Exemple de sortie :

1) 1) "key0"
   2) "5"
   3) "my_index_mk"
   4) "VECTOR"
   5) "[1,2]"
   6) "creation_time"
   7) "1730"
2) 1) "key1"
   2) "25"
   3) "my_index_mk"
   4) "VECTOR"
   5) "[3,4]"
   6) "creation_time"
   7) "1740"

TVS.MINDEXMKNNSEARCH

Élément

Description

Syntaxe

TVS.MINDEXMKNNSEARCH index_count index_name [index_name ...] topN vector_count vector [vector ...] [filter_string] [param_key param_value]

Complexité temporelle

  • Algorithme HNSW : index_count vector_count O(log(N))

  • Algorithme FLAT : index_count vector_count O(N)

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

  • index_count : nombre d'index vectoriels.

  • index_name : nom d'un index vectoriel.

  • topN : nombre de plus proches voisins à retourner pour chaque vecteur de requête. La valeur doit se situer dans l'intervalle [1, 10000]. Par défaut, la commande récupère les topN résultats de chaque index vectoriel, les agrège, puis retourne les topN résultats globaux présentant les distances les plus courtes.

  • vector_count : nombre de vecteurs de requête.

  • vector : vecteur de requête utilisé pour la recherche des plus proches voisins.

  • filter_string : conditions de filtrage. Pour plus d'informations, consultez TVS.KNNSEARCH.

  • param_key et param_value : paramètres opérationnels de la requête. Pour plus d'informations, consultez TVS.KNNSEARCH.

Valeur de retour

  • En cas de succès, retourne un tableau de tableaux de résultats respectant l'ordre des vecteurs de requête. Chaque tableau de résultats contient la key et la distance de chaque plus proche voisin, classées par distance croissante (du plus proche au plus éloigné).

  • Si un index vectoriel spécifié n'existe pas, retourne un (empty array).

  • Dans les autres cas, retourne un message d'erreur.

Exemple

Exécutez d'abord ces commandes :

TVS.CREATEINDEX my_index_mk 2 HNSW L2
TVS.HSET my_index_mk key0 VECTOR [1,2] creation_time 1730
TVS.HSET my_index_mk key1 VECTOR [3,4] creation_time 1740
TVS.HSET my_index_mk key2 VECTOR [5,6] creation_time 1750
TVS.CREATEINDEX my_index_mx 2 HNSW L2
TVS.HSET my_index_mx key5 VECTOR [8,7] creation_time 1730
TVS.HSET my_index_mx key6 VECTOR [6,5] creation_time 1740
TVS.HSET my_index_mx key7 VECTOR [4,3] creation_time 1750

Exemple de commande :

TVS.MINDEXMKNNSEARCH 2 my_index_mk my_index_mx 2 2 [0,0] [3,3]

Exemple de sortie :

1) 1) "key0"
   2) "5"
   3) "key7"
   4) "25"
2) 1) "key1"
   2) "1"
   3) "key7"
   4) "1"