Milvus 核心设计(5)--- scalar indexwork mechanism

目录

背景

Scalar index 简介

属性过滤

扫描数据段

相似性搜索

返回结果

举例说明

1. 属性过滤

2. 扫描数据段

3. 相似性搜索

实际应用中的考虑

Scalar Index 方式

Auto indexing 

Inverted indexing


背景

继续Milvus的很细设计,前面主要阐述了Milvus 在 vector simalairity 上的处理策略及index 方式。今天主要讲下scalar index。应该说对于所有的 db 实现,scalar index 都是需要的,无论是否是 关系型数据库,还是是否采用 k-v 存储等模式,有的东西是触类旁通的。Milvus 在处理scalar index 时,并不是孤立处理,而是结合了 bitset 提前过滤 + vector similarity 共同应对user  query 提出的挑战。下面进入正题。

Scalar index 简介

向量相似性搜索过程中,Milvus 使用了属性过滤条件(expr)来扫描每个数据段(segment),并将过滤结果(bitset,一种位集合,用于高效表示哪些元素满足条件)与查询向量(data)一起应用于相似性搜索中。这种方式可以极大地提高搜索效率,因为它允许Milvus在执行耗时的相似性计算之前,先通过简单的属性过滤快速排除掉大量不满足条件的数据点。

具体来说,过程如下:

属性过滤

用户定义了一个或多个属性过滤条件(expr),这些条件用于筛选数据集中满足特定属性要求的向量。这些条件可以基于向量的元数据(如时间戳、地理位置、分类标签等)来定义。

扫描数据段

Milvus遍历或索引每个数据段,应用这些属性过滤条件。对于每个数据段,它会生成一个bitset,这个bitset中的每一位代表数据段中对应位置的向量是否满足过滤条件。

相似性搜索

在得到过滤后的bitset后,Milvus只针对那些标记为“满足条件”的向量进行相似性搜索。这意味着它不再需要计算所有向量的相似性,而只需计算那些经过初步筛选、更有可能与查询向量相似的向量的相似性。


返回结果

最后,Milvus根据相似性得分对满足条件的向量进行排序,并返回最相似的向量及其相关信息(如ID、相似度分数等)给用户。

这种结合属性过滤和相似性搜索的方法,使得Milvus在处理大规模向量数据集时,能够更加高效和准确地响应用户的查询需求。它特别适用于那些既需要基于内容的相似性搜索,又需要基于属性快速筛选的场景,如推荐系统、图像检索、文档聚类等领域。

这里有一点要说明,你使用milvus,基本决定了你的 collection 世界中,一定是 vector + scalar 共存的case,原因很简单,如果仅有scalar,我相信你使用 mysql,sqlserver,甚至oracle 足以,小的应用你甚至使用sqlite估计也行,因为你的 sql  query 足以胜任user 各种需求。你之所以选择向量数据库,肯定是要么有LLM的vector 需求,要么有pic,audio甚至video 的需求。还是那句话,使用场景决定了product 的选择。所以你的collection 多半可能是  一个+多个 vector embeddding + 多个 attibute 的vector 说明。

举例说明

假设我们有一个电商平台,该平台使用Milvus来存储商品的图像特征向量,并希望为用户提供基于图像相似性的商品推荐功能。同时,商品还具有一些属性信息,如价格、品牌、类别等。

1. 属性过滤

用户查询:用户希望找到一款与某张图片相似,但价格不超过5000元,且品牌为“Huawei”的商品。

属性过滤条件

  • 价格 <= 5000
  • 品牌 = "Huawei"

在Milvus中,这些属性信息会与图像特征向量一起存储,但它们是分开处理的。当用户发起查询时,Milvus首先会应用这些属性过滤条件来筛选出满足条件的商品。

2. 扫描数据段

数据段扫描

  • Milvus会将存储的商品数据分为多个数据段(segment),每个数据段包含一部分商品的特征向量和属性信息。
  • 当属性过滤条件被应用时,Milvus会遍历或索引这些数据段,检查每个商品是否满足过滤条件。
  • 对于满足条件的商品,Milvus会生成一个bitset,其中每个位对应一个商品,满足条件的商品对应的位被设置为1,不满足的则被设置为0。

3. 相似性搜索

相似性搜索

  • 在得到过滤后的bitset后,Milvus只针对那些标记为“满足条件”的商品特征向量进行相似性搜索。
  • 用户提供的查询图片首先被转换为特征向量。
  • Milvus使用适当的相似性度量(如余弦相似度)来计算查询向量与满足条件的商品特征向量之间的相似性。
  • 根据相似性得分,Milvus对商品进行排序,并返回最相似的几个商品给用户。

实际应用中的考虑

  • 性能优化:Milvus通过高效的索引结构和算法来加速数据段的扫描和相似性搜索过程,确保即使在处理大规模数据集时也能提供快速响应。
  • 多模态支持:Milvus不仅支持图像特征向量的存储和检索,还支持文本、音频等多种模态的数据,为跨模态检索提供了可能。
  • 可扩展性:Milvus支持分布式部署,可以随着数据量的增长而水平扩展,以满足更高并发和更大存储容量的需求。

Scalar Index 方式

Auto indexing 

你不用对你的scalar attribute 做任何辅助说明,Milvus 使用 auto indexing 的方式完成Scalar Indexing 的索引。

实际上你看了Milvus 的源码之后,你会发现,实际上 Auto indexing 就是 底层用的 inverted indexing。这里可能milvus 为了扩展,将inverted indexing 作为了 default 的 scalar indexing 来使用。

所以本质上来说要看下 Inverted indexing。

Inverted indexing

倒排索引,如果你曾经是比较资深的programmmer,你应该不会陌生。我那时候还没有ElasticSearch,用的是Lucene,后来有了ElasticSearch 和 Solr,但是万变不离其宗,其核心还是倒排索引。说直白点就是把一个句子拆分为词组的 tomkenizer 并 标识这些词在哪些句子中出现或是标识出现的概率。Milvus的 inverted indexing 出自一个开源库:Tantivy。应该说 Tantivy 的实现并不是ElasticSerach 或是 Solr,但是其思想有些类似,有兴趣的可以去看下源码。github 地址:

Tantivy Github 源码地址

再次说明了,成功是站在巨人的肩上,其实Milvus 用了不少其他中间件来保证自己的功能特性,前面介绍过的就有:etcd,mysql,rockMQ,pluster etc。现在又看到了 Tantivy。你可能会问为什么Milvus 不使用 ElasticSearch或Solr,那肯定是那啥License等问题,但从技术的角度来说,Tantivy也足够优秀。或许有一天 Tantivy 的知名度会超过 ElasticSearch 也不一定。

我们看个例子:

这就是倒排索引,只不过不同人,不同版本实现时,倒排信息的精度有差别,这里是focus 在句子层面。不过对于 Milvus的使用,足以。

在单个查询,比如上面的例子,品牌=’huawei‘,那根据倒排索引,直接锁定包含’huawei‘品牌attribute的 document 或 segment。

在区间查询,比如还是上面的例子,价格<5000, 那还是根据倒排索引,直接锁定 价格 attribute的document 或segment。

或许区间的例子还不够透彻,因为range 的是数据。你查找的品牌获取不止一种,如果 brand in ['huawei', 'apple'] 首先会经过类似alpha的字母排序,之后通过倒排索引查询,会比暴力查询效率高很多。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/872135.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从零开始搭建vue框架

流程图 开始 | |-- 2013 年底&#xff0c;尤雨溪开始开发 Vue 框架&#xff0c;最初命名为 Seed&#xff0c;后更名为 Vue | |-- 2013 年 12 月&#xff0c;Vue 0.6.0 版本 | |-- 2014 年 1 月 24 日&#xff0c;Vue 0.8.0 版本发布 | |-- 2014 年 2 月 25 日&#xff0c;…

2024年初级注册安全工程师职业资格考试首次开考!

​2024年初级注册安全工程师考试首次开考&#xff08;注&#xff1a;该考试由各省人事考试局组织考试&#xff09;。目前未取得中级注册安全工程师证书的各位同学&#xff0c;可以关注该考试&#xff0c;毕竟初级考证相对较容易&#xff0c;先去考一个。 目前初安开考地区汇总…

高德地图+Vue3基础地图从0到1实现

前言 本文主要讲解如何利用高德地图api与vue3实现对世界地图的可视化显示。 实现效果 流程总结 流程1&#xff1a;Vue3搭建 搭建没什么说的&#xff0c;可以用cli、webpack、vite等构建工具进行初步搭建 注&#xff1a;必须要带eslint.js 流程2&#xff1a;高德地图密钥下…

请你谈谈:AnnotatedBeanDefinitionReader 显式地注册一个Bean到Spring容器,以及注册并解析配置类

为了深入探讨Spring框架中的beanDefinition对象&#xff0c;我们不可避免地要提及BeanFactoryPostProcessor这一核心类&#xff0c;它作为Spring的bean工厂后置处理器发挥着关键作用。接下来&#xff0c;我们将详细讨论BeanFactoryPostProcessor的执行时机&#xff0c;这是一个…

uniapp 微信小程序根据后端返回的文件链接打开并保存到手机文件夹中【支持doc、docx、txt、xlsx等类型的文件】!

项目场景&#xff1a; 我们在使用uniapp官方提供的uni.downloadFile以及uni.saveFile时&#xff0c;会发现这个文件下载的默认保存位置和我们预想的不太一样&#xff0c;容易找不到&#xff0c;而且没有提示&#xff0c;那么我们就需要把文件打开自己保存并且有提示保存到哪个…

网络安全保险产业发展洞察报告(2024)

数字经济高速增长&#xff0c;黑客攻击、数据泄露等网络安全风险可能直接导致企业遭受巨额的财务损失。网络安全保险作为风险转移和风险管理的有效工具&#xff0c;正逐渐成为数字安全框架中不可或缺的一环。 《网络安全保险产业发展洞察报告&#xff08;2024&#xff09;》梳…

百度“文心•跨模态大模型”又有新动态,支持内容分析时输出自定义标签库

大模型真正的价值在于应用。 一、基本概念 AI大模型具有强大的表征学习能力&#xff0c;能够在海量数据中提取有用的特征&#xff0c;为各种复杂任务提供解决方案。例如GPT-4o、BERT等模型的出现&#xff0c;不仅展示了大规模参数和复杂计算结构的优势&#xff0c;还在自然语…

STM32第二十课:FreeRTOS任务管理和信号量

目录 一、任务管理方式二、任务堆栈溢出检测三、二值信号量&#xff08;任务同步&#xff09;四、计数信号量五、互斥信号量六、队列 一、任务管理方式 1.任务创建成功后会添加到就绪链表中&#xff0c;开启调度器&#xff0c;此时任务调度器会去就绪链表中找优先级最高的任务执…

二叉树 —— OJ题目详解

1.二叉树的前序遍历 二叉树的前序遍历比较简单&#xff0c;但是在力扣上写这个接口需要注意几个点&#xff1a; int* preorderTraversal(struct TreeNode* root, int* returnSize) {} preorderTraversal 的返回值是动态开辟的数组&#xff0c;里面存放的是前序遍历的顺序int*…

【Linux取经之路】Linux常见指令

目录 基本指令 常见指令 1&#xff09;ls —— 对于目录&#xff0c;列出该目录下的所有子目录和文件&#xff1b;对于文件&#xff0c;将列出文件名及其他信息 2&#xff09;pwd —— 显示当前所在的目录 ​编辑 3&#xff09;cd —— 切换到指定路径下 4&#xff09;t…

itextpdf字体选择

itextpdf 版本7.2.5 itextpdf-html2pdf 版本4.0.5 这里讲的是通过html转pdf&#xff0c;在html2pdf中是通过html中font-family样式来确定字体的&#xff0c;那已知font-family的情况&#xff0c;怎么确定pdf中实际用的字体&#xff0c;大致分为两步&#xff1a; 1、通过font…

识别 TON 生态系统中前10种加密资产,以bitget 钱包为例

元描述&#xff1a;想要找到下一个 100 倍加密货币投资&#xff1f;请密切关注这篇文章&#xff1b;它揭示了所有可能很快变得非常有价值的 TON 网络宝石。 由 Telegram 提供支持的 TON&#xff08;开放网络&#xff09;生态系统正在蓬勃发展&#xff01;这是一个充满激动人心的…

【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【25】【分布式事务】

持续学习&持续更新中… 守破离 【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【25】【分布式事务】 本地事务事务的基本性质事务的隔离级别&#xff08;下面四个越往下&#xff0c;隔离级 别越高&#xff0c;并发能力越差&#xff09;事务的传播行为&#xff08;是否…

【Hive SQL 每日一题】找出各个商品销售额的中位数

文章目录 测试数据需求说明需求实现方法1 —— 升序计算法方法2 —— 正反排序法 补充 测试数据 -- 创建 orders 表 DROP TABLE IF EXISTS orders; CREATE TABLE orders (order_id INT,product_id INT,order_date STRING,amount DOUBLE );-- 插入 orders 数据 INSERT INTO ord…

软件工程课设——成绩管理系统

软件工程课设——成绩管理系统 该文档是软件工程课程设计&#xff0c;成绩管理子系统的开发模块仓库。 功能分析 从面向的用户分&#xff0c;成绩管理子系统主要面向三类用户&#xff0c;即至少需要满足这三类用户的需求&#xff1a; 学生&#xff1a;学生是成绩管理系统的…

深入理解 Git Reset 的三种模式及其使用场景

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;Android ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 1. --soft 模式 2. --mixed 模式&#xff08;默认&#xff09; 3. --hard 模式 总结 结语 我的其他博客 前言 在日常的开发…

机器学习-1:人工智能、机器学习和深度学习的关系

人工智能&#xff08;AI&#xff09; 简单理解&#xff0c;任何一种事物只要具备了一定的智能就可以把它归类为人工智能。 官方定义&#xff1a;"AI is the field that sdudies the synthesis and analysis of computational agents that act intelligently." 其中&a…

安卓学习中遇到的问题【bug】

安卓学习中遇到的问题 1Gradle下载慢怎么办&#xff1f; Gradle下载慢怎么办&#xff1f; distributionUrlhttps://mirrors.cloud.tencent.com/gradle/gradle-7.5-bin.zip 2 Could not resolve all files for configuration ‘:classpath‘. &#xff1e; Could not resolv…

uniapp-vue3-vite 搭建小程序、H5 项目模板

uniapp-vue3-vite 搭建小程序、H5 项目模板 特色准备拉取默认UniApp模板安装依赖启动项目测试结果 配置自动化导入安装依赖在vite.config.js中配置 引入 prerttier eslint stylelint.editorconfig.prettierrc.cjs.eslintrc.cjs.stylelintrc.cjs 引入 husky lint-staged com…

处理在 electron 中使用开启了懒加载的 el-image 后,窗口最大化或窗口尺寸变化后图片无法显示的问题

文章目录 1、问题描述2、详情动图3、解决思路4、解决方案5、效果展示 1、问题描述 在 electron 中使用 el-image 时&#xff0c;开启了懒加载后&#xff0c;发现只有当窗口滚动后&#xff0c;图片才会显示&#xff0c;即便图片已经处于窗口的可视区域。当拖动窗口使其尺寸变大…