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

Milvus向量数据库基础用法及注意细节

1、Milvus数据类型与python对应的数据类型

Milvus

Python

DataType.INT64

numpy.int64

DataType.INT32

numpy.int32

DataType.INT16

numpy.int16

DataType.BOOL

Boolean

DataType.FLOAT

numpy.float32

DataType.DOUBLE

numpy.double

DataType.ARRAY

list

DataType.VARCHAR

str

DataType.JSON

dict

FLOAT_VECTOR(浮点数向量)

numpy.ndarray or list (元素为numpy.float)

2、python创建集合->构建索引->发布步骤

(1)连接向量数据库:

from pymilvus import connections,db
connections.connect("default",host="localhost",prot="19530")

(2)删除现有集合:

from pymilvus import utility
utility.drop_collection('ITEM_INFO')

(3)字段常用数据类型创建:

from pymilvus import FieldSchema, DataType
# 创建数据类型为INT64的主键,且主键ID自动递增
ID_col = FieldSchema(name="ID",dtype=DataType.INT64,is_primary=True,description='主键、序号',auto_id=True)
# 创建一个768维的浮点向量
vec_col = FieldSchema(name="itemVec",dtype=DataType.FLOAT_VECTOR,dim=768,description = '向量')
# 创建一个长度128维的字符串
name_col = FieldSchema(name = 'itemName',dtype = DataType.VARCHAR,max_length = 128,description = '商品名称')
# 创建double类型的浮点数
price_col = FieldSchema(name = 'itemPrice',dtype = DataType.DOUBLE,description = '价格')
# 创建json格式的字段
keywords_col = FieldSchema(name = 'keywords',dtype = DataType.JSON)

(4)创建集合

from pymilvus import CollectionSchema, Collection, connections
# 集合所包含的字段
schema = CollectionSchema(fields=[ID_col,vec_col,name_col,price_col,keywords_col],description="商品信息表",enable_dynamic_field=True
)
# 集合名称
collection_name = "GOODS_INFO"
# 构建集合后断开连接
collection = Collection(name=collection_name,schema=schema,using='default',shards_num=2)
connections.disconnect("default")

(5)构建索引

Milvus中构建索引的数据量最小为1024满足2的幂次方数据量不满1024时必须使用1024构建索引。

from pymilvus import Collection
# 连接集合
collection = Collection("GOODS_INFO")  
# 构建索引所需的参数
index_params = {"metric_type":"L2","index_type":"IVF_FLAT","params":{"nlist":1024}
}
# 在向量上构建索引
collection.create_index(field_name="itemVec", index_params=index_params)

(6)发布集合

from pymilvus import Collection, utility, connections
# 连接集合
collection = Collection("GOODS_INFO")      
# 发布集合
collection.load()
# 检查集合上线状态
utility.load_state("GOODS_INFO")
# 断开与向量数据库的连接
connections.disconnect('default')

3、条件过滤

1、假设集合中有一字段A的数据类型为整型或浮点型,则可以

expr = 'A > 0 && A <= 10'

2、假设集合中有一字段A为任意数据类型,则可以

# a,b,c,d为任意数据类型,可与A相同或不同
expr = 'A in [a,b,c,d]'
expr = 'A not in [a,b,c,d]'

3、假设集合中有一字段A为字符类型,则可以 # 在条件过滤中字符串要添加引号确定

# 在条件过滤中字符串要添加引号确定
expr = "A == 'Hello World!'"

4、假设集合中有一字段A为字符类型,则可以

# 从A开头为123的向量中进行向量检索,目前milvus只支持字符前缀匹配,不支持'1%23'或'%123'
expr = "A like '123%'"

5、假设集合中有一字段A为json类型,则可以

# A = {"x": [1,2,3]}
expr = 'json_contains(A["x"], 1)' # ==> true
expr = 'json_contains(A["x"], "a")' # ==> false# A = {"x": [[1,2,3], [4,5,6], [7,8,9]]}
expr = 'json_contains(A["x"], [1,2,3])' # ==> true
expr = 'json_contains(A["x"], [3,2,1])' # ==> false# A = {"x": [1,2,3,4,5,7,8]}
expr = 'json_contains_all(A["x"], [1,2,8])' # ==> true
expr = 'json_contains_all(A["x"], [4,5,6])' # ==> false 6 is not exists# A = {"x": [1,2,3,4,5,7,8]}
expr = 'json_contains_any(A["x"], [1,2,8])' # ==> true
expr = 'json_contains_any(A["x"], [4,5,6])' # ==> true
expr = 'json_contains_any(A["x"], [6,9])' # ==> false

6、假设集合中有一字段A为list类型,则可以

# 该方法为上述方法2、的逆方法
# A: [1,2,3]
expr = 'array_contains(A, 1)' # ==> true
expr = 'array_contains(A, "a")' # ==> false# A: [1,2,3,4,5,7,8]
expr = 'array_contains_all(A, [1,2,8])' # ==> true
expr = 'array_contains_all(A, [4,5,6])' # ==> false 6 is not exists# A: [1,2,3,4,5,7,8]
expr = 'array_contains_any(A, [1,2,8])' # ==> true
expr = 'array_contains_any(A, [4,5,6])' # ==> true
expr = 'array_contains_any(A, [6,9])' # ==> false# A: [1,2,3,4,5,7,8]
expr = 'array_length(int_array) == 7' # ==> true

假设有一集合,集合当中包含V、A、B、C四个字段:

V:浮点向量

A:向量的字符表达形式

B:A的属性1

C:A的属性2

现有一查询向量S、过滤条件E1和过滤条件E2(E1、E2均为列表),集合需要返回S与V相似度最高,且B包含于E1、C包含于E2的字符名称A。如果采用上述1、2、3、4方法中较基础的数据类型存表会导致查询速度和代码复杂度都较高。假设E1 = [1,2,3],E2 = [4,5,6],则对于同一条向量,需要做3 x 3 = 9次过滤。若使用5、6方法中的数据类型存表则可以将过滤次数降为2次。

例如

# B和C为字符串类型
expr = '(1 in B && 4 in C) or (1 in B && 5 in C) or (1 in B && 6 in C) ...'# B和C为keywords中的元素,keywords为json格式
expr = "json_contains_any(keywords['B'], E1) && json_contains_any(keywords['C'], E2)"# B和C均为列表
expr = "array_contains_any(B, E1) && json_contains_any(C, E2)"

4、查询

from pymilvus import Collection, connections# 连接数据库,连接集合,将集合数据上传至内存
connections.connect("default",host="localhost",prot="19530")
knowledge = Collection('GOODS_INFO', using='default')
knowledge.load()# 查询参数
search_params = {"metric_type": "L2","offset": 0,"ignore_growing": False,"params": {"nprobe": 10,# "radius": 10,  # 对于L2,返回距离在[5,10)之间的向量# "range_filter": 5.0  # 对于IP,返回相似度在(0.8,1]之间的向量}
}# 进行向量查询
results = knowledge.search(data=query,				#带查询向量anns_field='itemVec',	#表中向量字段名称param=search_params,	#查询参数limit=5,				#返回数量expr=expr,				#过滤条件,expr = None或''时,默认为不使用条件过滤output_fields=['itemName', 'itemPrice', 'keywords']	#返回的字段名称)# 断开数据库连接
connections.remove_connection('default')

5、参考资料

Create a Collection Milvus documentation

相关文章:

Milvus向量数据库基础用法及注意细节

1、Milvus数据类型与python对应的数据类型 Milvus Python DataType.INT64 numpy.int64 DataType.INT32 numpy.int32 DataType.INT16 numpy.int16 DataType.BOOL Boolean DataType.FLOAT numpy.float32 DataType.DOUBLE numpy.double DataType.ARRAY list DataT…...

虚拟机多开怎么设置不同IP?虚拟机设置独立IP的技巧

随着虚拟化技术的不断发展&#xff0c;虚拟机已经成为了许多人的必备工具。在虚拟机中&#xff0c;我们可以轻松地创建多个虚拟机&#xff0c;并在每个虚拟机中设置不同的IP地址。下面&#xff0c;我们将介绍如何在虚拟机中设置独立IP地址的方法。 一、虚拟机多开设置不同IP的方…...

使用Docker-镜像命令

镜像名称一般分两部分组成:[repository]:[tag] 在没有指定tag时&#xff0c;默认是latest&#xff0c;代表最新版本的镜像 目录 案例一&#xff1a;从DockerHub中拉取一个nginx镜像并查看 1.1. 首先去镜像仓库搜索nginx镜像&#xff0c;比如DockerHub ​编辑 1.2.操作拉取n…...

4.3 C++对象模型和this指针

4.3 C对象模型和this指针 4.3.1 成员变量和成员函数分开存储 在C中&#xff0c;类内的成员变量和成员函数分开存储 只有非静态成员变量才属于类的对象上 #include <iostream>class Person { public:Person() {mA 0;} //非静态成员变量占对象空间int mA;//静态成员变量…...

计算机网络——计算机网络的概述(一)

前言&#xff1a; 面对马上的期末考试&#xff0c;也为了以后找工作&#xff0c;需要掌握更多的知识&#xff0c;而且我们现实生活中也已经离不开计算机&#xff0c;更离不开计算机网络&#xff0c;今天开始我们就对计算机网络的知识进行一个简单的学习与记录。 目录 一、什么…...

基于多反应堆的高并发服务器【C/C++/Reactor】(中)ChannelMap 模块的实现

&#xff08;三&#xff09;ChannelMap 模块的实现 这个模块其实就是为Channel来服务的&#xff0c;前面讲了Channel这个结构体里边它封装了文件描述符。假如说我们得到了某一个文件描述符&#xff0c;需要基于这个文件描述符进行它对应的事件处理&#xff0c;那怎么办呢&…...

微信小程序实现一个音乐播放器的功能

微信小程序实现一个音乐播放器的功能 要求代码实现wxml 文件wxss 文件js文件 解析 要求 1.页面包含一个音乐列表&#xff0c;点击列表中的音乐可以播放对应的音乐。 2.播放中的音乐在列表中有标识&#xff0c;并且可以暂停或继续播放。 3.显示当前音乐的播放进度和总时长&#…...

算法基础之表达整数的奇怪方式

表达整数的奇怪方式 中国剩余定理: 求M 所有m之积 然后Mi M / mi x 如下图 满足要求 扩展中国剩余定理 找到x **使得x mod mi ai**成立 对于每两个式子 都可以推出①式 即 用扩展欧几里得算法 可以算出k1,-k2和m2–m1 判无解 : 若**(m2–m1) % d ! 0** 说明该等式无解 …...

WEB 3D技术 three.js 设置图像随窗口大小变化而变化

本文 我们来讲讲我们图层适应窗口变化的效果 可能这样说有点笼统 那么 自适应应该大家更熟悉 就是 当我们窗口发生变化说 做一些界面调整比例 例如 我们这样一个i项目界面 我们打开 F12 明显有一部分被挡住了 那么 我们可以刷新 这样是正常了 但是 我们将F12关掉 给F12的…...

实战案例:缓存不一致问题的解决(redis+本地缓存caffine)

一.问题引入 目前在写项目的时候&#xff0c;在B端查看文章&#xff0c;A端修改文章。为了增加效率&#xff0c;以及防止堆内存溢出&#xff0c;在B端选择本地缓存文章的方案。但是目前出现了A端对文章修改之后&#xff0c;B端读的还是旧数据&#xff0c;出现了缓存不一致的问…...

【开源CDP】市场增长未来的探索,开源CDP带来的技术崛起与变革

数字化趋势之下&#xff0c;数据成了企业竞争的核心资源&#xff0c;不管是公域还是私域&#xff0c;网络俨然成了品牌打响市场的一线战场&#xff0c;然而&#xff0c;在这场数字战役里&#xff0c;许多企业不得不面临一个共同问题&#xff1a;数据零散、分散、平台众多、无法…...

第11章 GUI Page423~424 步骤六 支持文字,使用菜单,对话框输入文字

运行效果&#xff1a; 点击OK&#xff0c;然后再窗口上按住左键&#xff0c;拖动鼠标 关键代码&#xff1a; 新增头文件和成员&#xff0c;新增私有成员_text 成员初始化 为菜单项MenuItemText添加响应函数 新增创建TextItem()的代码...

【Qt】Qt Creator 警告: Unused parameter ‘xxx‘

1. 问题 Qt开发中&#xff0c;有些函数参数没有使用&#xff0c;会报Unused parameter xxx警告&#xff0c;这个警告不影响代码正常运行。 2. 屏蔽这个警告的方法 2.1 方法1 函数中添加 Q_UNUSED(arg); TestClass::TestClass(QObject *parent) {Q_UNUSED(parent); }2.2 方…...

「Vue3面试系列」Vue3.0性能提升主要是通过哪几方面体现的?

文章目录 一、编译阶段diff算法优化静态提升事件监听缓存SSR优化 二、源码体积三、响应式系统参考文献 一、编译阶段 回顾Vue2&#xff0c;我们知道每个组件实例都对应一个 watcher 实例&#xff0c;它会在组件渲染的过程中把用到的数据property记录为依赖&#xff0c;当依赖发…...

网络结构模式

一、C/S结构 服务器 - 客户机&#xff0c;即 Client - Server &#xff08; C/S &#xff09;结构。 C/S 结构通常采取两层结构。服务器负责数据的 管理&#xff0c;客户机负责完成与用户的交互任务。客户机是因特网上访问别人信息的机器&#xff0c;服务器则是提 供信息供人…...

IIC及OLED实验

I2C (Inter-Integrated Circuit): I2C 是一种用于在芯片之间进行短距离数字通信的串行通信协议。它允许多个设备通过两根导线&#xff08;一根数据线 SDA 和一根时钟线 SCL&#xff09;进行通信。I2C 常常用于嵌入式系统中连接传感器、存储器、显示屏和其他外设。 数据线和时钟…...

day6 力扣公共前缀--go实现---对字符串的一些思考

今日份知识&#xff1a; curl -x 指定方法名 请求的url -d 请求体body里面的内容 //curl命令 curl -x Get 127.0.0.1:8080/add/user -d jinlicurl如果不指定方法&#xff0c;默认使用get方法&#xff0c;在go里面&#xff0c;get方法到底可以不可以把内容数据写在body里面传…...

27.Java程序设计-基于Springboot的在线考试系统小程序设计与实现

1. 引言 随着数字化教育的发展&#xff0c;在线考试系统成为教育领域的一项重要工具。本论文旨在介绍一个基于Spring Boot框架的在线考试系统小程序的设计与实现。在线考试系统的开发旨在提高考试的效率&#xff0c;简化管理流程&#xff0c;并提供更好的用户体验。 2. 系统设…...

Redis可视化工具Redis Desktop Manager mac功能特色

Redis Desktop Manager mac是一款非常实用的Redis可视化工具。RDM支持SSL / TLS加密&#xff0c;SSH隧道&#xff0c;基于SSH隧道的TLS&#xff0c;为您提供了一个易于使用的GUI&#xff0c;可以访问您的Redis数据库并执行一些基本操作&#xff1a;将键视为树&#xff0c;CRUD键…...

【C++】揭开运算符重载的神秘面纱

目录 一、引言 优点 二、介绍 1.定义 2.语法 三、示例 1.加法运算符重载 2.一元运算符重载 3.友元函数 4.流插入和流提取 5.自增自减运算符 总结 一、引言 何为运算符重载&#xff1f;运算符重载&#xff0c;是C中的一项强大特性&#xff0c;赋予了程序员在自定义类…...

ComfyUI Impact Pack避坑指南:解决人脸精修中的五大常见问题(含SAM边缘优化技巧)

ComfyUI Impact Pack人脸精修实战&#xff1a;从参数调优到工业级解决方案 当你第一次用Impact Pack完成人脸修复时&#xff0c;那种"一键磨皮"的惊艳感可能很快会被各种技术细节打破。我见过太多案例——原本期待影视级精修效果&#xff0c;结果得到的却是塑料感十足…...

Android应用重打包检测:从Manifest标记到代码相似性分析

1. Android应用重打包现象解析 第一次发现自己的应用被人重打包是在2018年。当时我们团队开发的一款工具类应用突然收到大量用户投诉&#xff0c;说应用会弹出奇怪的广告。排查后发现&#xff0c;有人把我们的APK解包后植入广告SDK又重新打包上传到了第三方市场。这种"重打…...

医学图像配准新突破:Prob-VoxelMorph如何用微分同胚性避免形变重叠?

医学图像配准新突破&#xff1a;Prob-VoxelMorph如何用微分同胚性避免形变重叠&#xff1f; 在医学影像分析领域&#xff0c;图像配准技术一直是支撑精准诊断和治疗规划的核心支柱。想象一下&#xff0c;当医生需要比较患者不同时间点的脑部扫描结果时&#xff0c;或是将功能MR…...

LLM之RAG实战(四十九)| AutoRAG进阶:如何通过自动化评估与优化打造高效RAG pipeline

1. AutoRAG进阶实战&#xff1a;自动化评估的核心逻辑 第一次接触AutoRAG时&#xff0c;我被它"自动优化RAG pipeline"的宣传吸引&#xff0c;但真正用起来才发现&#xff0c;这工具最厉害的地方在于它的自动化评估体系。就像汽车工厂的质检流水线&#xff0c;它能同…...

第34届古镇灯博会:灯卖全国却装不上?奇兵到家380万+师傅救急了

第34届中国古镇国际灯饰博览会启幕之际&#xff0c;数千家灯饰企业齐聚“中国灯饰之都”&#xff0c;共探智能照明与产业创新趋势。然而&#xff0c;在璀璨的灯光背后&#xff0c;一个长期困扰行业的痛点正日益凸显&#xff1a;灯饰产品如何实现全国范围内的专业安装与售后服务…...

Linux 命令:ldconfig —— 动态链接库管理命令

本文详细讲解 Linux 动态链接库管理命令 ldconfig&#xff0c;包含命令简介、语法、选项、示例及注意事项&#xff0c;适用于安装共享库、解决库找不到问题等场景。1. 命令简介ldconfig 是一个用于管理动态链接库&#xff08;共享库&#xff09;的 Linux 系统命令。它的主要功能…...

ros2简单的案例,一个节点采集图片,一个节点推理

先说一下为什么要学ros2&#xff0c;&#xff1a;首先他的通信非常快,而且可以多语言编程。比如说&#xff0c;如果要采集一张&#xff0c;然后多个模型推理&#xff0c;然后结果汇总&#xff0c;如果就单纯的用python的多线程&#xff0c;多进程&#xff0c;不仅速度慢&#x…...

‌VR驾驶模拟器|智能座舱人机交互实验设备

‌VR驾驶模拟器或‌智能座舱人机交互实验设备‌是高校科研、车企研发及智慧交通测试中的核心仿真平台&#xff0c;具备高精度环境模拟、多模态数据采集和可扩展接口等特性&#xff0c;它不仅能复现真实路况的每一个细节&#xff0c;更能精准捕捉驾驶员的每一次决策&#xff0c;…...

SPI子系统源码剖析--(2)Spi_Master驱动框架

1. spi_masterspi_master对应spi控制器&#xff0c;是对引脚的管理&#xff0c;同时可以通过cs引脚选择从设备发送消息2. SPI传输概述1.1 数据组织方式使用SPI传输时&#xff0c;最小的传输单位是"spi_transfer"&#xff0c;对于一个设备&#xff0c;可以发起多个spi…...

OBS Studio硬件编码全攻略:NVIDIA/AMD/Intel显卡在Ubuntu 24.04下的最佳配置

OBS Studio硬件编码全攻略&#xff1a;NVIDIA/AMD/Intel显卡在Ubuntu 24.04下的最佳配置 在内容创作领域&#xff0c;视频录制的流畅度和画质直接影响最终作品的专业度。对于Ubuntu用户而言&#xff0c;OBS Studio作为开源录制工具虽功能强大&#xff0c;但默认设置往往无法充分…...