FT.CREATE - Amazon 内存 DB
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

FT.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 密钥,字段标识符是一个 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 消息或错误响应。

示例

注意

以下示例在将数据发送到 Redis OSS 之前使用 redis-cli 原生的参数,例如对数据进行去引号和去转义。要使用其他编程语言客户端(Python、Ruby、C# 等),请遵循这些环境处理字符串和二进制数据的处理规则。有关支持的客户端的更多信息,请参阅构建工具 Amazon

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