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

发布于:2025-03-16 ⋅ 阅读:(19) ⋅ 点赞:(0)

以下将详细介绍 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 向量数据库中完成保存、删除、查询等操作。


网站公告

今日签到

点亮在社区的每一天
去签到