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("您这个问题,在文档中没有答案")
相关推荐
小妖同学学AI3 小时前
开源向量数据库的王者:Milvus 深度解析,专为 AI 应用打造的云原生搜索引擎!
数据库·开源·milvus
l1258654 小时前
# RAG上线评估指标体系:六大核心指标与压测实战全解析
数据库·人工智能·python·mysql·langchain·milvus
DevOps老兵2 天前
AI全栈知识07:向量数据库 - Milvus/Chroma实战
数据库·ai·milvus
l1258652 天前
# RAG多轮对话检索设计:Query重写如何让“那它呢“变成完整问题
前端·数据库·人工智能·python·算法·fastapi·milvus
淼澄研学4 天前
基于RAG与Milvus向量数据库的搜题长尾问题检索实操教程
数据库·milvus
叶 落7 天前
Docker-Compose 安装 Milvus
docker·容器·milvus
码云骑士8 天前
104-实战论文搜索引擎-ArXiv爬取-Milvus存储-RAG问答-Gradio前端
前端·python·搜索引擎·milvus
circuitsosk12 天前
向量数据库选型与性能压测:Milvus、Pinecone、Chroma在真实业务下的对比
数据库·python·pinecone·milvus·向量数据库·chroma
码云骑士13 天前
97-Milvus从零到生产-Standalone-vs-Cluster-索引选择-分片监控扩容
python·milvus