Milvus 是一款开源的向量数据库,专为大规模向量相似性搜索和 AI 应用设计,支持高效的非结构化数据检索。以下是从部署到使用的全流程详细讲解:

一、部署 Milvus

1. 单机部署(Docker Compose 方式)

适用场景:测试、开发环境,数据量较小。

步骤

  1. 安装 Docker 和 Docker Compose

    • 确保系统已安装 Docker 和 Docker Compose。
    • 可以通过命令 docker --versiondocker-compose --version 检查是否安装成功。
  2. 下载 Milvus 的 Docker Compose 配置文件

    • 从 Milvus 的 GitHub 仓库下载最新版本的 milvus-standalone-docker-compose.yml 文件。
    • 或者使用命令 wget https://github.com/milvus-io/milvus/releases/download/v<version>/milvus-standalone-docker-compose.yml -O docker-compose.yml(将 <version> 替换为实际版本号)。
  3. 启动 Milvus 服务

    • 在配置文件所在目录下执行命令 docker-compose up -d
    • 这将启动 Milvus 的三个核心组件容器:milvus-etcd(元数据存储)、milvus-minio(对象存储)和 milvus-standalone(核心服务)。
  4. 验证服务状态

    • 使用命令 docker-compose ps 查看容器状态,确保所有容器都正常运行。
    • 可以通过访问 http://localhost:9091/api/v1/health(或 Milvus 服务器的 IP 地址)来验证 Milvus 服务是否健康。
2. 集群部署(生产环境)

适用场景:生产环境,数据量较大,需要高可用性和可扩展性。

步骤

  1. 准备 Kubernetes 环境

    • 确保有一个可用的 Kubernetes 集群。
  2. 使用 Helm 部署 Milvus

    • 安装 Helm(如果尚未安装)。
    • 添加 Milvus 的 Helm 仓库:helm repo add milvus https://milvus-io.github.io/milvus-helm/
    • 更新 Helm 仓库:helm repo update
    • 创建 Milvus 的命名空间(可选):kubectl create namespace milvus
    • 使用 Helm 安装 Milvus:helm install milvus milvus/milvus -n milvus(可以根据需要自定义配置)。
  3. 验证集群状态

    • 使用 kubectl get pods -n milvus 查看 Milvus 集群的 Pod 状态。
    • 确保所有核心组件(如 milvus-proxymilvus-datacoordmilvus-indexcoord 等)都正常运行。

二、使用 Milvus

1. 连接 Milvus

使用 Python SDK 连接

  1. 安装 PyMilvus

    • 使用命令 pip install pymilvus 安装 PyMilvus 库。
  2. 创建连接

    from pymilvus import connections
    connections.connect(alias="default", host='localhost', port='19530')  # 如果是远程部署,将 'localhost' 替换为 Milvus 服务器的 IP 地址
    
2. 数据模型操作

创建集合(Collection)

  1. 定义字段

    from pymilvus import FieldSchema, CollectionSchema, DataType
    fields = [
        FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True),
        FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128),  # 假设向量维度为 128
        FieldSchema(name="text", dtype=DataType.VARCHAR, max_length=512)  # 元数据字段
    ]
    
  2. 创建集合

    from pymilvus import Collection
    schema = CollectionSchema(fields=fields, description="文本向量集合")
    collection = Collection(name="text_embeddings", schema=schema)
    

创建索引

  1. 选择索引类型和参数

    index_params = {
        "metric_type": "L2",  # 欧氏距离
        "index_type": "HNSW",  # HNSW 索引
        "params": {"M": 16, "efConstruction": 200}  # HNSW 索引参数
    }
    
  2. 创建索引

    collection.create_index(field_name="embedding", index_params=index_params)
    
  3. 加载集合到内存

    collection.load()  # 检索前必须执行
    
3. 数据操作

插入数据

import random

# 生成随机向量和文本
vectors = [[random.random() for _ in range(128)] for _ in range(1000)]
texts = [f"文本_{i}" for i in range(1000)]

# 插入数据
data = [vectors, texts]
insert_result = collection.insert(data)
print(f"插入 ID: {insert_result.primary_keys[:5]}")

检索向量

# 准备查询向量
query_vector = [random.random() for _ in range(128)]

# 检索参数
search_params = {
    "metric_type": "L2",
    "params": {"ef": 50}  # HNSW 检索参数
}

# 执行检索
results = collection.search(
    data=[query_vector],  # 查询向量列表
    anns_field="embedding",  # 查询的向量字段
    param=search_params,  # 检索参数
    limit=10,  # 返回 Top10 结果
    output_fields=["text"]  # 返回的元数据字段
)

# 处理结果
for hit in results[0]:
    print(f"ID: {hit.id}, 距离: {hit.distance}, 文本: {hit.entity.get('text')}")

混合查询(向量 + 过滤条件)

# 向量检索 + 元数据过滤(如文本包含 "重要")
results = collection.search(
    data=[query_vector],
    anns_field="embedding",
    param=search_params,
    limit=10,
    expr="text like '%重要%'"  # SQL-like 过滤表达式
)
4. 集合管理

查看集合信息

print(f"集合行数: {collection.num_entities}")
print(f"集合描述: {collection.description}")

删除集合

collection.drop()  # 谨慎操作,删除后数据无法恢复

三、进阶功能

1. 使用图形化管理工具 Attu
  1. 部署 Attu

    • Attu 是 Milvus 的官方图形化管理工具,可以通过 Docker 部署。
    • 下载 Attu 的 Docker Compose 配置文件并启动服务。
  2. 连接 Milvus

    • 打开 Attu 的 Web 界面,输入 Milvus 服务器的 IP 地址和端口(默认为 19530)进行连接。
  3. 管理集合和数据

    • 在 Attu 界面上可以直观地创建、查看、编辑和删除集合,以及插入、查询和删除数据。
2. 性能优化
  1. 选择合适的索引类型和参数

    • 根据数据量和查询场景选择合适的索引类型(如 IVF_FLAT、HNSW、DiskANN 等)和参数。
  2. 调整批量插入和查询大小

    • 根据系统资源调整批量插入和查询的大小,以平衡性能和资源消耗。
  3. 监控和调优

    • 使用 Milvus 的监控工具(如 Prometheus 和 Grafana)监控系统性能,并根据监控结果进行调优。
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐