本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
英尺。 CREATE
创建索引并启动该索引的回填。有关更多信息,请参阅向量搜索概述,了解索引构造的详细信息。
语法
FT.CREATE <index-name> ON HASH | JSON [PREFIX <count> <prefix1> [<prefix2>...]] SCHEMA (<field-identifier> [AS <alias>] NUMERIC | TAG [SEPARATOR <sep>] [CASESENSITIVE] | TEXT | VECTOR [HNSW|FLAT] <attr_count> [<attribute_name> <attribute_value>]) )+
架构
字段标识符:
对于哈希键,字段标识符是一个字段名称。
对于JSON密钥,字段标识符为 A JSON 路径。
有关更多信息,请参阅 索引字段类型。
字段类型:
TAG:有关更多信息,请参阅标签
。 NUMERIC: 字段包含一个数字。
TEXT: 字段包含任何数据块。
VECTOR: 支持向量搜索的向量场。
算法 — 可以是HNSW(分层可导航的小世界)或FLAT(蛮力)。
attr_count
– 将作为算法配置传递的属性数量,包括名称和值。{attribute_name} {attribute_value}
– 定义索引配置的特定算法键/值对。对于FLAT算法,属性是:
必需:
DIM— 向量中的维数。
DISTANCE_ METRIC — 可以是 [L2 | IP |COSINE] 中的一个。
TYPE— 向量类型。
FLOAT32
是一种受支持的类型。
可选:
INITIAL_ CAP — 索引中的初始向量容量影响索引的内存分配大小。
对于HNSW算法,属性是:
必需:
TYPE— 向量类型。
FLOAT32
是一种受支持的类型。DIM-向量维度,指定为正整数。最大值:32768
DISTANCE_ METRIC — 可以是 [L2 | IP |COSINE] 中的一个。
可选:
INITIAL_ CAP — 索引中的初始向量容量影响索引的内存分配大小。默认为 1024。
M – 图中每层中每个节点允许的最大出站边缘数量。在零层,出站边缘的最大数目将为 2M。默认值为 16,最大值为 512。
EF_ CONSTRUCTION — 控制索引构建期间检查的向量数量。此参数的值越大,查准率就越高,但索引创建时间也会越长。默认值为 200。最大值为 4096。
EF_ RUNTIME — 控制查询操作期间检查的向量数量。此参数的值越大,查全率就越高,但查询时间也会越长。可以在查询时覆盖此参数的值。默认值为 10。最大值为 4096。
Return
返回简单的字符串 OK 消息或错误响应。
示例
注意
以下示例在将数据发送到 Valkey 或 Redis 之前使用 valkey-cli
例 1:创建一些索引
为大小为 2 的向量创建索引
FT.CREATE hash_idx1 ON HASH PREFIX 1 hash: SCHEMA vec AS VEC VECTOR HNSW 6 DIM 2 TYPE FLOAT32 DISTANCE_METRIC L2 OK
使用以下HNSW算法创建 6 维JSON索引:
FT.CREATE json_idx1 ON JSON PREFIX 1 json: SCHEMA $.vec AS VEC VECTOR HNSW 6 DIM 6 TYPE FLOAT32 DISTANCE_METRIC L2 OK
例 示例 2:填充一些数据
以下命令的格式化使其可以作为 redis-cli 终端程序的参数执行。使用编程语言客户端(例如 Python、Ruby、C# 等)的开发人员需要遵循其环境的处理规则来处理字符串和二进制数据。
创建一些哈希和 json 数据:
HSET hash:0 vec "\x00\x00\x00\x00\x00\x00\x00\x00" HSET hash:1 vec "\x00\x00\x00\x00\x00\x00\x80\xbf" JSON.SET json:0 . '{"vec":[1,2,3,4,5,6]}' JSON.SET json:1 . '{"vec":[10,20,30,40,50,60]}' JSON.SET json:2 . '{"vec":[1.1,1.2,1.3,1.4,1.5,1.6]}'
请注意以下几点:
哈希和JSON数据的键具有其索引定义的前缀。
向量位于索引定义的相应路径上。
哈希向量以十六进制数据的形式输入,而JSON数据则以数字形式输入。
向量的长度适当,二维哈希向量条目包含两个浮点数的十六进制数据,六维 JSON 向量条目包含六个数字。
例 示例 3:删除并重新创建索引
FT.DROPINDEX json_idx1 OK FT.CREATE json_idx1 ON JSON PREFIX 1 json: SCHEMA $.vec AS VEC VECTOR FLAT 6 DIM 6 TYPE FLOAT32 DISTANCE_METRIC L2 OK
请注意,新JSON索引使用FLAT
算法而不是HNSW
算法。另请注意,它将重新索引现有JSON数据:
FT.SEARCH json_idx1 "*=>[KNN 100 @VEC $query_vec]" PARAMS 2 query_vec "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" DIALECT 2 1) (integer) 3 2) "json:2" 3) 1) "__VEC_score" 2) "11.11" 3) "$" 4) "[{\"vec\":[1.1, 1.2, 1.3, 1.4, 1.5, 1.6]}]" 4) "json:0" 5) 1) "__VEC_score" 2) "91" 3) "$" 4) "[{\"vec\":[1.0, 2.0, 3.0, 4.0, 5.0, 6.0]}]" 6) "json:1" 7) 1) "__VEC_score" 2) "9100" 3) "$" 4) "[{\"vec\":[10.0, 20.0, 30.0, 40.0, 50.0, 60.0]}]"