FT.CREATE

FT.CREATE crée un index indexable. Avec Memorystore pour Valkey, les index sont créés au niveau du cluster. La création d'un indice sur un nœud entraîne la création de l'indice sur tous les nœuds du cluster.

Syntaxe

FT.CREATE index
  ON HASH
  [PREFIX count prefix [prefix ...]]
  SCHEMA field_name [AS alias] VECTOR [HNSW|FLAT] attribute_count [attribute_name attribute_value]
  [field_name [AS alias] NUMERIC]
  [field_name [AS alias] TAG [SEPARATOR ...] [CASESENSITIVE]]
  • index (obligatoire) : nom que vous donnez à votre index. Si un indice portant le même nom existe déjà, une erreur est renvoyée.

  • ON HASH (facultatif): indique le type de données HASH. Seul le type de données HASH est accepté.

  • PREFIX [count] [prefix] (facultatif): indique les clés de hachage à indexer.

  • SCHEMA hash_field_name (obligatoire) : le nom de champ de hachage après SCHEMA identifie le nom du champ dans le hachage. [AS alias] attribue le nom alias comme alias de l'attribut de nom de champ.

Types de champ

  • VECTOR (obligatoire) : champ de vecteur pour la recherche vectorielle :

    • [HNSW|FLAT] (obligatoire): algorithme désigné. Soit FLAT (force brute), soit HNSW (Hierarchical Navigable Small World).

    • attribute_count (obligatoire) : nombre total d'attributs de noms et de valeurs transmis dans la configuration de l'algorithme.

    • attribute_name attribute_value : paires clé-valeur qui définissent la configuration de l'index, mais qui sont spécifiques à l'un des deux algorithmes disponibles.

      • Attributs obligatoires de l'algorithme HNSW :

        • DIM (obligatoire): nombre de dimensions vectorielles. Les valeurs acceptées sont 1-32768.

        • TYPE (obligatoire): type de vecteur. Seul FLOAT32 est accepté.

        • DISTANCE_METRIC (obligatoire): saisissez L2, IP ou COSINE.

      • Attributs facultatifs de l'algorithme HNSW :

        • EF_RUNTIME (facultatif): définit le nombre de vecteurs à examiner lors d'une opération de requête. La valeur par défaut est 10, et la valeur maximale est 4096. Vous pouvez définir cette valeur de paramètre pour chaque requête que vous exécutez. Des valeurs plus élevées augmentent les temps de requête, mais améliorent le rappel des requêtes.

        • M (facultatif): le nombre maximal d'arêtes sortantes autorisées pour chaque nœud du graphique de chaque couche. Le nombre maximal de arêtes sortantes est de 2 M pour la couche 0. La valeur par défaut est 16. Le maximum est 512.

        • EF_CONSTRUCTION (facultatif): définit le nombre de vecteurs à examiner lors de la construction de l'index. La valeur par défaut est 200 et la valeur maximale est 4096. Des valeurs plus élevées augmentent le temps nécessaire pour créer des index, mais améliorent le ratio de rappel.

        • INITIAL_CAP (facultatif): détermine la capacité du vecteur de départ de l'index. La valeur par défaut est 1024. Ce paramètre détermine l'allocation de mémoire de l'index.

      • Attributs obligatoires de l'algorithme FLAT:

        • DIM (obligatoire): nombre de dimensions vectorielles.

        • TYPE (obligatoire) : type de vecteur. Seule l'option FLOAT32 est acceptée.

        • DISTANCE_METRIC (obligatoire) : doit être défini sur l'une des valeurs suivantes : L2, IP ou COSINE.

      • Attributs facultatifs de l'algorithme FLAT :

        • INITIAL_CAP (facultatif): détermine la capacité du vecteur de départ de l'index. Ce paramètre détermine l'allocation de mémoire de l'index.
  • NUMERIC (facultatif) : champ numérique pour la recherche numérique.

  • TAG (facultatif) – Champ de tag pour la recherche basée sur un tag.

    • SEPARATOR (facultatif): caractère permettant de diviser la chaîne de balise en tags individuels. La valeur par défaut est ,. La valeur spécifiée doit être un caractère unique. Par exemple, la chaîne de balise "hello, world" sera interprétée comme "hello" et "world", et sera indexée en conséquence. Valeurs autorisées : ,.<>{}[]"':;!@#$%^&*()-+=~

    • CASESENSITIVE (facultatif) : indique si les champs de balise sont sensibles à la casse. Par défaut, les balises ne sont pas sensibles à la casse. Une chaîne de balise "HeLLo" sera indexé sous la forme « hello », et une requête pour "Hello" et "HeLlo" produira le même résultat.

Remarques

  • Dans la commande FT.CREATE, les index VECTOR, NUMERIC et TAG peuvent apparaître dans n'importe quel ordre.

  • Un champ ne peut être indexé qu'une seule fois. Dans l'exemple fourni, le champ my_vector_field_key ne peut pas être répété dans le même index.

  • Dans une seule commande FT.CREATE, 10 champs peuvent être indexés au maximum.

  • Par défaut, les TAG ne sont pas sensibles à la casse.

  • Par défaut, les balises sont délimitées par ,.

  • Les requêtes individuelles sur les tags et les requêtes numériques ne sont pas acceptées. Ces champs ne peuvent être utilisés qu'avec des recherches vectorielles.

Examples

Exemple HNSW :

FT.CREATE my_index_name SCHEMA my_hash_field_key VECTOR HNSW 10 TYPE FLOAT32 DIM 20 DISTANCE_METRIC COSINE M 4 EF_CONSTRUCTION 100

Exemple FLAT:

FT.CREATE my_index_name SCHEMA my_hash_field_key VECTOR Flat 8 TYPE FLOAT32 DIM 20 DISTANCE_METRIC COSINE INITIAL_CAP 15000

Exemple HNSW avec un champ numérique:

FT.CREATE my_index_name SCHEMA my_vector_field_key VECTOR HNSW 10 TYPE FLOAT32 DIM 20 DISTANCE_METRIC COSINE M 4 EF_CONSTRUCTION 100 my_numeric_field_key NUMERIC

Exemple HNSW avec un champ de tag:

FT.CREATE my_index_name SCHEMA my_vector_field_key VECTOR HNSW 10 TYPE FLOAT32 DIM 20 DISTANCE_METRIC COSINE M 4 EF_CONSTRUCTION 100 my_tag_field_key TAG SEPARATOR '@' CASESENSITIVE 

Exemple HNSW avec un tag et un champ numérique:

FT.CREATE my_index_name SCHEMA my_vector_field_key VECTOR HNSW 10 TYPE FLOAT32 DIM 20 DISTANCE_METRIC COSINE M 4 EF_CONSTRUCTION 100 my_tag_field_key TAG SEPARATOR '@' CASESENSITIVE my_numeric_field_key NUMERIC

Exemple HNSW avec plusieurs champs numériques et tags:

FT.CREATE my_index_name SCHEMA my_vector_field_key VECTOR HNSW 10 TYPE FLOAT32 DIM 20 DISTANCE_METRIC COSINE M 4 EF_CONSTRUCTION 100 my_tag_field_key_1 TAG SEPARATOR '@' CASESENSITIVE my_numeric_field_key_1 NUMERIC my_numeric_field_key_2 NUMERIC my_tag_field_key_2 TAG