本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
向量搜索功能和限制
向量搜索可用性
Amazon ElastiCache 的矢量搜索在 Valkey 版本 8.2 中可用,适用于所有Amazon区域的基于节点的集群,无需支付额外费用。您还可以在现有集群上使用向量搜索功能,方法是从任意版本的 Valkey 或 Redis OSS 升级到 Valkey 8.2,只需单击几下,无需停机。
目前,除具有数据分层的节点外,所有 ElastiCache 实例类型都可以使用矢量搜索。要在 t2、t3 和 t4g 实例上使用向量搜索功能,您需要将微型实例的内存预留增加到至少 50%,小型实例的内存预留至少增加到 30%。如需了解更多信息,请参阅此页面。
参数限制
下表列出了各种向量搜索项目的限制:
| Item | 最大值 |
|---|---|
| 向量中的维数 | 32768 |
| 可以创建的索引数量 | 10 |
| 索引中的字段数量 | 50 |
| FT.SEARCH TIMEOUT 子句(毫秒) | 60000 |
| 每个索引的最大前缀数量 | 16 |
| 标签字段的最大长度 | 10000 |
| 数值字段的最大长度 | 256 |
| HNSW M 参数 | 2000000 |
| HNSW EF_CONSTRUCTION 参数 | 4096 |
| HNSW EF_RUNTIME 参数 | 4096 |
操作限制
索引持久性和回填
更新过程包含三个步骤。第一步,修改 HASH 或 JSON 键并阻止发出请求的客户端。第二步在后台执行,更新包含修改后的键的每个索引。第三步,取消阻止客户端。因此,对于在与变更相同的连接上执行的查询操作,该更改会立即反映在搜索结果中。但是,插入或更新键后,可能短时间内不会出现在其他客户端的搜索结果中。在系统负载繁重的时期,数据发生 and/or 大量突变,可见性延迟可能会变得更长。
向量搜索功能保留索引定义和索引内容。系统会保存向量字段的索引,但不会保存 TAGS 和 NUMERIC 的索引,这意味着系统在外部加载索引时必须重新构建索引(完全同步或重新加载)。这意味着,在任何会导致节点启动或重新启动的操作请求或事件中,将从最新快照中恢复索引定义和内容。无需用户执行任何操作即可启动此操作。但是,对于 TAGS 和 NUMERIC 索引,重建过程会在数据恢复后立即作为回填操作执行。这在功能上等同于系统自动为每个定义的索引执行 FT.CREATE 命令。请注意,数据恢复后,很可能在索引回填完成之前,节点便可用于应用程序操作,这意味着应用程序将再次看到回填操作。
索引回填的完成在主索引和副本之间不同步。应用程序可能会意外看到这种不同步的情况,因此建议应用程序在启动搜索操作之前,先在主副本和所有副本上验证回填完成情况。
扩展限制
在扩展事件期间,随着数据的迁移,索引可能会被回填。这将降低搜索查询的召回率。
快照 import/export 和实时迁移
可以将具有搜索索引的一个集群中的 RDB 文件导入到另一个版本为 8.2 或更高版本的 ElastiCache Valkey 集群。新集群将在加载 RDB 文件时重新构建索引内容。但是,RDB 文件中存在搜索索引会限制该数据与较旧 Valkey 版本的兼容性。由向量搜索功能定义的搜索索引的格式只能由另一个版本为 Valkey 8.2 或更高版本的 ElastiCache 集群理解。但是,不包含索引的 RDB 文件不受这种限制。
在回填期间内存不足
与 Valkey OSS 写入操作类似,索引回填会受到限制。 out-of-memory如果引擎内存在回填过程中已满,则所有回填都将暂停。有可用内存后,回填过程会恢复。当由于内存不足导致回填暂停时,也可以删除索引。
事务
命令 FT.CREATE、FT.DROPINDEX、FT.ALIASADD、FT.ALIASDEL 和 FT.ALIASUPDATE 不能在事务上下文中执行,也就是说,不能在 MULTI/EXEC 数据块或者 LUA 或 FUNCTION 脚本中执行。