FT.CREATE

用法
FT.CREATE
复杂度
构建时间 O(N log N),其中 N 是索引项的数量
模块
valkey-search
模块版本
1.0.0
ACL 类别
@fast, @write, @search

FT.CREATE 命令创建一个空索引并启动回填过程。每个索引包含多个字段定义。每个字段定义指定一个字段名称、一个字段类型以及在每个索引键中查找声明类型值的路径。某些字段类型定义具有额外的子类型说明符。

对于 HASH 键上的索引,路径与哈希成员名称相同。如果需要,可以使用可选的 AS 子句重命名字段

对于 JSON 键上的索引,路径是声明类型数据的 JSON 路径。因为 JSON 路径总是包含特殊字符,所以 AS 子句是必需的。

FT.CREATE <index-name>
    [ON HASH | JSON]
    [PREFIX <count> <prefix> [<prefix>...]]
    SCHEMA
        (
            <field-identifier> [AS <field-alias>]
                  NUMERIC
                | TAG [SEPARATOR <sep>] [CASESENSITIVE]
                | VECTOR [HNSW | FLAT] <attr_count> [<attribute_name> <attribute_value>]+)
        )+
  • <index-name> (必需):这是您给索引命名的名称。如果同名索引已存在,则返回错误。

  • ON HASH | JSON (可选):只有与指定类型匹配的键才会被包含到此索引中。如果省略,则假定为 HASH。

  • PREFIX <prefix-count> <prefix> (可选):如果指定此子句,则只有以一个或多个指定前缀的相同字节开头的键才会被包含到此索引中。如果省略此子句,则所有正确类型的键都将被包含。零长度前缀也将匹配所有正确类型的键。

字段类型

TAG:标签字段是包含一个或多个标签值的字符串。

  • SEPARATOR <sep> (可选):用于分隔单个标签的字符之一:,.<>{}[]"':;!@#$%^&*()-+=~。如果省略,默认值为 ,
  • CASESENSITIVE (可选):如果存在,标签比较将区分大小写。默认情况下,标签比较不区分大小写。

NUMERIC:数字字段包含一个数字。

VECTOR:向量字段包含一个向量。目前支持两种向量索引算法:HNSW (分层可导航小世界) 和 FLAT (暴力)。每种算法都有一组附加属性,有些是必需的,有些是可选的。

  • FLAT: Flat 算法提供精确答案,但其运行时间与索引向量的数量成正比,因此可能不适用于大型数据集。
    • DIM <number> (必需):指定向量中的维度数量。
    • TYPE FLOAT32 (必需):数据类型,目前仅支持 FLOAT32。
    • DISTANCE_METRIC [L2 | IP | COSINE] (必需):指定距离算法
    • INITIAL_CAP <size> (可选):初始索引大小。
  • HNSW: HNSW 算法提供近似答案,但运行速度比 FLAT 快得多。
    • DIM <number> (必需):指定向量中的维度数量。
    • TYPE FLOAT32 (必需):数据类型,目前仅支持 FLOAT32。
    • DISTANCE_METRIC [L2 | IP | COSINE] (必需):指定距离算法
    • INITIAL_CAP <size> (可选):初始索引大小。
    • M <number> (可选):图中每层每个节点允许的最大出边数量。在第零层,最大出边数量为 2*M。默认值为 16,最大值为 512。
    • EF_CONSTRUCTION <number> (可选):控制索引构建期间检查的向量数量。此参数值越高,将以更长的索引创建时间为代价提高召回率。默认值为 200。最大值为 4096。
    • EF_RUNTIME <number> (可选):控制查询操作期间要检查的向量数量。默认值为 10,最大值为 4096。您可以为您运行的每个查询设置此参数值。值越高会增加查询时间,但会提高查询召回率。

示例

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

结果

OK

FLAT 示例

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

结果

OK

带数字字段的 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

结果

OK

带多个标签和数字字段的 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

结果

OK

RESP2 回复

简单字符串回复OK

RESP3 回复

简单字符串回复OK

如果在索引创建期间发生错误,则返回错误。