FT.CREATE

FT.CREATE crea un indice per la ricerca. Con Memorystore per Valkey, gli indici vengono creati a livello di cluster. La creazione di un indice su un nodo ne comporterà la creazione su tutti i nodi del cluster.

Sintassi

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 (obbligatorio): il nome assegnato all'indice. Se esiste già un indice con lo stesso nome, viene restituito un errore.

  • ON HASH (facoltativo): indica il tipo di dati HASH. È supportato solo il tipo di dati HASH.

  • PREFIX [count] [prefix] (facoltativo): indica le chiavi hash da indicizzare.

  • SCHEMA hash_field_name (obbligatorio): il nome del campo hash_field_name dopo SCHEMA identifica il nome del campo nell'hash. [AS alias] assegna il nome alias come alias per l'attributo nome del campo.

Tipi di campo

  • VECTOR (obbligatorio): campo vettoriale per la ricerca vettoriale:

    • [HNSW|FLAT] (obbligatorio): algoritmo designato. FLAT (forza bruta) o HNSW (Hierarchical Navigable Small World).

    • attribute_count (obbligatorio): numero totale di nomi e valori degli attributi passati nella configurazione dell'algoritmo.

    • attribute_name attribute_value: coppie chiave-valore che definiscono la configurazione dell'indice, ma sono specifiche per uno dei due algoritmi disponibili.

      • Attributi dell'algoritmo HNSW obbligatori:

        • DIM (obbligatorio): numero di dimensioni del vettore. I valori accettati sono 1-32768.

        • TYPE (obbligatorio): il tipo di vettore. È supportato solo FLOAT32.

        • DISTANCE_METRIC (obbligatorio): deve essere uno dei seguenti valori: L2, IP o COSINE.

      • Attributi facoltativi dell'algoritmo HNSW:

        • EF_RUNTIME (facoltativo): imposta il conteggio dei vettori da esaminare durante un'operazione di query. Il valore predefinito è 10 e il valore massimo è 4096. Puoi impostare questo valore parametro per ogni query eseguita. Valori più elevati aumentano i tempi di query, ma migliorano il richiamo delle query.

        • M (facoltativo): il conteggio degli archi in uscita massimi consentiti per ogni nodo del grafico in ogni livello. Il numero massimo di archi in uscita è 2 milioni per il livello 0. Il valore predefinito è 16. Il numero massimo è 512.

        • EF_CONSTRUCTION (facoltativo): imposta il conteggio dei vettori da esaminare durante la creazione dell'indice. Il valore predefinito è 200 e il valore massimo è 4096. Valori più elevati aumentano il tempo necessario per creare gli indici, ma migliorano il rapporto di richiamo.

        • INITIAL_CAP (facoltativo): determina la capacità del vettore iniziale dell'indice. Il valore predefinito è 1024. Questo parametro determina l'allocazione della memoria dell'indice.

      • Attributi dell'algoritmo FLAT obbligatori:

        • DIM (obbligatorio): numero di dimensioni del vettore.

        • TYPE (obbligatorio): il tipo di vettore. È supportato solo FLOAT32.

        • DISTANCE_METRIC (obbligatorio): deve essere uno dei seguenti valori: L2, IP o COSINE.

      • Attributi facoltativi dell'algoritmo FLAT:

        • INITIAL_CAP (facoltativo): determina la capacità del vettore iniziale dell'indice. Questo parametro determina l'allocazione della memoria dell'indice.
  • NUMERIC (facoltativo) - Campo numerico per la ricerca numerica.

  • TAG (facoltativo) - Campo tag per la ricerca basata su TAG.

    • SEPARATOR (facoltativo): un carattere utilizzato per dividere la stringa del tag in singoli tag. L'opzione predefinita è ,. Il valore specificato deve essere un carattere singolare. Ad esempio, la stringa del tag "hello, world" verrà interpretata come "hello" e "world" e verrà indicizzata di conseguenza. I valori consentiti sono ,.<>{}[]"':;!@#$%^&*()-+=~

    • CASESENSITIVE (facoltativo): indica la sensibilità alle maiuscole dei campi dei tag. Per impostazione predefinita, i tag non sono sensibili alle maiuscole. Una stringa di tag "HeLLo" verrà indicizzata come "ciao" e una query per "Ciao" e "HeLlo" produrrà lo stesso risultato.

Note

  • All'interno del comando FT.CREATE, gli indici VECTOR, NUMERIC e TAG possono apparire in qualsiasi sequenza.

  • Un campo può essere indicizzato una sola volta. Nell'esempio fornito, il campo my_vector_field_key non può essere ripetuto nello stesso indice.

  • In un singolo comando FT.CREATE è possibile indicizzare un massimo di 10 campi.

  • Per impostazione predefinita, i TAG non distinguono tra maiuscole e minuscole.

  • Per impostazione predefinita, i TAG sono delimitati da ,.

  • Le singole query sui tag e sulle query numeriche non sono supportate. Questi campi possono essere utilizzati solo insieme alle ricerche basate su vettori.

Esempi

Esempio di 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

Esempio di FLAT:

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

Esempio di HNSW con un campo numerico:

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

Esempio di HNSW con un campo 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 

Esempio di HNSW con un tag e un campo numerico:

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

Esempio di HNSW con più campi numerici e di 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_1 TAG SEPARATOR '@' CASESENSITIVE my_numeric_field_key_1 NUMERIC my_numeric_field_key_2 NUMERIC my_tag_field_key_2 TAG