一架梯子,一头程序猿,仰望星空!
Milvus向量数据库教程 > 内容正文

PyMilvus 快速入门


本章介绍如何使用 Python 快速上手 Milvus开发。

通过运行我们提供的示例代码,您将对 Milvus 的功能有一个初步的了解。

版本要求

  • Milvus 2.3.0
  • Python 3 (3.7.1 或更高版本)
  • PyMilvus 2.3.x

安装 Milvus Python SDK

# 最新版本的pymilvus包,可以到https://pypi.org/project/pymilvus/ 官网查看
python3 -m pip install pymilvus==

下载示例代码

通过以下命令直接下载 hello_milvus.py 或者使用以下命令进行下载。

$ wget https://www.tizi365.com/storage/hello_milvus.py

示例代码解读

示例代码执行以下步骤。

  • 导入 PyMilvus 包:
from pymilvus import (
    connections,
    utility,
    FieldSchema,
    CollectionSchema,
    DataType,
    Collection,
)
  • 连接到服务器:
connections.connect("default", host="localhost", port="19530")
  • 创建集合:
fields = [
    FieldSchema(name="pk", dtype=DataType.INT64, is_primary=True, auto_id=False),
    FieldSchema(name="random", dtype=DataType.DOUBLE),
    FieldSchema(name="embeddings", dtype=DataType.FLOAT_VECTOR, dim=8)
]
schema = CollectionSchema(fields, "hello_milvus 是最简单的演示示例,用于介绍 API")
hello_milvus = Collection("hello_milvus", schema)
  • 在集合中插入向量:
import random
entities = [
    [i for i in range(3000)],  # 字段 pk
    [float(random.randrange(-20, -10)) for _ in range(3000)],  # 字段 random
    [[random.random() for _ in range(8)] for _ in range(3000)],  # 字段 embeddings
]
insert_result = hello_milvus.insert(entities)
hello_milvus.flush()
  • 在实体上创建索引:
index = {
    "index_type": "IVF_FLAT",
    "metric_type": "L2",
    "params": {"nlist": 128},
}
hello_milvus.create_index("embeddings", index)
  • 将集合加载到内存中并进行向量相似度搜索:
hello_milvus.load()
vectors_to_search = entities[-1][-2:]
search_params = {
    "metric_type": "L2",
    "params": {"nprobe": 10},
}
result = hello_milvus.search(vectors_to_search, "embeddings", search_params, limit=3, output_fields=["random"])
  • 进行向量查询:
result = hello_milvus.query(expr="random > -14", output_fields=["random", "embeddings"])
  • 执行混合搜索:
result = hello_milvus.search(vectors_to_search, "embeddings", search_params, limit=3, expr="random > -12", output_fields=["random"])
  • 根据主键删除实体:
expr = f"pk in [{entities[0][0]}, {entities[0][1]}]"
hello_milvus.delete(expr)
  • 删除集合:
utility.drop_collection("hello_milvus")

运行示例代码

执行以下命令来运行示例代码。

$ python3 hello_milvus.py

下面展示了返回的结果和查询延迟:

=== 开始连接到 Milvus ===

Milvus 中是否存在名为 hello_milvus 的collection:False

=== 创建 collection `hello_milvus` ===


=== 开始插入实体 ===

Milvus 中的实体数量:3000

=== 开始创建索引 IVF_FLAT ===


=== 开始加载 ===


=== 基于向量相似性开始搜索 ===

命中:(距离:0.0,id:2998),随机字段:-11.0
命中:(距离:0.11455299705266953,id:1581),随机字段:-18.0
命中:(距离:0.1232629269361496,id:2647),随机字段:-13.0
命中:(距离:0.0,id:2999),随机字段:-11.0
命中:(距离:0.10560893267393112,id:2430),随机字段:-18.0
命中:(距离:0.13938161730766296,id:377),随机字段:-14.0
搜索延迟 = 0.2796秒

=== 使用 `random > -14` 进行查询 ===

查询结果:
-{'pk': 9, 'random': -13.0, 'embeddings': [0.298433, 0.931987, 0.949756, 0.598713, 0.290125, 0.094323, 0.064444, 0.306993]}
搜索延迟 = 0.2970秒

=== 使用 `random > -12` 进行混合搜索 ===

命中:(距离:0.0,id:2998),随机字段:-11.0
命中:(距离:0.15773043036460876,id:472),随机字段:-11.0
命中:(距离:0.3273330628871918,id:2146),随机字段:-11.0
命中:(距离:0.0,id:2999),随机字段:-11.0
命中:(距离:0.15844076871871948,id:2218),随机字段:-11.0
命中:(距离:0.1622171700000763,id:1403),随机字段:-11.0
搜索延迟 = 0.3028秒

=== 使用表达式 `pk in [0, 1]` 进行删除 ===

删除前根据表达式 `pk in [0, 1]` 进行查询 -> 结果:
-{'pk': 0, 'random': -18.0, 'embeddings': [0.142279, 0.414248, 0.378628, 0.971863, 0.535941, 0.107011, 0.207052, 0.98182]}
-{'pk': 1, 'random': -15.0, 'embeddings': [0.57512, 0.358512, 0.439131, 0.862369, 0.083284, 0.294493, 0.004961, 0.180082]}

删除后根据表达式 `pk in [0, 1]` 进行查询 -> 结果: []

=== 删除 collection `hello_milvus` ===


关联主题