Milvus 是一款开源的向量相似度搜索引擎,支持针对 TB 级向量的增删改操作和近实时查询,具有高度灵活、稳定可靠以及高速查询等特点。Milvus 集成了 Faiss、NMSLIB、Annoy 等广泛应用的向量索引库,提供了一整套简单直观的 API,让你可以针对不同场景选择不同的索引类型。此外,Milvus 还可以对标量数据进行过滤,进一步提高了召回率,增强了搜索的灵活性。
pip3 install pymilvus
from milvus import Milvus, IndexType, MetricType, Status
milvus = Milvus(host='localhost', port='19530')
milvus = Milvus(uri='tcp://localhost:19530')
param = {'collection_name':'test01', 'dimension':256, 'index_file_size':1024, 'metric_type':MetricType.L2}
milvus.create_collection(param)
milvus.drop_collection(collection_name='test01')
milvus.create_partition('test01', 'tag01')
milvus.drop_partition(collection_name='test01', partition_tag='tag01')
import random
vectors = [[random.random() for _ in range(256)] for _ in range(20)]
milvus.insert(collection_name='test01', records=vectors)
自定义id
vector_ids = [id for id in range(20)]
milvus.insert(collection_name='test01', records=vectors, ids=vector_ids)
milvus.insert('test01', vectors, partition_tag="tag01")
ids = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
milvus.delete_entity_by_id(collection_name='test01', id_array=ids)
ivf_param = {'nlist': 16384}
milvus.create_index('test01', IndexType.IVF_FLAT, ivf_param)
milvus.drop_index('test01')
search_param = {'nprobe': 16}
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)
top_k 指的是向量空间中距离目标向量最近的 k 个向量
top_k 的范围为:[1, 16384]。
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)
milvus.flush(collection_name_array=['test01'])
一个集合可包含多个数据段。如果一个数据段中的向量数据被删除,其所占据的空间并不会自动释放。
milvus.compact(collection_name='test01', timeout=1)