英尺。 CREATE - Amazon MemoryDB

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

英尺。 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 原生的参数,例如对数据进行去引号和去转义。OSS要使用其他编程语言客户端(Python、Ruby、C# 等),请遵循这些环境处理字符串和二进制数据的处理规则。有关支持的客户端的更多信息,请参阅构建工具 AWS

例 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]}]"