You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Redis Stack中获取两个指定索引项的向量相似度分数?

如何计算Redis中两个已知ID对象的向量相似度分数

可以获取,有两种可行的方法,具体如下:

方法一:取出向量后本地计算

Redis本身没有直接计算两个存储向量相似度的命令,你可以先将两个对象的向量从Redis中取出,再用Python本地计算余弦相似度。

步骤示例:

  1. 获取两个对象的二进制向量:
# 替换为你的两个对象的实际key
vector1 = redis.hget("products:23", "embedding")
vector2 = redis.hget("services:45", "embedding")
  1. 将二进制向量解码为浮点数组:
import numpy as np

# 解码FLOAT32类型的二进制向量
vec1 = np.frombuffer(vector1, dtype=np.float32)
vec2 = np.frombuffer(vector2, dtype=np.float32)
  1. 计算余弦相似度:
cosine_similarity = np.dot(vec1, vec2) / (np.linalg.norm(vec1) * np.linalg.norm(vec2))

方法二:通过Redis FT查询获取分数

你可以用其中一个对象的向量作为查询条件,同时过滤另一个对象的ID,从查询结果中提取相似度相关分数。

步骤示例:

  1. 获取用于查询的向量:
# 取出第一个对象的向量作为查询向量
query_vector = redis.hget("products:23", "embedding")
  1. 构造查询语句(以查询services索引中ID为"45"的对象为例):
# 用@id过滤目标对象,同时指定KNN查询匹配向量
query = '@id:{45} => [KNN 1 @embedding $vector]'
  1. 执行查询并转换为相似度分数:
results = redis.ft("services").search(query, query_params={"vector": query_vector})

if results.docs:
    # 注意:若索引使用COSINE距离度量,返回的score是余弦距离值,相似度为1 - score
    distance_score = results.docs[0].embedding_score
    similarity_score = 1 - distance_score
    print(f"相似度分数: {similarity_score}")

说明:Redis Stack中,当向量字段设置DISTANCE_METRIC: "COSINE"时,KNN查询返回的embedding_score是余弦距离(取值范围0-2),因此需要用1 - 距离值得到余弦相似度(取值范围-1到1,越接近1相似度越高)。

内容的提问来源于stack exchange,提问作者snewcomer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 22:20:20