搜索向量
Milvus 支持在 collection 或分区中搜索向量。
在 collection 中搜索向量
创建搜索参数。搜索参数是一个 JSON 字符串,在 Python SDK 中以字典来表示。
>>> search_param = {'nprobe': 16}
对于不同的索引类型,搜索所需参数也有区别。所有的搜索参数都必须赋值。
索引类型 搜索参数 示例参数 取值范围 FLAT
- - IVFLAT
/SQ8
/SQ8H
/IVFPQ
nprobe
:查询时所涉及的向量类的个数。nprobe
影响查询精度。数值越大,精度越高,速度越慢。{nprobe: 32}
[1, nlist
]NSG
search_length
:值越大,代表在图中搜索的节点越多,召回率越高,速度越慢。{search_length:100}
[10, 300] HNSW
ef
:值越大,则在索引中搜索的数据越多,召回率越高,速度越慢。{ef: 64}
[ topk
, 4096]ANNOY
search_k
: 影响搜索性能。值越大,搜索结果越精确,但搜索时间越长。
-1 表示默认值,取总数据量的5%。{“search_k”: -1}
{-1} ∪ [topk, ∞) top_k
是与目标向量最相似的 k 条向量,在搜索时定义。top_k
的取值范围是(0, 2048]
。创建随机向量作为
query_records
进行搜索:# create 5 vectors of 256-dimension
>>> q_records = [[random.random() for _ in range(256)] for _ in range(5)]
>>> milvus.search(collection_name='test01', query_records=q_records, top_k=2, params=search_param)
在分区中搜索向量
# create 5 vectors of 256-dimension
>>> q_records = [[random.random() for _ in range(256)] for _ in range(5)]
>>> milvus.search(collection_name='test01', query_records=q_records, top_k=1, partition_tags=['tag01'], params=search_param)
如果你不指定 partition_tags
, Milvus 会在整个 collection 中搜索。