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 的设计旨在简化向量数据库的使用,使其成为机器学习和人工智能应用中的有力工具。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何组织 Vue 项目

介绍 在启动 Vue 项目时,思考项目结构至关重要。主要考虑因素是预期项目的规模。在本篇博文中,我将探讨适用于不同规模 Vue 项目的各种结构。这个考虑与康威定律相吻合: “设计系统的组织受限于产生这些组织沟通结构的设计。” - 梅尔康威 基…

C语言之指针初阶

目录 前言 一、内存与地址的关系 二、指针变量 三、野指针 四、const 五、传值调用与传址调用 总结 前言 本文主要介绍C语言指针的一些基础知识,为后面深入理解指针打下基础,因此本文内容主要包括内存与地址的关系,指针的基本语法&…

WebRTC实时音视频通话之语音通话设计与实践

一、背景 在移动互联网流量时代,很多业务场景都有音视频通信的需求,比如IM场景,除了文字交流还需要音视频通话进行实时交互。为了帮助58、赶集、安居客等业务线更好的为用户提供服务,节约沟通成本,提升效率&#xff0…

【Linux】19. 习题②

2022-11-12_Linux环境变量 1. 分页存储(了解) 一个分页存储管理系统中,地址长度为 32 位,其中页号占 8 位,则页表长度是__。 A.2的8次方 B.2的16次方 C.2的24次方 D.2的32次方 【答案解析】A 页号即页表项的序号,总共占8个二进制…

STM32的FLASH学习笔记

不同型号的 STM32,其 FLASH 容量也有所不同,最小的只有 16K 字节,最大的则达到了1024K 字节。大容量产品的闪存模块组织如图所示: STM32 的闪存模块由:主存储器、信息块和闪存存储器接口寄存器等 3 部分组成。 ​ ①主…

Java环境搭建(二)Notepad++和IDEA的下载

Notepad(不推荐使用) 高级记事本 下载地址 Notepad (juxinwk1.cn) 下载安装后一直下一步就可以了 注:改一下路径还有建立快捷方式(自己选择) IDEA 集成环境 下载地址 IntelliJ IDEA – the Leading Java and Kotl…

React 第三十二章 虚拟DOM

面试题:什么是虚拟DOM?其优点有哪些? 标准且浅显的答案 虚拟dom本质上就是一个普通的 JS 对象,用于描述视图的界面结构 虚拟 DOM 最早是由 React 团队提出来的,因此 React 团队在对虚拟 DOM 的定义上面有绝对的话语权。…

若依-生成主子表

1. sql语句建表导入到数据库中: -- ---------------------------- -- Table structure for t_ques————主表 -- ----------------------------CREATE TABLE ques (ques_id INT NOT NULL AUTO_INCREMENT COMMENT Id,name VARCHAR(255) NOT NULL COMMENT 测评名称…

未授权访问:Rsync 未授权访问漏洞

目录 1、漏洞原理 2、环境搭建 3、未授权访问 4、利用rsync下载任意文件 5、利用rsync反弹shell 防御手段 今天继续学习各种未授权访问的知识和相关的实操实验,一共有好多篇,内容主要是参考先知社区的一位大佬的关于未授权访问的好文章&#xff0c…

ApiHug - 闭门造车, 出门合辙

🤗 ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱,有温度,有质量,有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace The Nex…

RocketMQ:新增consumer消费组group从最新消息开始消费skip last offset message

场景 想创建一个新的consumer去消费一个已经再使用的topic时,默认情况下会从topic中的第一条消息开始消费,大多数情况是需要从最新的消息开始。然后再使用CONSUME_FROM_LAST_OFFSET设置时并不会对新的consumer生效,它只是在停用consumer重新启…

MySQL单表查询案例演示

目录 一、创建数据库lianxi 二、选择数据库为lianxi 三、新建一个数据表grade,在grade表中插入数据 四、开始进行查询操作(验证表中数据) 1、查询1945班的成绩信息 2、查询1945班,语文成绩大于60小于90的成绩信息 3、查询学…

优雅谈论大模型8:神经网络与矩阵

向量与矩阵 上个章节的神经网络是为了解Transformer或者Mamba做好铺垫,在和后辈交流过程中发现有个障碍,那就是向量和矩阵。其实向量和矩阵的表达方式不是所有人都很习惯。在继续下面的章节之前小编认为有必要将向量、矩阵和神经网络做下补充解释。 向…

18.双线性插值缩放算法的matlab与FPGA实现

一篇文章为你讲透双线性插值 简介 1.什么是插值 图片放大是图像处理中的一个特别基础的操作。几乎在每一个图片相关的项目中,从传统图像处理到i深度学习,都有应用。   简单来说,插值指利用已知的点来“猜”未知的点,图像领域插…

华为OD机试【分奖金】(java)(100分)

1、题目描述 公司老板做了一笔大生意,想要给每位员工分配一些奖金,想通过游戏的方式来决定每个人分多少钱。按照员工的工号顺序,每个人随机抽取一个数字。按照工号的顺序往后排列,遇到第一个数字比自己数字大的,那么&…

【class9】人工智能初步(处理单张图片)

Class9的任务:处理单张图像 为了更高效地学习,我们将“处理单张图像”拆分成以下几步完成: 1. 读取图像文件 2. 调用通用物体识别 3. 提取图像分类信息 4. 对应分类文件夹还未创建时,创建文件夹 5. 移动图像到对应文件夹 0.获取…

Ubuntu 安装 eclipse 的详细过程及工程创建和编译配置

目录 一、安装环境二、下载依赖 java jdk三、下载 eclipse四、安装4.1 java 环境4.2 eclipse 安装4.3 打开 eclipse 五、配置 eclipse5.1 新建 C 工程5.2 工具链 配置5.3 头文件路径5.4 链接库5.5 编译 一、安装环境 Ubuntu 版本:22.04.3 位数:64-bit 二…

记录一次 vue2 前端项目整合过程

整合成功效果图 具体说明: 项目A是现在的vue2前端项目,项目B是一个开源的工作流前端,项目后端代码已经整合了,就不多提了。这里主要记录下前端整合的过程和思路。 1、开源工作流里面的功能,拷贝到自己对应的vue2项目里…

大模型MoE技术深度解读,引领AI走向新高度

大模型系列之解读MoE Mixtral 8x7B的亮相,引领我们深入探索MoE大模型架构的奥秘。MoE究竟是什么?一起揭开它的神秘面纱。 1. MoE溯源 MoE,源自1991年的研究论文《Adaptive Mixture of Local Experts》,与集成学习方法相契合&…

机器学习笔记 KAN网络架构简述(Kolmogorov-Arnold Networks)

一、简述 在最近的研究中,出现了号称传统多层感知器 (MLP) 的突破性替代方案,重塑了人工神经网络 (ANN) 的格局。这种创新架构被称为柯尔莫哥洛夫-阿诺德网络 (KAN),它提出了一种受柯尔莫哥洛夫-阿诺德表示定理启发的函数逼近的方法。 与 MLP 不同,MLP 依赖于各个节…