pymilvus创建多向量
从 Milvus 2.4 开始,引入了多向量支持和混合搜索框架,单个collection可以支持10个向量字段。不同的向量字段可以表示不同的方面、不同的embedding模型甚至表征同一实体的不同数据模态。该功能在综合搜索场景中特别有用,例如根据图片、语音、指纹等各种属性来识别向量库中最相似的人。
多向量搜索支持在多个向量字段上执行搜索请求,并使用重排名策略(例如RRF和加权评分)组合结果。
创建多向量字段
集合hello_milvus有2个向量字段embeddings1、embeddings2
import uuid
import numpy as np
from pymilvus import (
connections,
FieldSchema, CollectionSchema, DataType,
Collection,
)
collection_name = "hello_milvus"
host = "192.168.230.71"
port = 19530
username = ""
password = ""
num_entities, dim = 1000, 32
def generate_uuids(number_of_uuids):
uuids = [str(uuid.uuid4()) for _ in range(number_of_uuids)]
return uuids
print("start connecting to Milvus")
connections.connect("default", host=host, port=port,user=username,password=password)
fields = [
FieldSchema(name="pk", dtype=DataType.INT64, is_primary=True, auto_id=False),
FieldSchema(name="random", dtype=DataType.DOUBLE),
FieldSchema(name="comment", dtype=DataType.VARCHAR, max_length=200),
FieldSchema(name="embeddings1", dtype=DataType.FLOAT_VECTOR, dim=dim),
FieldSchema(name="embeddings2", dtype=DataType.FLOAT_VECTOR, dim=dim)
]
schema = CollectionSchema(fields, "hello_milvus is the simplest demo to introduce the APIs")
print("Create collection `hello_world`")
coll = Collection(collection_name, schema, consistency_level="Bounded",shards_num=1)
print("Start inserting entities")
rng = np.random.default_rng(seed=19530)
entities = [
[i for i in range(num_entities)],
rng.random(num_entities).tolist(),
generate_uuids(num_entities),
rng.random((num_entities, dim)),
rng.random((num_entities, dim)),
]
insert_result = coll.insert(entities)
# Create index for each vector field
index_params = {
"metric_type": "L2",
"index_type": "IVF_FLAT",
"params": {"nlist": 128},
}
coll.create_index(field_name="embeddings1", index_params=index_params,index_name="idx_em1")
coll.create_index(field_name="embeddings2", index_params=index_params,index_name="idx_em2")
print("Start flush")
coll.flush()
print("done")