引言
在本篇文章中,我们将介绍 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.xml
或 build.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 的设计旨在简化向量数据库的使用,使其成为机器学习和人工智能应用中的有力工具。