Milvus 向量数据库使用示例

在这里插入图片描述


一、环境准备

# 安装依赖(需提前配置 Docker 版 Milvus)
pip install pymilvus python-dotenv transformers torch tqdm

二、文本分割与向量化

from glob import glob
from tqdm import tqdm
from transformers import AutoTokenizer, AutoModel
import torch

# 使用 BERT 模型生成文本向量
def text_to_vector(text_chunk):
    tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
    model = AutoModel.from_pretrained("bert-base-uncased")
    inputs = tokenizer(text_chunk, return_tensors="pt", truncation=True, max_length=512)
    with torch.no_grad():
        outputs = model(**inputs)
    return outputs.last_hidden_state[:, 0, :].numpy().squeeze()

# 分割文本文件
def split_text_file(file_path, chunk_size=300):
    with open(file_path, "r") as f:
        full_text = f.read()
    return [ful
### 安装与部署 Milvus 向量数据库支持多种部署方式,包括单机版、集群版和云服务。对于初学者来说,推荐从单机版开始,以便快速上手[^3]。在安装 Milvus 之前,需要确保系统满足以下基本要求: - **操作系统**:支持 Linux 和 macOS - **Docker**:需要安装 Docker 和 Docker Compose - **硬件要求**:最低配置为 8GB 内存和 2 核 CPU,推荐配置为 16GB 内存和 4 核 CPU 安装步骤如下: ```bash # 下载 Milvus 单机版配置文件 wget https://raw.githubusercontent.com/milvus-io/milvus/v2.3.3/deployments/docker-compose/singlebox/docker-compose.yml # 启动 Milvus 服务 docker-compose up -d ``` 启动完成后,可以通过以下命令检查服务状态: ```bash docker ps ``` 如果看到 `milvus-standalone` 容器正在运行,则表示 Milvus 已成功启动。 ### 连接与配置 Milvus 提供了多种客户端接口,包括 Python、Java、Go 等。这里以 Python 为例,展示如何连接到 Milvus 服务并进行基本操作。首先,需要安装 `pymilvus` 库: ```bash pip install pymilvus ``` 连接 Milvus 服务的代码如下: ```python from pymilvus import connections # 连接到 Milvus 服务 connections.connect(host='localhost', port='19530') ``` ### 创建集合(Collection) 在 Milvus 中,集合(Collection)是存储向量数据的基本单位。创建集合时需要定义字段(Field),包括主键字段、向量字段以及可选的其他字段。以下是一个创建集合的示例: ```python from pymilvus import FieldType, CollectionSchema, Collection # 定义字段 fields = [ {"name": "id", "type": FieldType.INT64, "is_primary": True, "description": "主键"}, {"name": "embedding", "type": FieldType.FLOAT_VECTOR, "dim": 128, "description": "向量字段"}, {"name": "category", "type": FieldType.INT64, "description": "类别标签"} ] # 创建集合 schema = CollectionSchema(fields=fields, description="示例集合") collection = Collection(name="example_collection", schema=schema) ``` ### 插入数据 向 Milvus 集合中插入数据时,需要确保数据格式与集合的字段定义一致。以下是一个插入数据的示例: ```python import random # 生成随机数据 data = [ [i for i in range(10)], # id [[random.random() for _ in range(128)] for _ in range(10)], # embedding [random.randint(0, 9) for _ in range(10)] # category ] # 插入数据 collection.insert(data) ``` ### 建立索引 为了加速向量相似度搜索,通常需要为向量字段建立索引。Milvus 支持多种索引类型,如 IVF_FLAT、IVF_SQ8、HNSW 等。以下是一个建立 IVF_FLAT 索引的示例: ```python index_params = { "index_type": "IVF_FLAT", "params": {"nlist": 100}, "metric_type": "L2" } collection.create_index(field_name="embedding", index_params=index_params) ``` ### 查询与搜索 Milvus 支持多种查询和搜索操作,包括基于主键的查询、向量相似度搜索以及带有元数据过滤的搜索。 #### 基于主键的查询 可以通过主键查询特定实体的数据: ```python # 查询主键为 0 的实体 res = collection.query(expr="id == 0") print(res) ``` #### 向量相似度搜索 向量相似度搜索是 Milvus 的核心功能之一。以下是一个简单的向量相似度搜索示例: ```python import random # 生成查询向量 query_vector = [random.random() for _ in range(128)] # 执行搜索 search_params = {"metric_type": "L2", "params": {"nprobe": 10}} results = collection.search( data=[query_vector], anns_field="embedding", param=search_params, limit=5 ) # 输出搜索结果 for result in results: print(result) ``` #### 带有元数据过滤的搜索 如果集合中包含元数据字段(如 `category`),可以在搜索时添加过滤条件: ```python # 搜索类别为 5 的实体中最接近的 5 个向量 results = collection.search( data=[query_vector], anns_field="embedding", param=search_params, limit=5, expr="category == 5" ) # 输出搜索结果 for result in results: print(result) ``` ### 删除数据 Milvus 支持删除集合中的特定实体或整个集合。以下是一些常见的删除操作: #### 删除特定实体 可以通过主键删除特定实体: ```python # 删除主键为 0 的实体 collection.delete(expr="id == 0") ``` #### 删除整个集合 如果不再需要某个集合,可以将其删除: ```python # 删除集合 collection.drop() ``` ### 加载与卸载集合 在进行搜索操作之前,需要确保集合已经加载到内存中。以下是如何加载和卸载集合的示例: ```python # 加载集合 collection.load() # 卸载集合 collection.release() ``` ### 小结 通过以上步骤,可以快速上手 Milvus 向量数据库的基本使用方法。从安装部署、连接配置、创建集合、插入数据、建立索引,到查询搜索和删除数据,每一步都展示了如何利用 Milvus 进行高效的向量数据管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值