*Redis VLINKS 命令
VLINKS 用于返回指定向量在集合中相似度最高的关联向量 ID 列表。
*语法
VLINKS key id [K count]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | String | 是 | 向量集合的键名 |
| id | String | 是 | 查询向量的唯一标识符 |
| K | Keyword | 否 | 返回数量选项 |
| count | Integer | 否 | 返回的关联向量数量(默认 10) |
*返回值
- Array:关联向量 ID 列表,按相似度降序排列
- Nil:ID 不存在于该集合中
- Error:键对应的值不是向量集合类型
*时间复杂度
O(log n + k),其中 n 为向量总数,k 为返回数量
*示例
*基本用法
> VADD user_embeddings user1 [0.1, 0.2, 0.3, 0.4]
1
> VADD user_embeddings user2 [0.11, 0.21, 0.31, 0.41]
1
> VADD user_embeddings user3 [0.9, 0.8, 0.7, 0.6]
1
> VLINKS user_embeddings user1
1) "user2"
2) "user3"
*指定返回数量
> VLINKS user_embeddings user1 K 1
1) "user2"
*查询不存在的 ID
> VLINKS user_embeddings user999
(nil)
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| ERR wrong number of arguments | 缺少 key 或 id 参数 | 补充完整参数 |
| ERR count is not a valid integer | K 后面的 count 不是整数 | 检查 count 格式 |
| WRONGTYPE Operation against a key holding the wrong kind of value | key 不是向量集合 | 确认 key 类型正确 |
*最佳实践
- 场景:推荐系统中的「相似用户」「相似商品」关联推荐
- 合理设置 K 值,避免返回过多低相似度结果
- 结合 VISMEMBER 做前置校验,确保查询 ID 存在
*FAQ
Q1: VLINKS 和 VSIM 有什么区别? A: VLINKS 基于集合中已有的某个向量 ID 查找相似向量,VSIM 基于外部传入的向量数据进行相似度搜索。
Q2: 返回的结果包含查询 ID 本身吗? A: 默认不包含,仅返回其他关联向量。
Q3: 相似度阈值可以配置吗? A: 当前命令未提供显式阈值参数,可通过调整 K 值控制返回数量,由应用层过滤低相似度结果。