当前位置: 首页 > 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;赋予了程序员在自定义类…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中&#xff0c;合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号&#xff1f; 最小权限原则&#xf…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

给网站添加live2d看板娘

给网站添加live2d看板娘 参考文献&#xff1a; stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下&#xff0c;文章也主…...

MySQL 主从同步异常处理

阅读原文&#xff1a;https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主&#xff0c;遇到的这个错误&#xff1a; Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一&#xff0c;通常表示&#xff…...