假设我有两个索引,其模式如下。
SCHEMA = [
TextField("id"),
VectorField("embedding", "FLAT", {"TYPE": "FLOAT32", "DIM": 768, "DISTANCE_METRIC": "COSINE"}),
]
字符串
每个索引中有两个已知ID。是否可以从Redis中检索这两个对象之间的向量相似性得分?下面是一些python代码示例,说明文档如何近似描述查询。
query = ???
query_vector = redis.hget(key="embedding", name="products:23")
results = redis.ft("services").search(query, query_params={"vector": query_vector})
型
1条答案
按热度按时间cedebl8k1#
如果你知道你想得到哪两个文件之间的距离,我能想到的最好的方法是
1.获取其中一个文档的嵌入。
1.执行一个混合查询,只对第二个文档进行预过滤
要实现第二步,您可以尝试为每个文档(如文档名本身)设置一些具有唯一值的字段(例如标记或数字),并在执行KNN查询之前查找它。
也可以尝试使用INKEYS查询参数将搜索限制为仅搜索第二个文档。在文档中:
INKEYS {num} {attribute} ...
将结果限制为列表中指定的给定键集。第一个参数必须是列表的长度,并且大于零。除非所有键都不存在,否则将忽略不存在的键。最后,redisearch中的混合查询使用启发式来决定以何种方式执行查询。如果您确定预过滤器通过了单个文档,则可以为查询指定策略,而不是使用启发式方法来确保它将使用
AD-HOC BROUT FORCE
,这将获取通过过滤器的文档并直接将其与查询进行比较,而不是将查询乘以整个数据集的一般平面方式(如您的示例中的FLAT索引)。启发式算法可能会自动选择这种方式,但您可以通过向查询添加HYBRID_POLICY
参数来强制执行ad-hoc:字符串
最后一点:你可能想考虑,在你只寻找两个向量之间的距离的情况下,简单地
HGET
两个嵌入,并使用bumpy或任何其他库在本地执行乘法。希望有帮助!