

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

# 向量搜索功能和限制
<a name="vector-search-features-limits"></a>

## 向量搜索可用性
<a name="vector-search-availability"></a>

Amazon ElastiCache 的矢量搜索在 Valkey 版本 8.2 中可用，适用于所有AWS区域的基于节点的集群，无需支付额外费用。您还可以在现有集群上使用向量搜索功能，方法是从任意版本的 Valkey 或 Redis OSS 升级到 Valkey 8.2，[只需单击几下，无需停机](VersionManagement.HowTo.md)。

目前，除具有数据分层的节点外，所有 ElastiCache 实例类型都可以使用矢量搜索。要在 t2、t3 和 t4g 实例上使用向量搜索功能，您需要将微型实例的内存预留增加到至少 50%，小型实例的内存预留至少增加到 30%。如需了解更多信息，请参阅[此页面](redis-memory-management.md)。

## 参数限制
<a name="parametric-restrictions"></a>

下表列出了各种向量搜索项目的限制：


**向量搜索限制**  

| Item | 最大值 | 
| --- | --- | 
| 向量中的维数 | 32768 | 
| 可以创建的索引数量 | 10 | 
| 索引中的字段数量 | 50 | 
| FT.SEARCH TIMEOUT 子句（毫秒） | 60000 | 
| 每个索引的最大前缀数量 | 16 | 
| 标签字段的最大长度 | 10000 | 
| 数值字段的最大长度 | 256 | 
| HNSW M 参数 | 2000000 | 
| HNSW EF\$1CONSTRUCTION 参数 | 4096 | 
| HNSW EF\$1RUNTIME 参数 | 4096 | 

## 操作限制
<a name="operational-restrictions"></a>

### 索引持久性和回填
<a name="index-persistence-backfilling"></a>

更新过程包含三个步骤。第一步，修改 HASH 或 JSON 键并阻止发出请求的客户端。第二步在后台执行，更新包含修改后的键的每个索引。第三步，取消阻止客户端。因此，对于在与变更相同的连接上执行的查询操作，该更改会立即反映在搜索结果中。但是，插入或更新键后，可能短时间内不会出现在其他客户端的搜索结果中。在系统负载繁重的时期，数据发生 and/or 大量突变，可见性延迟可能会变得更长。

向量搜索功能保留索引定义和索引内容。系统会保存向量字段的索引，但不会保存 TAGS 和 NUMERIC 的索引，这意味着系统在外部加载索引时必须重新构建索引（完全同步或重新加载）。这意味着，在任何会导致节点启动或重新启动的操作请求或事件中，将从最新快照中恢复索引定义和内容。无需用户执行任何操作即可启动此操作。但是，对于 TAGS 和 NUMERIC 索引，重建过程会在数据恢复后立即作为回填操作执行。这在功能上等同于系统自动为每个定义的索引执行 FT.CREATE 命令。请注意，数据恢复后，很可能在索引回填完成之前，节点便可用于应用程序操作，这意味着应用程序将再次看到回填操作。

索引回填的完成在主索引和副本之间不同步。应用程序可能会意外看到这种不同步的情况，因此建议应用程序在启动搜索操作之前，先在主副本和所有副本上验证回填完成情况。

### 扩展限制
<a name="scaling-limits"></a>

在扩展事件期间，随着数据的迁移，索引可能会被回填。这将降低搜索查询的召回率。

### 快照 import/export 和实时迁移
<a name="snapshot-import-export"></a>

可以将具有搜索索引的一个集群中的 RDB 文件导入到另一个版本为 8.2 或更高版本的 ElastiCache Valkey 集群。新集群将在加载 RDB 文件时重新构建索引内容。但是，RDB 文件中存在搜索索引会限制该数据与较旧 Valkey 版本的兼容性。由向量搜索功能定义的搜索索引的格式只能由另一个版本为 Valkey 8.2 或更高版本的 ElastiCache 集群理解。但是，不包含索引的 RDB 文件不受这种限制。

### 在回填期间内存不足
<a name="out-of-memory-backfill"></a>

与 Valkey OSS 写入操作类似，索引回填会受到限制。 out-of-memory如果引擎内存在回填过程中已满，则所有回填都将暂停。有可用内存后，回填过程会恢复。当由于内存不足导致回填暂停时，也可以删除索引。

### 事务
<a name="transactions"></a>

命令 `FT.CREATE`、`FT.DROPINDEX`、`FT.ALIASADD`、`FT.ALIASDEL` 和 `FT.ALIASUPDATE` 不能在事务上下文中执行，也就是说，不能在 `MULTI/EXEC` 数据块或者 LUA 或 FUNCTION 脚本中执行。