

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

# FT.CREATE
<a name="vector-search-commands-ft.create"></a>

 创建索引并启动该索引的回填。有关更多信息，请参阅[向量搜索概述](https://docs.aws.amazon.com/memorydb/latest/devguide/vector-search-overview.html)，了解索引构造的详细信息。

**语法**

```
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 路径。

  有关更多信息，请参阅 [索引字段类型](vector-search-overview.md#vector-search-index-field-types)。
+ 字段类型：
  + TAG：有关更多信息，请参阅[标签](https://redis.io/docs/interact/search-and-query/advanced-concepts/tags/)。
  + NUMERIC：字段包含一个数字。
  + TEXT：字段包含任何数据块。
  + VECTOR：支持向量搜索的向量字段。
    + 算法 – 可以是 HNSW（分层可导航小世界）或 FLAT（暴力）。
    + `attr_count` – 将作为算法配置传递的属性数量，包括名称和值。
    + `{attribute_name} {attribute_value}`— 定义索引配置的特定算法 key/value 对。

      对于 FLAT 算法，属性为：

      必需：
      + DIM – 向量中的维度数。
      + DISTANCE\$1METRIC – 可以是 [L2 \$1 IP \$1 COSINE] 之一。
      + TYPE – 向量类型。`FLOAT32` 是一种受支持的类型。

      可选：
      + INITIAL\$1CAP – 索引中影响索引内存分配大小的初始向量容量。

      对于 HNSW 算法，属性为：

      必需：
      + TYPE – 向量类型。`FLOAT32` 是一种受支持的类型。
      + DIM – 向量维度，以正整数形式指定。最大值：32768
      + DISTANCE\$1METRIC – 可以是 [L2 \$1 IP \$1 COSINE] 之一。

      可选：
      + INITIAL\$1CAP – 索引中影响索引内存分配大小的初始向量容量。默认为 1024。
      + M – 图中每层中每个节点允许的最大出站边缘数量。在零层，出站边缘的最大数目将为 2M。默认值为 16，最大值为 512。
      + EF\$1CONSTRUCTION – 控制索引构建期间检查的向量数量。此参数的值越大，查准率就越高，但索引创建时间也会越长。默认值为 200。最大值为 4096。
      + EF\$1RUNTIME – 控制查询操作期间检查的向量数量。此参数的值越大，查全率就越高，但查询时间也会越长。可以在查询时覆盖此参数的值。默认值为 10。最大值为 4096。

**Return**

返回简单的字符串 OK 消息或错误响应。

**示例**

**注意**  
以下示例使用 [valkey-cli](https://valkey.io/topics/cli/) 的原生参数，例如在将数据发送到 Valkey 或 Redis OSS 之前，对数据去引号和去转义。要使用其他编程语言客户端（Python、Ruby、C\$1 等），请遵循这些环境处理字符串和二进制数据的处理规则。有关支持的客户端的更多信息，请参阅[构建工具 AWS](https://aws.amazon.com/developer/tools/)

**Example 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
```

**Example 示例 2：填入一些数据**  
对以下命令进行格式化，使其可以作为 redis-cli 终端程序的参数执行。使用编程语言客户端（例如，Python、Ruby、C\$1）的开发人员需要遵循其环境有关处理字符串和二进制数据的处理规则。  
创建一些哈希和 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 向量条目包含六个数字。

**Example 示例 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]}]"
```