search api的数据结构
此api的功能是向量相似度搜索(vector similarity search)
一个完整的search例子:
服务端collection是一个hnsw类型的索引。
import random
from pymilvus import (
connections,
Collection,
)
dim = 128
if __name__ == '__main__':
connections.connect(
alias="default",
user='',
password='',
host='192.168.230.71',
port='19530'
)
hello_milvus = Collection("hello_milvus")
# hnsw索引的搜索参数
search_param = {
"metric_type": "L2",
"params": {"ef": 200}
}
search_data = [random.random() for _ in range(dim)]
results = hello_milvus.search(
data=[search_data],
anns_field="embeddings",
param=search_param,
limit=5,
expr=None,
output_fields=['pk','book_id'],
consistency_level="Eventually"
)
print(results)
输出:
[
"id: 2196, distance: 12.860455513000488, entity: {'pk': 2196, 'book_id': 2196}",
"id: 888, distance: 15.004779815673828, entity: {'pk': 888, 'book_id': 888}",
"id: 2454, distance: 15.082155227661133, entity: {'pk': 2454, 'book_id': 2454}",
"id: 884, distance: 15.443259239196777, entity: {'pk': 884, 'book_id': 884}",
"id: 2058, distance: 15.52014446258545, entity: {'pk': 2058, 'book_id': 2058}"
]
SearchRequest数据结构
type SearchRequest struct {
Base *commonpb.MsgBase
DbName string
CollectionName string
PartitionNames []string
Dsl string
// serialized `PlaceholderGroup`
PlaceholderGroup []byte
DslType commonpb.DslType
OutputFields []string
SearchParams []*commonpb.KeyValuePair
TravelTimestamp uint64
GuaranteeTimestamp uint64
Nq int64
NotReturnAllMeta bool
ConsistencyLevel commonpb.ConsistencyLevel
UseDefaultConsistency bool
SearchByPrimaryKeys bool
XXX_NoUnkeyedLiteral struct{}
XXX_unrecognized []byte
XXX_sizecache int32
}
Dsl ??
PlaceholderGroup ??
DslType ??
nq:number of query
ConsistencyLevel:一致性级别
const (
ConsistencyLevel_Strong ConsistencyLevel = 0
ConsistencyLevel_Session ConsistencyLevel = 1
ConsistencyLevel_Bounded ConsistencyLevel = 2
ConsistencyLevel_Eventually ConsistencyLevel = 3
ConsistencyLevel_Customized ConsistencyLevel = 4
)
使用Strong一致性级别搜索速度会很慢。
从数据结构可以看出,search的时候可以指定partition。