当前位置: 首页 > news >正文

2.创建Collection、添加索引、加载内存、预览和搜索数据

milvus官方文档

milvus2.3.1的官方文档地址: https://milvus.io/docs/v2.3.x

使用attu创建collection

collection必须要有一个主键字段、向量字段

确保字段类型与索引类型兼容

字符串类型(VARCHAR)通常需要使用 Trie 索引,而不是 AutoIndex

使用代码连接milvus数据库,创建collection结构,并插入数据

import uuid

import numpy as np

from pymilvus import(
    connections,
    FieldSchema, CollectionSchema, DataType,
    Collection,
)

collection_name = "first_milvus"
host = "192.168.171.130"
port = 19530
username = ""
password = ""
num_entities, dim = 1000, 128
total_num = 3000


def generate_uuids(number_of_uuids):
    # uuid.uuid4() 产生随机数
    # str(uuid.uuid4()) 将随机数转成str
    # _ in range(number_of_uuids) 产生多少个_(占位符),存放随机数,组成一个list
    uuids = [str(uuid.uuid4()) for _ in range(number_of_uuids)]
    return uuids


print("start connecting to milvus")
connections.connect("default", host=host, port=port, user=username, password=password)

fields = [
    FieldSchema(name="pk", dtype=DataType.INT64, is_primary=True, auto_id=False),
    FieldSchema(name="random", dtype=DataType.DOUBLE),
    FieldSchema(name="comment", dtype=DataType.VARCHAR, max_length=200),
    FieldSchema(name="embeddings", dtype=DataType.FLOAT_VECTOR, dim=dim)
]

schema = CollectionSchema(fields, "first_milvus is the simplest demo to introduce the APIS")
coll = Collection(collection_name, schema, consistency_level="Bounded", shards_num=1)
# seed=19530 设置了随机数生成器的种子,确保每次运行代码时生成的随机数序列是相同的(可重复性)。
rng = np.random.default_rng(seed=19530)

# entities = [
#     [0, 1, 2],  # 实体 ID
#     [0.123, 0.456, 0.789],  # 随机属性
#     ['uuid1', 'uuid2', 'uuid3'],  # UUID
#     [[0.123, 0.456], [0.789, 0.012], [0.345, 0.678]],  # 特征向量
# ]

entities = [
    # 生成一个从 0 到 num_entities - 1 的整数列表
    [i for i in range(num_entities)],
    # 随机数生成器 rng 生成 num_entities 个随机浮点数,范围在 [0, 1) 之间
    # tolist() 将 NumPy 数组转换为 Python 列表
    # 如果 num_entities = 3,可能生成 [0.123, 0.456, 0.789]
    rng.random(num_entities).tolist(),
    # 生成一个包含 num_entities 个 UUID 字符串的列表, 列表可能用于为每个实体分配一个全局唯一的标识符
    generate_uuids(num_entities),
    # 使用随机数生成器 rng 生成一个形状为 (num_entities, dim) 的二维 NumPy 数组
    # num_entities表示二维数组中有几个数组,dim表示第二层数组里面有几个元素
    rng.random((num_entities, dim)),
]
insert_result = coll.insert(entities)
coll.flush()
print("done")


向量字段上创建索引

向量字段上创建索引才能load进内存。

如果数据量大的情况,创建索引的过程需要花费一定的时间。

索引加载到内存

将索引加载到内存中

预览查看数据

collection加载到内存之后,就可以预览和查看数据了。

向量搜索

向量字段就一个,可以自动判断是哪一个字段为向量字段

随机搜索:随机生成一个向量字段的值进行查询。

精确搜索:到预览数据界面找出一条数据,拷贝向量字段的值进行查询。

可以看出pk为3的记录匹配度最高。

score=0表示完全匹配的数据。

总结:milvus中所有的搜索和查询都在内存中执行,所以只有加载的Collection才可以被搜索,要加载到内存需要给向量字段创建索引。

相关文章:

  • 【动态规划】按摩师
  • 蓝桥杯嵌入式备赛记录—CubeMX配置
  • 传统行业的思维惯性之困:评论列表
  • Linux系统中Crontab的用法详解
  • 深入理解 JVM 的垃圾收集器:CMS、G1、ZGC
  • 二叉树的学习
  • Altium Designer数模电学习笔记
  • 2025-03-23 吴恩达机器学习3——多维特征
  • Dubbo SPI 加载逻辑
  • GEO与AISEO的关系解析:核心差异与协同逻辑
  • WebLogic漏洞再现
  • 算法基础篇(1)(蓝桥杯常考点)
  • Java多线程与高并发专题——使用 Future 有哪些注意点?Future 产生新的线程了吗?
  • python解决多个矢量点图层合并为一个点图层
  • Jackson的核心类与API方法:ObjectMapper、JsonNode、ObjectNode、ArrayNode
  • Mongodb分片模式部署
  • 基于HTML的邮件发送状态查询界面设计示例
  • centos7 下haproxy+keepalived 搭建高可用服务器
  • 软件版本号制定方法
  • 蓝桥杯C++基础算法-多重背包
  • 美国新泽西客运公司遭遇罢工:40年来首次,35万人受影响
  • 官方通报汕头违建豪宅“英之园”将强拆:对有关人员严肃追责问责
  • 浙江演艺集团7部作品组团来沪,今夏开启首届上海演出季
  • 女子七年后才知银行卡被盗刷18万元,警方抓获其前男友
  • 车主质疑零跑汽车撞车后AEB未触发、气囊未弹出,4S店:其把油门当刹车
  • 证券时报:中美互降关税落地,订单集中补发港口将迎高峰期