FT.CREATE

FT.CREATE cria um índice pesquisável. Com o Memorystore para Valkey, os índices são criados no nível do cluster. A criação de um índice em qualquer nó vai causar a criação do índice em todos os nós do cluster.

Sintaxe

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 (obrigatório): é o nome que você atribui ao índice. Se um índice com a mesma nome já existir, será retornado um erro.

  • ON HASH (opcional): indica o tipo de dados HASH. Somente o tipo de dados HASH é compatível.

  • PREFIX [count] [prefix] (opcional): indica quais chaves de hash são indexadas.

  • SCHEMA hash_field_name (obrigatório): o hash_field_name após SCHEMA identifica o nome do campo no hash. [AS alias] atribui o nome alias como um alias para o de nome do campo.

Tipos de campo

  • VECTOR (obrigatório): campo vetorial para pesquisa vetorial:

    • [HNSW|FLAT] (obrigatório): algoritmo designado. FLAT (força bruta) ou HNSW (Hierarchical Navigable Small World).

    • attribute_count (obrigatório): contagem total de atributos de nomes e valores transmitidos na configuração do algoritmo.

    • attribute_name attribute_value: pares de chave-valor que definem a configuração do índice, mas são específicos para um dos dois algoritmos.

      • Atributos obrigatórios do algoritmo HNSW:

        • DIM (obrigatório): é a contagem de dimensões vetoriais. Os valores aceitos são de 1 a 32768.

        • TYPE (obrigatório): o tipo de vetor. Somente FLOAT32 é aceito.

        • DISTANCE_METRIC (obrigatório): precisa ser um dos seguintes: L2, IP ou COSINE.

      • Atributos opcionais do algoritmo HNSW:

        • EF_RUNTIME (opcional): define a contagem de vetores a serem examinados durante uma operação de consulta. O padrão é 10, e o máximo é 4096. É possível definir esse valor de parâmetro para cada consulta executada. Valores mais altos aumentam o tempo das consultas, mas melhoram o recall da consulta.

        • M (opcional): a contagem das arestas de saída máximas permitidas para cada nó no gráfico em cada camada. O número máximo de arestas de saída é 2 milhões para a camada 0. O padrão é 16. O máximo é 512.

        • EF_CONSTRUCTION (opcional): define a contagem de vetores a serem examinados durante a criação do índice. O padrão é 200, e o máximo é 4096. Valores mais altos aumentam o tempo necessário para criar índices, mas melhoram a proporção de recuperação.

        • INITIAL_CAP (opcional): determina a capacidade vetorial inicial do índice. O padrão é 1024. Esse parâmetro determina a alocação de memória do índice.

      • Atributos obrigatórios do algoritmo FLAT:

        • DIM (obrigatório): é a contagem de dimensões vetoriais.

        • TYPE (obrigatório): o tipo de vetor. Somente FLOAT32 é aceito.

        • DISTANCE_METRIC (obrigatório): precisa ser um destes valores: L2, IP ou COSINE.

      • Atributos opcionais do algoritmo FLAT:

        • INITIAL_CAP (opcional): determina a capacidade vetorial inicial do índice. Esse parâmetro determina a alocação de memória do índice.
  • NUMERIC (opcional): campo numérico para pesquisa numérica.

  • TAG (opcional): campo de tag para pesquisa baseada em TAG.

    • SEPARATOR (opcional): um caractere usado para dividir a string de tags em tags individuais. A opção padrão é ,. O valor especificado precisa ser um caractere único. Por exemplo, a string da tag "hello, world" será interpretada como "olá" e "mundo" e serão indexados de acordo. Os valores permitidos são ,.<>{}[]"':;!@#$%^&*()-+=~

    • CASESENSITIVE (opcional): indica a diferenciação entre maiúsculas e minúsculas dos campos de tag. Por padrão, as tags não diferenciam maiúsculas de minúsculas. Uma string de tag "HeLLo" será indexada como "hello", e uma consulta para "Hello" e "HeLlo" vai gerar o mesmo resultado.

Observações

  • No comando FT.CREATE, os índices VECTOR, NUMERIC e TAG podem aparecer em qualquer sequência.

  • Um campo só pode ser indexado uma vez. No exemplo fornecido, o campo my_vector_field_key não pode ser repetido no mesmo índice.

  • Em um único comando FT.CREATE, é possível indexar no máximo 10 campos.

  • Por padrão, as TAGs não diferenciam maiúsculas de minúsculas.

  • Por padrão, as TAGs são delimitadas por ,.

  • Não há suporte para consultas individuais em tags e consultas numéricas. Esses campos só podem ser utilizados em conjunto com pesquisas baseadas em vetores.

Exemplos

Exemplo 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

Exemplo 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

Exemplo de HNSW com um 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

Exemplo de HNSW com um campo 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 

Exemplo de HNSW com uma tag e um 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

Exemplo de HNSW com vários campos de tag e 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