FT.CREATE

FT.CREATE crea un índice de búsqueda. Con Memorystore for Redis Cluster, los índices se crean a nivel de clúster. Si creas un índice en un nodo, se creará en todos los nodos del clúster.

Sintaxis

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 (obligatorio): es el nombre que le asignas al índice. Si ya existe un índice con el mismo nombre, se devuelve un error.

  • ON HASH (opcional): indica el tipo de datos HASH. Solo se admite el tipo de datos HASH.

  • PREFIX [count] [prefix] (opcional): indica qué claves hash se deben indexar.

  • SCHEMA hash_field_name (obligatorio): el hash_field_name después de SCHEMA identifica el nombre del campo en el hash. [AS alias] asigna el nombre alias como alias del atributo de nombre de campo.

Tipos de campo

  • VECTOR (obligatorio): campo de vector para la búsqueda vectorial.

    • [HNSW|FLAT] (obligatorio): algoritmo designado. FLAT (fuerza bruta) o HNSW (Hierarchical Navigable Small World).

    • attribute_count (obligatorio): número total de atributos de nombres y valores transmitidos en la configuración del algoritmo.

    • attribute_name attribute_value: pares clave-valor que definen la configuración del índice, pero que son específicos de uno de los dos algoritmos disponibles.

      • Atributos obligatorios del algoritmo HNSW:

        • DIM (obligatorio): número de dimensiones del vector. Los valores aceptados son 1-32768.

        • TYPE (obligatorio): el tipo de vector. Solo se admite FLOAT32.

        • DISTANCE_METRIC (obligatorio): debe ser uno de los siguientes valores: L2, IP o COSINE.

      • Atributos opcionales del algoritmo HNSW:

        • EF_RUNTIME (opcional): define el número de vectores que se examinarán durante una operación de consulta. El valor predeterminado es 10 y el máximo es 4096. Puede definir el valor de este parámetro para cada consulta que ejecute. Cuanto más altos sean los valores, más tiempo tardarán las consultas, pero mejorarán la recuperación de las consultas.

        • M (opcional): el número máximo de aristas salientes permitidas para cada nodo del gráfico en cada capa. El número máximo de aristas salientes es de 2 millones en la capa 0. El valor predeterminado es 16. El máximo es 512.

        • EF_CONSTRUCTION (opcional): define el recuento de los vectores que se examinarán durante la creación del índice. El valor predeterminado es 200 y el máximo es 4096. Cuanto más altos sean los valores, más tiempo se necesitará para crear los índices, pero mejor será la proporción de recuperación.

        • INITIAL_CAP (opcional): determina la capacidad inicial del vector del índice. El valor predeterminado es 1024. Este parámetro determina la asignación de memoria del índice.

      • Atributos obligatorios del algoritmo FLAT:

        • DIM (obligatorio): número de dimensiones del vector.

        • TYPE (obligatorio): el tipo de vector. Solo se admite FLOAT32.

        • DISTANCE_METRIC (obligatorio): debe ser uno de los siguientes valores: L2, IP o COSINE.

      • Atributos opcionales del algoritmo FLAT:

        • INITIAL_CAP (opcional): determina la capacidad inicial del vector del índice. Este parámetro determina la asignación de memoria del índice.
  • NUMERIC (opcional): campo numérico para la búsqueda numérica.

  • TAG (opcional): campo de etiqueta para la búsqueda basada en etiquetas.

    • SEPARATOR (opcional): carácter que se utiliza para dividir la cadena de etiquetas en etiquetas individuales. La opción predeterminada es ,. El valor especificado debe ser un carácter único. Por ejemplo, la cadena de etiquetas "hola, mundo" se interpretará como "hola" y "mundo", y se indexará de forma correspondiente. Los valores permitidos son ,.<>{}[]"':;!@#$%^&*()-+=~

    • CASESENSITIVE (opcional): indica si se distingue entre mayúsculas y minúsculas en los campos de la etiqueta. De forma predeterminada, las etiquetas no distinguen entre mayúsculas y minúsculas. La cadena de etiqueta "HeLLo" se indexará como "hello", y una consulta de "Hello" y "HeLlo" dará el mismo resultado.

Notas

  • En el comando FT.CREATE, los índices VECTOR, NUMERIC y TAG pueden aparecer en cualquier secuencia.

  • Un campo solo se puede indexar una vez. En el ejemplo proporcionado, el campo my_vector_field_key no se puede repetir en el mismo índice.

  • En un solo comando FT.CREATE, se pueden indexar un máximo de 10 campos.

  • De forma predeterminada, las etiquetas no distinguen entre mayúsculas y minúsculas.

  • De forma predeterminada, las etiquetas se delimitan con ,.

  • No se admiten consultas individuales sobre etiquetas ni consultas numéricas. Estos campos solo se pueden utilizar junto con búsquedas basadas en vectores.

Ejemplos

Ejemplo de 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

Ejemplo de FLAT:

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

Ejemplo de HNSW con un campo numérico:

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

Ejemplo de HNSW con un campo de etiqueta:

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 

Ejemplo de HNSW con una etiqueta y un campo numérico:

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

Ejemplo de HNSW con varios campos de etiqueta y numéricos:

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