《Faiss,开源的向量索引库》介绍的是索引库,本文介绍向量数据库的quick start,操作起来和关系数据库非常类似,能够增删改查。
milvus创建于2019年,是一个开源的向量数据库,目标:
存储、索引、管理词向量,这些词向量会被深度神经网络和其他机器模型使用
$ wget https://github.com/milvus-io/milvus/releases/download/v2.0.2/milvus-standalone-docker-compose.yml -O docker-compose.yml
$ docker-compose up -d
单机版安装非常简单,主要包含三个组件。
1:连接
connections.connect("default", host="127.0.0.1", port="19530")
2:创建表
每个字段也又类型,向量数据的类型是FLOAT_VECTOR,dim表示向量的维度,hello_milvus是表名。
num_entities, dim = 3000, 8
fields = [
FieldSchema(name="pk", dtype=DataType.INT64, is_primary=True, auto_id=False),
FieldSchema(name="random", dtype=DataType.DOUBLE),
FieldSchema(name="embeddings", dtype=DataType.FLOAT_VECTOR, dim=dim)
]
schema = CollectionSchema(fields, "hello_milvus is the simplest demo to introduce the APIs")
hello_milvus = Collection("hello_milvus", schema, consistency_level="Strong")
3:添加数据
使用随机的方法生成向量,表中可以根据需要存储元数据。
rng = np.random.default_rng(seed=19530)
entities = [
[i for i in range(num_entities)],
rng.random(num_entities).tolist(),
rng.random((num_entities, dim)),
]
4:构建索引
其实就是定义Similarity Metrics和Vector Index,查询性能和精度都取决于此:
index = {
"index_type": "IVF_FLAT",
"metric_type": "L2",
"params": {"nlist": 128},
}
5:相似性搜索
在实际使用过程中,vectors_to_search是要自己生成的,在本文中是拿样本的最后一个向量作为query:
vectors_to_search = entities[-1][-2:]
search_params = {
"metric_type": "l2",
"params": {"nprobe": 10},
}
result = hello_milvus.search(vectors_to_search, "embeddings", search_params, limit=3, output_fields=["random"])
for hits in result:
for hit in hits:
print(f"hit: {hit}, random field: {hit.entity.get('random')}")
6:删除数据
可以根据主键删除:
ids = insert_result.primary_keys
expr = f"pk in [{ids[0]}, {ids[1]}]"
print(fmt.format(f"Start deleting with expr `{expr}`"))
result = hello_milvus.query(expr=expr, output_fields=["random", "embeddings"])
print(f"query before delete by expr=`{expr}` -> result: \n-{result[0]}\n-{result[1]}\n")
hello_milvus.delete(expr)
文章转载自虞大胆的叽叽喳喳,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




