本文介绍如何使用 Python 操作 Milvus 向量数据库,包括创建集合、插入数据、创建索引和执行搜索。Milvus 是一款专为向量查询与检索设计的开源向量数据库,特别适用于 AI 和机器学习场景。
环境准备
安装 Milvus服务端
- 1.docker 安装
wget https://github.com/milvus-io/milvus/releases/download/v2.2.3/milvus-standalone-docker-compose.yml -O docker-compose.yml
docker-compose up -d
-
- 脚本 安装
wget https://raw.githubusercontent.com/milvus-io/milvus/master/scripts/standalone_embed.sh
bash standalone_embed.sh start
安装 Milvus 客户端
在开始之前,请确保已经在环境中安装了 Milvus 客户端库 pymilvus
。你可以使用以下命令进行安装:
pip install pymilvus
连接 Milvus
首先,我们需要连接到本地的 Milvus 服务。假设 Milvus 服务运行在 127.0.0.1
,端口为 19530
。
from pymilvus import connections
# 连接到 Milvus 服务
connections.connect(alias="default", host='127.0.0.1', port='19530')
定义集合 Schema
接下来,我们需要定义 Milvus 集合的 schema。假设我们要存储的集合包含一个 ID 字段和一个向量字段,向量维度为 128。
from pymilvus import FieldSchema, CollectionSchema, DataType
# 定义字段
fields = [
FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True),
FieldSchema(name="vector", dtype=DataType.FLOAT_VECTOR, dim=128)
]
# 定义集合 Schema
schema = CollectionSchema(fields, "example collection")
创建集合
使用定义好的 schema 创建一个名为 example_collection
的集合。
from pymilvus import Collection
# 创建集合
collection = Collection("example_collection", schema, consistency_level="Strong")
插入数据
我们可以生成一些随机的向量数据并将其插入到集合中。
import numpy as np
# 生成随机数据
num_entities = 1000
vectors = np.random.random((num_entities, 128)).tolist()
# 插入数据
entities = [
vectors,
]
collection.insert(entities)
插入数据后,调用 flush
方法将数据持久化到磁盘。
# 持久化数据
collection.flush()
创建索引
为了提高查询性能,我们需要为向量字段创建索引。下面的代码展示了如何创建 IVF_FLAT 类型的索引。
# 定义索引参数
index_params = {
"index_type": "IVF_FLAT",
"metric_type": "L2",
"params": {"nlist": 128}
}
# 创建索引
collection.create_index(field_name="vector", index_params=index_params)
加载数据到内存
在进行检索之前,需要将数据加载到内存中。
# 加载数据到内存
collection.load()
执行搜索
最后,我们可以使用一个查询向量在集合中进行搜索,并输出前 10 个最相似的结果。
# 定义搜索参数
search_params = {
"metric_type": "L2",
"params": {"nprobe": 10}
}
# 随机选择一个查询向量
query_vector = [vectors[0]] # 使用插入数据中的第一个向量
# 执行搜索
results = collection.search(query_vector, "vector", search_params, limit=10)
for result in results[0]:
print(f"ID: {result.id}, Distance: {result.distance}")
总结
本文介绍了如何使用 Python 操作 Milvus 向量数据库的基本步骤,包括连接 Milvus、定义集合、插入数据、创建索引和执行搜索。通过 Milvus,您可以高效地存储、索引和检索海量向量数据,为 AI 和机器学习应用提供强大的支持。
参考 Milvus 官方文档
>> Home