FT.CREATE

FT.CREATE 会创建可搜索的索引。使用 Memorystore for Valkey 时,索引会在集群级创建。在任意节点上创建索引会导致在集群中的所有节点上创建索引。

语法

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(必需):这是您为索引指定的名称。如果已存在同名索引,则会返回错误。

  • ON HASH(可选):表示 HASH 数据类型。仅支持 HASH 数据类型。

  • PREFIX [count] [prefix](可选):用于指明要编入索引的哈希键。

  • SCHEMA hash_field_name(必需):SCHEMA 后面的 hash_field_name 用于标识哈希中的字段名称。[AS alias] 将名称 alias 指定为字段名称属性的别名。

字段类型

  • VECTOR(必需):用于向量搜索的矢量字段:

    • [HNSW|FLAT](必需):指定的算法。FLAT(蛮力法)或 HNSW(分层可导航小世界)。

    • attribute_count(必需):算法配置中传递的名称和值的总属性数。

    • attribute_name attribute_value:用于定义索引配置的键值对,但仅适用于两种可用算法之一。

      • 必需的 HNSW 算法属性:

        • DIM(必需):向量维度数。接受的值为 1-32768

        • TYPE(必需):矢量类型。仅支持 FLOAT32

        • DISTANCE_METRIC(必需):必须是以下值之一 - L2IPCOSINE

      • 可选的 HNSW 算法属性:

        • EF_RUNTIME(可选):设置在查询操作期间要检查的向量数量。默认值为 10,最大值为 4096。您可以为每次运行的查询设置此参数值。值越高,查询时间越长,但查询召回率越高。

        • M(可选):图表中每个层中每个节点允许的出边数上限。第 0 层的出边数量上限为 200 万。默认值为 16。最多 512 个字符。

        • EF_CONSTRUCTION(可选):设置在构建索引期间要检查的向量数量。默认值为 200,最大值为 4096。值越高,创建索引所需的时间越长,但召回率越高。

        • INITIAL_CAP(可选):确定索引的起始矢量容量。默认值为 1024。 此参数用于确定索引内存分配。

      • 必需的 FLAT 算法属性:

        • DIM(必需):向量维度数。

        • TYPE(必需):矢量类型。仅支持 FLOAT32

        • DISTANCE_METRIC(必需):必须是以下值之一 - L2IPCOSINE

      • 可选的 FLAT 算法属性:

        • INITIAL_CAP(可选):确定索引的起始矢量容量。此参数用于确定索引内存分配。
  • NUMERIC(可选)- 用于数字搜索的数字字段。

  • TAG(可选)- 用于基于 TAG 进行搜索的 TAG 字段。

    • SEPARATOR(可选):用于将代码字符串划分为单个代码的字符。默认选项为 ,。指定的值必须是单个字符。例如,代码字符串“hello, world”将被解读为“hello”和“world”,并相应地编入索引。允许的值为 ,.<>{}[]"':;!@#$%^&*()-+=~

    • CASESENSITIVE(可选):表示标记字段是否区分大小写。默认情况下,代码不区分大小写。标记字符串“HeLLo”将编入索引为“hello”,对“Hello”和“HeLlo”进行查询将会得到相同的结果。

备注

  • 在 FT.CREATE 命令中,VECTOR、NUMERIC 和 TAG 索引可以按任何顺序出现。

  • 一个字段只能编入索引一次。在提供的示例中,字段 my_vector_field_key 不能在同一索引中重复。

  • 在单个 FT.CREATE 命令中,最多只能为 10 个字段编制索引。

  • 默认情况下,代码不区分大小写。

  • 默认情况下,代码段以 , 分隔。

  • 不支持对代码和数字查询进行单独查询。这些字段只能与基于矢量的搜索一起使用。

示例

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

FLAT 示例:

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

包含数字字段的 HNSW 示例:

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

包含标记字段的 HNSW 示例:

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 

包含标签和数字字段的 HNSW 示例:

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

包含多个标签和数值字段的 HNSW 示例:

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