

# 在向量存储桶中创建向量索引
<a name="s3-vectors-create-index"></a>

**注意**  
请仔细选择向量索引配置参数。创建向量索引后，无法更新向量索引名称、维度、距离指标或不可筛选的元数据键。要更改其中任何值，必须创建新的向量索引。

向量索引是向量存储桶中的一种资源，用于存储和组织向量数据，以实现高效的相似性搜索。创建向量索引时，可以定义该索引中的所有向量必须共享的特征，例如维度、用于计算相似性的距离指标以及（可选）不可筛选的元数据键。您也可以选择在创建索引时为向量索引配置专用的加密设置和标签。有关向量索引命名要求、维度要求、距离指标选项和不可筛选的元数据键的更多信息，请参阅[限制和局限性](s3-vectors-limitations.md)。有关为向量索引设置加密配置的更多信息，请参阅 [S3 Vectors 中的数据保护和加密](s3-vectors-data-encryption.md)。有关设置标签的更多信息，请参阅[将标签与 S3 向量存储桶结合使用](s3-vectors-tags.md)。

 向量索引必须在现有的向量存储桶中创建，并且需要特定的配置参数，这些参数在创建后无法修改。

## 使用 S3 控制台
<a name="s3-vectors-create-index-console"></a>

**创建向量索引**

1. 通过以下网址打开 Amazon S3 控制台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 在导航窗格中，选择**向量存储桶**。

1. 在向量存储桶列表中，选择想要在其中创建向量索引的存储桶的名称。

1. 选择**创建向量索引**。

1. 对于**向量索引名称**，输入向量索引的名称。

   向量索引名称在向量存储桶内必须是唯一的。索引名称长度必须介于 3 到 63 个字符之间。有效字符为小写字母（a-z）、数字（0-9）、连字符（-）和点（.）。有关向量索引命名要求的更多信息，请参阅[限制和局限性](s3-vectors-limitations.md)。

1. 对于**维度**，输入每个向量中的值数量。
**注意**  
**维度**的值决定了每个向量将包含多少个数值。
添加到此索引的所有向量都必须正好具有这个数量的值。
维度必须介于 1 到 4096 之间。
维度越大，需要的存储空间就越多。
根据嵌入模型的输出维度进行选择。

   有关维度要求的更多信息，请参阅[限制和局限性](s3-vectors-limitations.md)。

1. 对于**距离指标**，选择以下选项之一：
   + **余弦**：测量向量之间角度的余弦值。最适合归一化向量以及方向比幅度更重要时
   + **欧几里得**：测量向量之间的直线距离。当方向和幅度都很重要时最适合。

1. （可选）在**不可筛选的元数据**下，配置将存储但不用于筛选的元数据键：

   要添加不可筛选的元数据键：

   1. 选择**添加密钥**。

   1. 输入键名称（1-63 个字符，在此向量索引中是唯一的）。

   1. 重复此操作以添加其它键（最多 10 个键）。
**注意**  
在创建向量索引后插入向量数据时，可以将可筛选的元数据作为键值对附加到每个向量。默认情况下，附加到向量的所有元数据键都是可筛选的，并且可以在相似性查询中用作筛选条件。只有在创建向量索引期间指定为不可筛选的元数据键才被排除在筛选之外。有关每个向量的元数据大小限制（包括总元数据约束和可筛选元数据约束）的更多信息，请参阅[限制和局限性](s3-vectors-limitations.md)。

1. 请仔细检查配置。
**注意**  
这些设置在创建后无法更改。

1. 在**加密**下，选择**指定加密类型**。您可以选择**使用用于加密的存储桶设置**或覆盖向量索引的加密设置。如果您覆盖了存储桶级别的设置，则可以选择将向量索引的加密类型指定为**具有 AWS Key Management Service 密钥的服务器端加密（SSE-KMS）**或**具有 Amazon S3 托管式密钥的服务器端加密（SSE-S3）**。有关为向量索引设置加密配置的更多信息，请参阅 [S3 Vectors 中的数据保护和加密](s3-vectors-data-encryption.md)。

1. 在**标签（可选）**下，您可以采用键值对的形式添加标签，以便使用 AWS 账单与成本管理来帮助跟踪和整理向量索引成本。输入 **Key (键)** 和 **Value (值)**。要添加另一个标签，请选择 **Add Tag (添加标签)**。您可以为一个向量索引输入最多 50 个标签。有关更多信息，请参阅 [将标签与 S3 向量存储桶结合使用](s3-vectors-tags.md)。

1. 选择**创建向量索引**。

## 使用 AWS CLI
<a name="s3-vectors-create-index-cli"></a>

要在向量存储桶中创建向量索引，请使用以下示例命令并将 `user input placeholders` 替换为您自己的信息。

**示例 1：创建带有不可筛选的元数据键的向量索引**

```
aws s3vectors create-index \
  --vector-bucket-name "amzn-s3-demo-vector-bucket" \
  --index-name "idx" \
  --data-type "float32" \
  --dimension 1 \
  --distance-metric "cosine" \
  --metadata-configuration '{"nonFilterableMetadataKeys":["nonFilterableKey1"]}'
```

**示例 2：创建不带不可筛选的元数据键的向量索引**

```
aws s3vectors create-index \
  --vector-bucket-name "amzn-s3-demo-vector-bucket" \
  --index-name "idx2" \
  --data-type "float32" \
  --dimension 4096 \
  --distance-metric "euclidean"
```

此外，使用 `GetVectors`、`ListVectors` 或 `QueryVectors` API 操作以相同的方式检索所有元数据（包括可筛选和不可筛选）。以下 CLI 命令显示如何检索带有元数据（包括不可筛选的元数据）的向量。

请求示例：

```
aws s3vectors get-vectors \
  --vector-bucket-name "amzn-s3-demo-vector-bucket" \
  --index-name "idx" \
  --keys '["vec1", "vec3"]' \
  --return-data \
  --return-metadata \
```

响应示例：

```
{
    "vectors": [
        {
            "key": "vec1",
            "data": {
                "float32": [
                    0.10000000149011612,
                    0.20000000298023224,
                    0.30000001192092896,
                    0.4000000059604645,
                    0.5
                ]
            },
            "metadata": {
                "category": "test",
                "text": "First vector"
            }
        },
        {
            "key": "vec3",
            "data": {
                "float32": [
                    0.6000000238418579,
                    0.699999988079071,
                    0.800000011920929,
                    0.8999999761581421,
                    1.0
                ]
            },
            "metadata": {
                "text": "Third vector",
                "category": "test"
            }
        }
    ]
}
```

响应将包括与向量关联的所有元数据，无论在创建索引期间将其指定为可筛选还是不可筛选。

## 使用 AWS SDK
<a name="s3-vectors-create-index-sdk"></a>

------
#### [ SDK for Python ]

```
import boto3

# Create a S3 Vectors client in the AWS Region of your choice. 
s3vectors = boto3.client("s3vectors", region_name="us-west-2")

#Create a vector index "movies" in the vector bucket "media-embeddings" without non-filterable metadata keys
s3vectors.create_index(
    vectorBucketName="media-embeddings",
    indexName="movies",
    dimension=3,
    distanceMetric="cosine",
    dataType = "float32"
)


#Create a vector index "movies" in the vector bucket "media-embeddings" with non-filterable metadata keys
s3vectors.create_index(
    vectorBucketName="media-embeddings",
    indexName="movies",
    dimension=3,
    distanceMetric="cosine",
    dataType = "float32",
    metadataConfiguration= {"nonFilterableMetadataKeys": ["nonFilterableMetadataKey1"]}
)
```

------