Milvus-lite的使用

一、Milvus-Lite 简介

Milvus Lite 是 Zilliz 官方推出的嵌入式轻量向量数据库无需 Docker、无需独立服务进程,纯 Python 库,本地文件持久化。

✅ 优势

一行 pip 安装,Windows/Mac/Linux/Jupyter/Colab 全部支持

API 和 Milvus Standalone / 分布式完全兼容,本地开发代码可直接迁移生产

数据保存在本地.db文件,重启程序数据不丢失

⚠️ 限制(重要)

仅适合小规模场景:建议向量数量 ≤10 万条,不适合线上高并发生产

底层强制使用 FLAT 暴力检索(不支持 HNSW/IVF 等加速索引),大数据量检索速度慢

不支持分区、多数据库、RBAC 权限、分布式、预分片

不支持 float16、binary 向量(新版 3.0)

👉 适用场景:RAG 本地原型开发、学习向量检索、Notebook 演示、边缘小型 AI 应用

环境要求:Python 3.8 ~ 3.12

二、安装教程

在虚拟环境中

bash 复制代码
pip install -U pymilvus milvus-lite
pip install -U langchain-milvus

三、操作教程

创建一个 article.txt 文档:

复制代码
Milvus是开源高性能向量数据库,主要用于大模型RAG系统,实现文本语义检索。
Milvus Lite是Milvus嵌入式版本,不需要Docker,无需启动独立服务,直接本地文件运行。
Milvus Lite适合本地原型开发、学习调试、小型知识库测试。
Milvus Lite限制:只支持FLAT暴力搜索,不支持HNSW索引,向量规模建议10万以内。
正式生产环境需要部署Milvus Standalone,支持各类索引,支持高并发、海量向量。
RAG全称检索增强生成,先通过向量数据库检索相关文档,再交给大模型回答问题,减少幻觉。
python 复制代码
from datetime import time
from pathlib import Path
import random
from langchain_milvus import Milvus
from typing import Collection

from langchain_community.document_loaders import PyPDFLoader, TextLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter


from utils.model_factory import get_milvus_client, get_embedding_model

# 加载文档
# 1. 加载 PDF 文档
file_path = Path(__file__).resolve().parent  / "article.txt"
if not file_path.exists():
    raise FileNotFoundError(
        f"未找到 PDF 文件:{file_path}\n"
        "请确认已在当前目录下创建 files/XX销售有限公司员工守则.pdf"
    )

loader = TextLoader(str(file_path),encoding="utf-8")
# 切割文档
docs=loader.load()
splitter=RecursiveCharacterTextSplitter(
    chunk_size=300,
    chunk_overlap=30,
    add_start_index=True
)
chunks=splitter.split_documents(docs)

# 给每一个document 手动添加一些元数据
type=['游戏','人生','编程']
for d in chunks:
    i=random.randint(0,2)
    d.metadata['category']=type[i]

# 保存文档数据
vector_store = Milvus(
    embedding_function=get_embedding_model(),
    connection_args={"uri": "./milvus_demo.db"},   # milvus-lite 文件地址,合法!
    collection_name="employee_handbook",
    auto_id=True,
    consistency_level="Strong"
)

ids=vector_store.add_documents(chunks)
print(f"插入了{len(ids)}条数据")
# 验证文档是否保存成功
try:
    collection = Collection("employee_handbook")
    collection.load()
    # 先 flush 确保数据持久化
    collection.flush()
    time.sleep(0.5)  # 等待数据同步
    num_entities=collection.num_entities
    if len(chunks) == num_entities:
        print(f"✓ 插入成功!数据条数匹配(期望 {len(chunks)} 条,实际 {num_entities} 条)")
    elif num_entities > 0:
        print(f"⚠ 数据已插入,但数量不匹配(期望 {len(chunks)} 条,实际 {num_entities} 条)")
    else:
        # 如果数量为0,但查询能成功,说明数据在内存中,也算成功
        print("⚠ Collection 数量为 0,但数据可能在内存中(将通过查询验证)")

except Exception as e:
    print(e)

# 通过一个问题查询文档 的内容
results=vector_store.similarity_search("今天我迟到了30分钟,公司怎么处罚?",k=3)
# results 的类型是 list[Document]
if len(results)>0:
    print("最接近你这个问题的答案是:")
    for i,result in enumerate(results,start=1):
        print(f"--- 结果 {i} ---")
        print(result.page_content[:100])
        print(result.metadata)
        print()
else:
    print("您这个问题,在文档中没有答案")
相关推荐
tqs_1234518 小时前
Agent智能体+Skill插件引擎+Milvus混合检索 技术沉淀
java·python·milvus
逐米时代2 天前
向量数据库选型——Chroma、Qdrant、Milvus到底怎么选
数据库·milvus
粗体鱼3 天前
RAG/Agent 记忆混合检索多路召回:RRF 算法与Chunk RRF、Document RRF如何决策TopK
postgresql·milvus·es·rag·rff·mermory
小大宇4 天前
python milvus 案例
开发语言·python·milvus
sugar__salt5 天前
向量数据库从零到实战:用 Milvus + Zilliz 构建 AI 日记语义检索系统
数据库·人工智能·embedding·milvus·rag·zilliz
meilindehuzi_a6 天前
Node.js 实战 Milvus 向量数据库:从建库、向量检索到 RAG AI 日记本
数据库·node.js·milvus
华大哥7 天前
Milvus向量数据库和Milvus向量数据库命令行工具:milvus-cli
数据库·milvus
Lemon0309238 天前
milvus
milvus
Database_Cool_13 天前
阿里云 Lindorm vs Milvus+ES 拼接:一栈式多模数据库与多库架构全维度对比
elasticsearch·阿里云·milvus