Milvus向量数据库操作的详细输入输出参数说明及示例

devtools/2025/3/14 10:59:09/

以下将详细介绍 Milvus 向量数据库中保存(插入)、删除、查询(querysearch)操作的输入输出参数,并给出代码示例。

环境准备

确保已经安装 pymilvus 库,若未安装,可使用以下命令:

pip install pymilvus

连接到 Milvus

from pymilvus import connections# 连接到 Milvus 服务
connections.connect(alias="default",host='localhost',port='19530'
)

1. 保存(插入)操作

输入参数说明
  • data
    • 类型:列表,列表中的每个元素对应集合中的一个字段的数据。
    • 说明:元素的顺序和类型需与集合定义中的字段一致。例如,如果集合有 idvectorname 三个字段,那么 data 列表可能是 [[id1, id2], [vector1, vector2], ["name1", "name2"]]
  • collection_name
    • 类型:字符串
    • 说明:要插入数据的集合名称。
  • partition_name(可选):
    • 类型:字符串
    • 说明:指定数据要插入的分区名称,如果不指定则插入到默认分区。
输出参数说明

返回一个 InsertResult 对象,包含以下字段:

  • primary_keys
    • 类型:列表
    • 说明:插入记录的主键值列表,可用于后续对这些记录的引用。
  • insert_count
    • 类型:整数
    • 说明:成功插入的记录数量。
代码示例
from pymilvus import Collection, FieldSchema, CollectionSchema, DataType
import random# 定义集合字段
fields = [FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=False),FieldSchema(name="vector", dtype=DataType.FLOAT_VECTOR, dim=128),FieldSchema(name="name", dtype=DataType.VARCHAR, max_length=64)
]# 创建集合模式
schema = CollectionSchema(fields=fields, description="Example collection")# 创建集合
collection = Collection(name="my_collection", schema=schema)# 准备插入的数据
ids = [1, 2]
vectors = [[random.random() for _ in range(128)] for _ in range(2)]
names = ["Alice", "Bob"]data = [ids,vectors,names
]# 插入数据
result = collection.insert(data)
print(f"插入记录的主键值列表: {result.primary_keys}")
print(f"成功插入的记录数量: {result.insert_count}")# 刷新集合以确保数据可见
collection.flush()

2. 删除操作

输入参数说明
  • expr
    • 类型:字符串
    • 说明:删除条件表达式,使用类似 SQL 的布尔表达式语法,用于指定要删除的记录。例如 "id == 1" 表示删除 id 为 1 的记录。
  • collection_name
    • 类型:字符串
    • 说明:要删除数据的集合名称。
  • partition_name(可选):
    • 类型:字符串
    • 说明:指定要在哪个分区执行删除操作,如果不指定则在整个集合中删除。
输出参数说明

返回一个 DeleteResult 对象,包含以下字段:

  • deleted_count
    • 类型:整数
    • 说明:成功删除的记录数量。
代码示例
# 定义删除条件
expr = "id == 1"# 删除符合条件的记录
result = collection.delete(expr)
print(f"成功删除的记录数量: {result.deleted_count}")# 刷新集合以确保删除操作生效
collection.flush()

3. 查询(query)操作

输入参数说明
  • expr
    • 类型:字符串
    • 说明:查询条件表达式,使用类似 SQL 的布尔表达式语法,用于筛选符合条件的记录。例如 "id > 0" 表示查询 id 大于 0 的记录。
  • output_fields
    • 类型:列表
    • 说明:指定要返回的字段名称列表。例如 ["id", "name"] 表示返回 idname 字段的值。
  • offset(可选):
    • 类型:整数
    • 说明:查询结果的偏移量,默认为 0。用于分页查询,例如 offset = 10 表示从第 10 条记录开始返回结果。
  • limit(可选):
    • 类型:整数
    • 说明:返回结果的最大数量,默认为无穷大。例如 limit = 10 表示最多返回 10 条记录。
  • collection_name
    • 类型:字符串
    • 说明:要查询数据的集合名称。
  • partition_names(可选):
    • 类型:列表
    • 说明:指定要在哪些分区进行查询,如果不指定则在整个集合中查询。
  • consistency_level(可选):
    • 类型:字符串
    • 说明:查询的一致性级别,默认为集合的默认一致性级别。常见的一致性级别有 "Strong""Bounded" 等。
输出参数说明

返回一个列表,列表中的每个元素是一个字典,字典的键为 output_fields 中指定的字段名,值为对应字段的值。例如:

[{"id": 1, "name": "Alice"},{"id": 2, "name": "Bob"}
]
代码示例
# 定义查询条件
expr = "id > 0"# 执行查询操作,指定返回的字段
results = collection.query(expr=expr,output_fields=["id", "name"]
)# 打印查询结果
for result in results:print(f"ID: {result['id']}, Name: {result['name']}")

4. 查询(search)操作

输入参数说明
  • data
    • 类型:列表
    • 说明:查询向量列表,每个向量的维度必须与集合中向量字段的维度一致。例如 [[0.1] * 128] 表示一个维度为 128 的查询向量。
  • anns_field
    • 类型:字符串
    • 说明:指定进行向量搜索的字段名。例如 "vector" 表示在 vector 字段上进行向量搜索。
  • param
    • 类型:字典
    • 说明:搜索参数,根据不同的索引类型有不同的参数设置。例如对于 HNSW 索引,可能包含 "M""efConstruction" 等参数;对于 IVF 索引,可能包含 "nlist""nprobe" 等参数。
  • limit
    • 类型:整数
    • 说明:指定返回的相似向量的最大数量。例如 limit = 10 表示返回最相似的 10 条记录。
  • expr(可选):
    • 类型:字符串
    • 说明:查询表达式,用于在向量搜索前对数据进行过滤。例如 "id > 0" 表示只在 id 大于 0 的记录中进行向量搜索。
  • output_fields(可选):
    • 类型:列表
    • 说明:指定需要返回的非向量字段名称列表。例如 ["id", "name"] 表示除了返回相似记录的距离和主键外,还返回 idname 字段的值。
  • collection_name
    • 类型:字符串
    • 说明:要查询数据的集合名称。
  • partition_names(可选):
    • 类型:列表
    • 说明:指定要在哪些分区进行搜索,如果不指定则在整个集合中搜索。
  • consistency_level(可选):
    • 类型:字符串
    • 说明:查询的一致性级别,默认为集合的默认一致性级别。
输出参数说明

返回一个列表,列表中的每个元素是一个 Hits 对象,Hits 对象包含以下字段:

  • ids
    • 类型:列表
    • 说明:相似记录的主键值列表。
  • distances
    • 类型:列表
    • 说明:查询向量与相似记录的距离值列表。
  • entities
    • 类型:列表
    • 说明:每个元素是一个字典,包含 output_fields 中指定的非向量字段的值。
代码示例
# 准备查询向量
query_vector = [[random.random() for _ in range(128)]]# 定义搜索参数
search_params = {"metric_type": "L2","params": {"nprobe": 10}
}# 执行搜索操作
results = collection.search(data=query_vector,anns_field="vector",param=search_params,limit=10,expr="id > 0",output_fields=["id", "name"]
)# 打印搜索结果
for hits in results:for i in range(len(hits.ids)):print(f"ID: {hits.ids[i]}, Distance: {hits.distances[i]}, Name: {hits.entities[i].get('name')}")

断开连接

# 断开与 Milvus 服务的连接
connections.disconnect("default")

通过以上详细的输入输出参数说明和代码示例,你可以在 Milvus 向量数据库中完成保存、删除、查询等操作。


http://www.ppmy.cn/devtools/167001.html

相关文章

pdf修改内容:分享5款好用的工具

pdf修改内容用什么软件?PDF内容修改工具的便捷性很大地提升了我们的工作效率。通过这些工具,我们可以轻松地对PDF文档进行文字编辑、图片替换、页面调整等操作,无需繁琐的转换步骤。这些修改工具不仅操作简便,而且功能强大&#x…

锂电池保护板测试仪:守护能源安全的科技卫士

在这个科技日新月异的时代,锂电池以其高能量密度、长循环寿命和环保特性,成为了便携式电子设备、电动汽车乃至储能系统不可或缺的能量源泉。然而,锂电池在带来便利的同时,其安全性问题也不容忽视。过充、过放、短路等异常情况&…

抖音生活服务联动监管开展专项整治 济南66家违规餐饮商家下架

为切实守护市民舌尖上的安全,近日,济南市历下区市场监管局联同抖音生活服务启动了网络食品安全专项整治行动。双方通过线上监测、线下检查,加强对网络订餐平台食品经营单位的全面监管,共同打造安心、可靠的餐饮消费环境。 政企携…

使用DeepSeek进行知识降维输出

大家好,我是吾鳴。 今天吾鳴要分享的内容是关于怎么样使用DeepSeek把一些很专业很深奥的知识输出成小学生都能很好理解的内容,这就是所谓的把知识进行降维之后输出。主要分为以下这几个关键步骤,让你使用DeepSeek秒懂专业术语,禁止…

【Linux】线程

文章目录 线程(Thread)1. 什么是线程? 创建线程多线程中的重入问题线程异常线程等待总结 线程(Thread) 1. 什么是线程? 线程是进程中的一个执行单元,它是 CPU 调度的基本单位。线程依赖于进程…

大型语言模型在工业应用中的局限性:事实性扩充与深入分析

大型语言模型在工业应用中的局限性:事实性扩充与深入分析 摘要 本文深入探讨了大型语言模型(LLMs)在工业应用中所面临的重大挑战,特别聚焦于其在机械图纸解读、可编程逻辑控制器(PLC)程序生成以及更广泛的…

数据类型与变量

目录 1、字面常量2、数据类型2.1、基本数据类型2.2、引用数据类型 3、变量3.1、整型变量3.2、浮点型变量3.3、字符型变量3.4、布尔型变量3.5、类型转换3.6、类型提升 1、字面常量 程序运行期间,固定不变的量是常量。 字母常量的分类: 字符串常量&#…

PostgreSQL存储管理体系结构学习笔记2

1.表和元组的组织方式 在PostgreSQL中,同一个表中的元组按照创建顺序依次插入到表文件中。元组之间不进行关联,这样的表文件称之为堆文件。PostgreSQL系统中包含了四种堆文件:普通堆,临时堆,序列,TOAST表。…