如何通过Milvus单查询实现基于VarChar类型userId的向量相似性检索?
针对Milvus基于VarChar类型userId的向量相似性检索问题
当然可以在单次业务调用里完成这个需求,不过底层需要两次Milvus API交互——你可以把这两步封装成一个统一的方法,对外看起来就是一次操作。
如果严格说要单次Milvus原生查询/检索请求的话,目前Milvus还不支持直接传入userId就触发对应向量的相似性检索,必须分两步走:
- 第一步:用
query接口筛选出userId="uid1"的记录,提取对应的vectorField向量; - 第二步:把拿到的向量传入
search接口,获取集合里的TopK相似向量。
给你个Python SDK的封装示例,调用这个函数就相当于单次操作:
from pymilvus import Collection def get_topk_similar_by_user_id(collection: Collection, user_id: str, top_k: int = 10): # 获取目标用户的向量 user_records = collection.query(expr=f'userId == "{user_id}"', output_fields=['vectorField']) if not user_records: return [] target_vector = user_records[0]['vectorField'] # 执行相似性检索 search_results = collection.search( data=[target_vector], anns_field='vectorField', param={"metric_type": "L2", "params": {"nprobe": 10}}, limit=top_k ) # 返回整理后的结果 return [hit.entity for hit in search_results[0]]
内容的提问来源于stack exchange,提问作者Bruce REN
相关产品推荐
相关产品推荐

