

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

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

`FT.CREATE` 命令创建一个空索引并启动回填过程。每个索引都由许多字段定义组成。每个字段定义都指定字段名称、字段类型以及在每个索引键内用于查找声明的类型值的路径。某些字段类型定义还有其他子类型说明符。

对于 HASH 键上的索引，路径与哈希成员名称相同。如果需要，可选 `AS` 子句可用于对字段进行重命名。当成员名包含特殊字符时，对字段进行重命名特别有用。

对于 JSON 键上的索引，路径是指向声明的类型数据的 JSON 路径。由于 JSON 路径总是包含特殊字符，因此 `AS` 子句是必需的。

**语法**

```
FT.CREATE <index-name>
ON HASH | JSON
[PREFIX <count> <prefix1> [<prefix2>...]]
SCHEMA 
(<field-identifier> [AS <alias>] 
| VECTOR [HNSW|FLAT] <attr_count> [<attribute_name> <attribute_value>])
| TAG [SEPARATOR <sep>] [CASESENSITIVE] 
| NUMERIC 
)+
```

**<index-name>（必填）：**这是您为索引指定的名称。如果已存在同名索引，则系统会返回错误。

**ON HASH \$1 JSON（可选）：**此索引中仅包含与指定类型匹配的键。如果省略，则假定为 HASH。

**PREFIX <prefix-count> <prefix>（可选）：**如果指定了此子句，则只有与一个或多个指定前缀相同的字节开头的键才会包含在此索引中。如果省略此子句，则将包括所有正确类型的键。零长度前缀也将匹配正确类型的所有键。

**字段类型：**
+ TAG：标签字段是一个包含一个或多个标签值的字符串。
  + SEPARATOR <sep>（可选）：用于分隔单个标签的字符（`,.<>{}[]"':;!@#$%^&*()-+=~`）之一。如果省略，则默认值为 `,`。
  + CASESENSITIVE（可选）：如果存在，则标签比较将区分大小写。默认情况下，标签比较不区分大小写。
+ NUMERIC：数值字段包含数字。
+ VECTOR：向量字段包含向量。目前支持两种向量索引算法：HNSW（分层可导航小世界）和 FLAT（暴力）。每种算法都有一组附加属性，有些是必填的，有些是可选的。
  + FLAT：Flat 算法可提供精确的答案，但其运行时与索引向量数量成正比，因此可能不适用于大型数据集。
    + DIM <number>（必填）：指定向量中的维度数。
    + 类型 FLOAT32 （必填）：数据类型，目前 FLOAT32 仅支持。
    + DISTANCE\$1METRIC [L2 \$1 IP \$1 COSINE]（必填）：指定距离算法。
    + INITIAL\$1CAP <size>（可选）：初始索引大小。
  + HNSW：HNSW 算法可提供近似的答案，但运行速度比 FLAT 快得多。
    + DIM <number>（必填）：指定向量中的维度数。
    + 类型 FLOAT32 （必填）：数据类型，目前 FLOAT32 仅支持。
    + DISTANCE\$1METRIC [L2 \$1 IP \$1 COSINE]（必填）：指定距离算法。
    + INITIAL\$1CAP <size>（可选）：初始索引大小。
    + M <number>（可选）：图中每层每个节点允许的最大出站边缘数量。在零层，出站边缘的最大数量为 2\$1M。默认值为 16，最大值为 512。
    + EF\$1CONSTRUCTION <number>（可选）：控制索引构造期间检查的向量数。此参数的值越大，查准率就越高，但索引创建时间也会越长。默认值为 200。最大值为 4096。
    + EF\$1RUNTIME <number>（可选）：控制查询操作期间要检查的向量数。默认值为 10，最大值为 4096。您可以为运行的每个查询设置此参数值。较高的值会增加查询所需时间，但会提高查询召回率。

**RESPONSE：**“OK”或者错误。