Milvus 快速入门

在这里插入图片描述

引言

在本篇文章中,我们将介绍 Milvus 的基本概念,并通过一个简单的示例展示如何在 Milvus 中创建集合、插入向量和执行搜索。最后,我们将概览 Milvus 提供的 API。

一、基本概念

1.1 集合 (Collection)

在 Milvus 中,集合类似于关系数据库中的表,它是用来存储向量的容器。集合可以有多个字段,每个字段对应一个向量属性。

1.2 向量 (Vector)

向量是多维空间中的点,通常用于表示数据的特征。在 Milvus 中,向量是集合中的基本存储单元。

1.3 索引 (Index)

索引是用来加速向量搜索的数据结构。Milvus 支持多种索引类型,如 FLAT、IVF、HNSW 等,每种索引类型都有其特定的适用场景。

在这里插入图片描述

二、快速上手

2.1 安装 Milvus Python Client

首先,确保你已经安装了 Milvus 服务。接下来,安装 Milvus 的 Python 客户端:

pip install pymilvus

2.2 创建集合

from pymilvus import Collection, FieldSchema, DataType, Dim, MetricType

 定义集合的 schema
fields = [
    FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128),
]

 创建集合
collection_name = "my_collection"
collection = Collection(name=collection_name, schema=fields)

2.3 插入向量

 假设我们有一些向量数据
vectors = [
    [0.1, 0.2, ..., 0.9, 1.0],
    [1.1, 1.2, ..., 1.9, 2.0],
     ...
]

 插入向量
insert_result = collection.insert([vectors])

2.4 创建索引

 创建索引以加速搜索
collection.create_index(index_type="IVF_FLAT", params={"nlist": 1024})

2.5 执行搜索

 假设我们有一个查询向量
query_vector = [0.1, 0.2, ..., 0.9, 1.0]

 执行搜索
search_params = {
    "nprobe": 10,
    "metric_type": MetricType.L2,
}
results = collection.search(
    data=[query_vector],
    anns_field=collection_name,
    param=search_params,
    limit=10,
    output_fields=[],
)

在这里插入图片描述

三、API 概览

Milvus 提供了多种编程语言的 API,包括 Python、Java 等。

3.1 Python API

Milvus 提供了 Python SDK,名为 PyMilvus,它允许开发者在 Python 环境中方便地与 Milvus 进行交互,执行各种数据库操作,如连接、数据插入、查询、搜索、删除等。通过 PyMilvus,你可以轻松地将 Milvus 强大的向量数据库功能集成到你的 Python 应用程序中。

以下是关于 Milvus Python API 的一些关键信息:

3.1.1 安装 PyMilvus

你可以通过 pip 安装 PyMilvus。对于 Python 3.8 及以上版本,可以使用以下命令安装:

$ pip3 install pymilvus

若需要 Milvus 模型功能,可以使用:

$ pip3 install pymilvus[model]

安装特定版本的 PyMilvus:

$ pip3 install pymilvus==版本号

升级 PyMilvus 到最新版本:

$ pip3 install --upgrade pymilvus

3.1.2 兼容性

不同版本的 Milvus 推荐使用相应版本的 PyMilvus,以确保最佳兼容性。例如:

  • Milvus 1.0.x 推荐使用 PyMilvus 1.0.1
  • Milvus 2.3.x 推荐使用 PyMilvus 2.3.7
  • Milvus 2.4.x 推荐使用 PyMilvus 2.4.0

3.1.3 基本使用

使用 PyMilvus 连接 Milvus 服务器并创建集合的示例代码:

from pymilvus import Collection, CollectionSchema, FieldSchema, DataType

# 定义字段
fields = [
    FieldSchema(name="pk", dtype=DataType.VARCHAR, is_primary=True),
    FieldSchema(name="random", dtype=DataType.DOUBLE),
    FieldSchema(name="embeddings", dtype=DataType.FLOAT_VECTOR, dim=128)
]

# 创建集合的 schema
schema = CollectionSchema(fields, description="示例集合")

# 创建集合
hello_milvus = Collection(name="hello_milvus", schema=schema)

3.1.4 数据操作

插入数据、创建索引、执行查询和搜索是 Milvus 中常见的数据操作。以下是一些操作的示例代码:

  • 插入数据
# 假设 entities 是一个包含数据的列表
insert_result = hello_milvus.insert(entities)
hello_milvus.load()
  • 创建索引
index = {
    "index_type": "IVF_FLAT",
    "metric_type": "L2",
    "params": {"nlist": 128},
}
hello_milvus.create_index("embeddings", index)
  • 执行查询
result = hello_milvus.query(expr="random > 0.5", output_fields=["random", "embeddings"])
  • 执行搜索
search_params = {"nprobe": 10}
result = hello_milvus.search(vectors_to_search, "embeddings", search_params, limit=10)

3.1.5 调试和开发

PyMilvus 还提供了一些工具来帮助开发者进行调试和开发:

  • 获取子模块:
$ git submodule update --init
  • 从 milvus-proto 生成 Python 文件:
$ make gen_proto
  • 使用本地 PyMilvus 仓库为 Milvus 服务器:
$ make install
  • 检查代码风格:
make lint

3.1.6 文档和资源

Milvus 提供了详尽的在线文档,其中包含了关于 PyMilvus 的更多信息和高级用法:

  • PyMilvus 文档: PyMilvus Documentation

3.1.7 社区支持

如果在使用 PyMilvus 过程中有任何问题或建议,可以通过 Slack channel #py-milvus 与社区交流。

3.1.8 注意事项

  • 确保 Milvus 服务正在运行,并且 Python 环境已正确安装且配置无误。
  • 在执行数据插入操作后,调用 flush 方法确保数据已写入磁盘。
  • 在创建索引前,需要确保数据已经插入并且索引字段是正确的。

3.2 Java API

3.2.1 Java SDK 简介

Milvus Java SDK 是一个开源项目,其源代码托管在 GitHub 上。它允许 Java 开发者通过编写 Java 代码与 Milvus 进行交互,执行包括数据插入、查询、搜索、删除等操作。

3.2.2 兼容性

Milvus Java SDK 与 Milvus 服务器的特定版本兼容。开发者需要确保使用的 Java SDK 版本与 Milvus 服务器版本相匹配。

3.2.3 安装

Java SDK 可以通过 Apache Maven 或 Gradle 下载安装。开发者需要在项目的 pom.xmlbuild.gradle 文件中添加相应的依赖。

快速开始

在使用 Java SDK 之前,需要满足一些先决条件,如 Java 8 或更高版本。此外,开发者需要了解如何连接到 Milvus 服务器,以及如何使用 Java SDK 进行基本的数据操作。

3.2.4 示例代码

以下是使用 Milvus Java SDK 连接到 Milvus 服务器并执行简单操作的示例代码:

import io.milvus.client.*;

public class MilvusClientExample {
    public static void main(String[] args) {
        // 初始化 Milvus 客户端
        ConnectParam connectParam = new ConnectParam.Builder().withHost("localhost").withPort(19530).build();
        MilvusClient client = new MilvusGrpcClient.Builder().build();
        try {
            client.connect(connectParam);

            // 创建集合示例
            String collectionName = "my_collection";
            String fieldName = "my_vector";
            int dimension = 128;
            String fieldSchema = String.format("{\"name\": \"%s\", \"type\": \"FLOAT_VECTOR\", \"params\": {\"dim\": %d}}", fieldName, dimension);
            String collectionSchema = String.format("{\"fields\": [%s], \"description\": \"my collection\"}", fieldSchema);
            client.createCollection(collectionSchema);

            // 其他操作...
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 关闭客户端连接
            if (client != null && client.isConnected()) {
                client.disconnect();
            }
        }
    }
}

3.2.5 社区支持

Milvus 拥有活跃的社区,开发者可以通过 GitHub 提交 issue,或者加入 Discord 社区与其他开发者交流。

3.2.6 文档和资源

Milvus 官方提供了详尽的 Java SDK 文档,包括 API 参考、快速入门指南和最佳实践。

  • Java SDK 文档: Java SDK Documentation

3.3 Go API

Milvus Go API 是 Milvus 提供的 Go 语言客户端库,它允许开发者在 Go 应用程序中与 Milvus 服务器进行交互,执行数据操作和向量搜索等任务。通过 Milvus Go API,Go 语言开发者可以轻松地将 Milvus 的强大功能集成到他们的应用程序中,以处理大规模的向量数据和执行高效的相似性搜索。

以下是关于 Milvus Go API 的一些关键信息:

3.3.1 安装

要安装 Milvus Go SDK,你需要有 Go 1.17 或更高版本。可以使用 go get 命令来安装:

go get -u github.com/milvus-io/milvus-sdk-go/v2

3.3.2 兼容性

Milvus Go SDK 与 Milvus 服务器的特定版本是兼容的。例如,Milvus 2.3.x 推荐使用 Go SDK 版本 2.3.1。主要版本之间可能不兼容,因此需要注意与 Milvus 服务器匹配的 SDK 版本。

3.3.3 快速开始

安装完 Go SDK 后,你可以在你的 Go 应用程序中导入并使用它:

import "github.com/milvus-io/milvus-sdk-go/v2/client"

3.3.4 示例代码

以下是使用 Milvus Go SDK 创建客户端连接和检查集合是否存在的示例代码:

client, err := client.NewClient(context.Background(), client.Config{
    Address: "localhost:19530",
})
if err != nil {
    // 处理错误
}
defer client.Close()

// 检查集合是否存在
hasCollection := client.HasCollection(context.Background(), "YOUR_COLLECTION_NAME")

3.3.5 API 文档

Milvus Go SDK 的 API 文档可以在 Milvus 官方文档中找到,提供了关于如何使用 Go SDK 的详细信息和示例。

3.3.6 开源许可

Milvus Go SDK 是一个开源项目,遵循 Apache-2.0 许可协议,其源代码托管在 GitHub 上。

3.3.7 实际应用

Milvus Go SDK 可以用于构建多种 AI 应用,如图像搜索、聊天机器人、化学结构搜索等。

3.3.8 版本说明

Milvus Go SDK 有多个版本,每个版本对应不同版本的 Milvus 服务器。选择正确的版本对于确保兼容性至关重要。

3.3.9 安装指南

Milvus 官方文档提供了详细的 Go SDK 安装指南,包括系统要求和安装步骤。

3.4 RESTful API

Milvus 的 RESTful API 提供了一种通过 HTTP 请求与 Milvus 服务器交互的方式,允许用户在不同编程语言和环境中操作 Milvus 来管理集合和数据。通过 Milvus RESTful API,用户可以在多种编程环境中与 Milvus 进行交互,实现数据管理和搜索功能,这为构建基于 Milvus 的应用程序提供了灵活性和便利性。

以下是关于 Milvus RESTful API 的一些关键信息:

3.4.1 功能特点

  • 操作集合:允许用户创建、列出、描述、删除集合。
  • 数据管理:支持向集合中插入、查询、删除数据。
  • 搜索功能:能够执行向量搜索操作。
  • 动态字段:支持动态字段的创建和使用,增加了数据管理的灵活性。

3.4.2 使用前提

  • Milvus 服务运行:确保 Milvus 服务正在运行。
  • 端口开放:Milvus RESTful API 默认端口为 9091,确保该端口已开放。

3.4.3 认证信息

  • Token:如果 Milvus 实例启用了认证,需在请求头中提供 Token,格式为用户名和密码以冒号分隔,例如 root:Milvus

3.4.4 API 端点

  • 集合操作:例如 GET ${MILVUS_HOST}:${MILVUS_PORT}/v1/vector/collections 用于列出所有集合。

3.4.5 示例请求

curl --request GET \
  --url "http://${MILVUS_HOST}:${MILVUS_PORT}/v1/vector/collections" \
  --header "Authorization: Bearer ${TOKEN}" \
  --header "accept: application/json" \
  --header "content-type: application/json"

3.4.6 注意事项

  • RESTful API 支持的集合操作与 SDK 中的功能相似,但可能在某些特性上存在差异。
  • 某些操作可能需要特定的请求格式或参数。

3.4.7 文档和资源

  • 官方文档:Milvus 提供了详尽的 RESTful API 文档,包括如何开始使用、API 端点、认证方式和示例请求。
    • RESTful API v2.2.x 文档:Milvus RESTful API v2.2.x
    • RESTful API v2.3.x 文档:Milvus RESTful API v2.3.x

3.4.8 社区支持

  • 如果在使用 RESTful API 过程中遇到问题,可以通过 Milvus 社区获得帮助,例如 GitHub 仓库的 Issues 区域。
    • GitHub Issues:Milvus GitHub Issues

3.4.9 未来规划

  • Milvus 社区正在不断扩展 RESTful API 的功能,包括支持更多的数据源迁移和简化迁移命令等。
    • 未来规划讨论:Milvus Confluence

在这里插入图片描述

总结

Milvus 的快速入门包括了基本概念的理解、一个简单的示例操作以及 Milvus API 的概览。通过这些步骤,你可以开始使用 Milvus 进行向量数据的存储和搜索。Milvus 的设计旨在简化向量数据库的使用,使其成为机器学习和人工智能应用中的有力工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/632277.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu 24 换国内源及原理 (阿里源)

备份原文件 sudo cp /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources.bak 编辑源文件 sudo gedit /etc/apt/sources.list.d/ubuntu.sources (阿里源) Types: deb deb-src URIs: https://mirrors.aliyun.com/ubunt…

学习笔记:使用Ollama项目快速本地化部署Qwen 1.5模型

Ollama简介 Ollama是一个开源框架,专门设计用于在本地运行大型语言模型。它的主要特点是将模型权重、配置和数据捆绑到一个包中,从而优化了设置和配置细节,包括GPU使用情况,简化了在本地运行大型模型的过程。Ollama支持macOS和Li…

【Javaer学习Python】2、Django的MVT设计模式,完成CRUD小应用

系列文章:学习Python Django的MVT设计模式由Model(模型), View(视图) 和Template(模板)三部分组成,分别对应单个app目录下的models.py, views.py和templates文件夹。它们看似与MVC设计模式不太一致,其实本质是相同的; 实践是检验学…

LabVIEW静止无功补偿监控系统

LabVIEW静止无功补偿监控系统 随着电力系统和电力电子技术的快速发展,静止无功补偿器作为提高电网质量和稳定性的关键设备,其监控系统的研发显得非常重要。详细介绍基于LabVIEW的SVC监控系统的设计与实现过程,可为电力系统的优化和电力电子技…

基于Java+SpringBoot+Mybaties-plus+Vue+elememt 驾校管理系统 设计与实现

一.项目介绍 系统角色:管理员、驾校教练、学员 管理员: 个人中心:修改密码以及个人信息修改 学员管理:维护学员信息,维护学员成绩信息 驾校教练管理:驾校教练信息的维护 驾校车辆管理&…

Android 触摸事件分离原理

什么是触摸事件分离? 屏幕上存在多个窗口时,多指触摸的情况下,多个手指的触摸事件可以分给不同的窗口,以下面的图为例,第一个手指按下,window1可以响应这个事件,第二个手指按下(第一…

AI应用案例:吸烟打电话行为识别推理

使用百度PaddlePaddle(现更名为PaddlePaddle-GPU或PaddlePaddle-CPU)框架来构建精准的人员抽烟、打电话动作识别模型,并将其应用于加油站监控场景,你可以遵循以下步骤: 数据准备: 收集抽烟和打电话行为的图…

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑网络重构和应急资源的灾后配电网信息物理系统协调恢复方法》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

【Maven】Nexus私服简介_下载安装_登录

1、简介 1.1介绍 Nexus私服,也被称为Maven仓库管理器,是许多公司在自己的局域网内搭建的远程仓库服务器。提供了强大的仓库管理功能和构件搜索功能,使得开发人员能够更方便地管理和使用Maven项目中的依赖库。 1.2作用 内网访问&#xff1…

总台,电视台媒体邀约现场报道,应注意以下几点?

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 邀请中央电视台(总台)这样的权威媒体来报道会议活动,需要注意以下几个关键要点: 提前规划:由于总台的新闻选题流程较为严格和…

2024CCPC郑州邀请赛暨河南省赛(A,B,C,D,F,G,H,J,K,L,M)

2024 National Invitational of CCPC (Zhengzhou), 2024 CCPC Henan Provincial Collegiate Programming Contest 2024 年中国大学生程序设计竞赛全国邀请赛(郑州)暨第六届 CCPC 河南省大学生程序设计竞赛 比赛链接 这场的题说实话难度其实都不大&…

24个AI写作网站汇总,免费ai工具,把AI用好工作效率真的能提高300%!

从去年到今年,可谓是AI爆发之年,各种AI工具也是层出不穷。随着openai的暴堆算力以及chatgpt人工智能算法的不断进步,ai正在大跨步的向前迈进。 ai可说是集中了全人类的智慧,未来ai的发展我是不敢想象的。不过在今天,如…

element select下拉框编辑时回显已经删除的数据

<el-form-item label"是否激活" prop"activationId"><el-selectv-model"formParams.activationId"style"width: 140px"clearableplaceholder"请选择"><el-optionv-for"item in activationList":ke…

CentOS7使用Docker安装Redis图文教程

1.拉取Redis镜像 这里制定了版本&#xff0c;不指定默认latest最新版 docker pull redis:6.0.8提示信息如下即为下载成功 2.上传配置文件 官方配置文件&#xff08;找自己对应的版本&#xff09;&#xff1a;reids.conf 或者将如下配置文件命名为redis.conf&#xff0c;上…

Kubernetes的Service类型详解

1. Service详解 1.1 Service介绍 在Kubernetes中&#xff0c;Service资源解决了Pod IP地址不固定的问题&#xff0c;提供了一种更稳定和可靠的服务访问方式。以下是Service的一些关键特性和工作原理&#xff1a; Service的稳定性&#xff1a;由于Pod可能会因为故障、重启或扩…

文件批量改名神器:轻松实现导入文件筛选与批量重命名,提升文件管理效率新体验!

电脑中的文件堆积如山&#xff0c;你是否曾为寻找某个特定文件而头疼不已&#xff1f;是否曾因为文件命名不规范而错失重要信息&#xff1f;别担心&#xff0c;现在有了这款文件批量改名神器&#xff0c;一切问题都将迎刃而解&#xff01; 第一步&#xff0c;我们打开需要改名文…

【ONE·基础算法 || 队列(宽搜运用) 优先级队列(堆运用) 】

总言 主要内容&#xff1a;编程题举例&#xff0c;熟悉理解宽搜类题型&#xff0c;队列、堆此类STL容器使用。       文章目录 总言1、 宽搜2、N 叉树的层序遍历&#xff08;medium&#xff09;2.1、题解 3、二叉树的锯齿形层序遍历&#xff08;medium&#xff09;3.1、题解…

【永洪BI】精确不同值计数

一、功能演示 二、使用说明 1、 功能简介 精确不同值计数&#xff0c;即统计所有数据行中不同数据值的总数量&#xff0c;数据值相同时只计算一次&#xff0c;如果存在维度字段&#xff0c;会按照不同类别分别计数。 2、 应用场景 想要统计数据中不同值出现的次数时可以使用…

Metasploit基本命令

1. 开启控制台 命令&#xff1a; msfconsole2. 搜索模块 命令&#xff1a; search ms17-010 # 模块名这里以搜索 ms17-010 为例&#xff0c; auxiliary 开头的为测试模块&#xff0c;也就是 POC&#xff0c;看看存不存在漏洞&#xff0c; exploit 开头的为攻击模块 3. 调…

DCMM(数据管理能力成熟度模型)对企业的价值

随着大数据时代的来临&#xff0c;数据已成为企业发展的重要驱动力。为了有效地管理和利用数据&#xff0c;企业需要建立一套完善的数据管理体系&#xff0c;而DCMM&#xff08;数据管理能力成熟度模型&#xff09;正是这样一个帮助企业构建和优化数据管理能力的框架。 DCMM结构…