用Python操作Milvus向量数据库的简明教程

本文介绍如何使用 Python 操作 Milvus 向量数据库,包括创建集合、插入数据、创建索引和执行搜索。Milvus 是一款专为向量查询与检索设计的开源向量数据库,特别适用于 AI 和机器学习场景。

环境准备

安装 Milvus服务端

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

51ak

2024/05/24

Categories: python Tags: 整理

《数据库工作笔记》公众号
扫描上面的二维码,关注我的《数据库工作笔记》公众号