Well,不要刷屏了

【工程实践】Milvus 向量数据库入门与实战

默认分类 | 作者 search_engineer | 发布于7 小时前 | | 阅读数:72

大家好,我是 @search_engineer,今天分享向量数据库 Milvus 的入门实践经验。

什么是向量检索?

随着 AI 大模型的兴起,向量检索成为搜索领域的新热点。不同于传统的关键词匹配,向量检索通过计算语义相似度来找到相关内容。

应用场景:

  • 图片搜索(以图搜图)
  • 语义文本搜索
  • 推荐系统
  • 问答系统

Milvus 简介

Milvus 是一款开源的向量数据库,专为海量向量数据的存储和检索设计。

核心特性:

  • 支持十亿级向量数据
  • 多种索引类型(IVF、HNSW、ANNOY 等)
  • 分布式架构
  • 丰富的 SDK(Python、Java、Go 等)

快速入门

安装 Milvus

使用 Docker Compose 一键启动:

version: '3.5'
services:
  etcd:
    image: quay.io/coreos/etcd:v3.5.5
  minio:
    image: minio/minio:RELEASE.2023-03-20T20-16-18Z
  milvus:
    image: milvusdb/milvus:v2.3.3
    ports:
      - "19530:19530"

Python 示例代码

from pymilvus import connections, FieldSchema, CollectionSchema, DataType, Collection

# 连接 Milvus
connections.connect("default", host="localhost", port="19530")

# 定义集合结构
fields = [
    FieldSchema(name="id", dtype=DataType.INT64, is_primary=True),
    FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128)
]
schema = CollectionSchema(fields, "示例集合")
collection = Collection("example", schema)

# 插入数据
import numpy as np
data = [
    [i for i in range(1000)],  # id
    np.random.random((1000, 128)).tolist()  # vectors
]
collection.insert(data)

# 创建索引
collection.create_index("embedding", {"index_type": "IVF_FLAT", "metric_type": "L2"})

# 搜索
results = collection.search(
    data=[np.random.random(128).tolist()],
    anns_field="embedding",
    param={"metric_type": "L2", "params": {"nprobe": 10}},
    limit=10
)

索引类型选择

索引类型 适用场景 查询速度 内存占用
FLAT 小规模数据(<10万)
IVF_FLAT 中等规模 中等 中等
IVF_SQ8 大规模,内存受限
HNSW 高查询性能要求 很快

性能优化建议

  1. 选择合适的索引类型 - 根据数据规模和查询性能要求
  2. 合理设置 nprobe - 平衡查询速度和召回率
  3. 数据分批插入 - 避免单次插入过多数据
  4. 定期 compact - 清理已删除数据,优化存储

与 Elasticsearch 的对比

特性 Milvus Elasticsearch
数据类型 向量 文本、数值
检索方式 相似度搜索 关键词匹配
适用场景 语义搜索、推荐 日志、文档搜索
是否可以结合 ✅ 可以 ✅ 可以

实际项目中,可以将两者结合:ES 做关键词过滤,Milvus 做语义召回。

参考资源

讨论

你在项目中使用过向量数据库吗?遇到了哪些挑战?欢迎在评论区交流!


本文由 @search_engineer 原创发布,转载请注明出处。


[尊重社区原创,转载请保留或注明出处]
本文地址:http://elasticsearch.cn/article/15674


9 个评论

大佬好!想问一下 Milvus 和 Elasticsearch 的向量搜索功能有什么区别?我应该选哪个?
@curious_cat 简单对比:Milvus 专注向量搜索,十亿级数据,适合以图搜图、语义搜索;ES 向量功能是附加功能,适合文本为主、向量为辅的场景。如果主要是向量搜索,选 Milvus;如果已有 ES 集群,先用 ES 向量功能试试。
Milvus的向量检索性能如何?能支撑多大的数据量?
前端如何集成向量搜索功能?
向量搜索和传统搜索怎么结合使用?
Milvus的版本兼容性如何?
技术选型时Milvus和Pinecone怎么选?
2024年向量搜索有什么新趋势?
@wang_wu Milvus可以支撑十亿级向量数据,查询延迟在毫秒级。如果数据量在千万以下,ES的向量功能也够用。

要回复文章请先登录注册