Milvus - 标量字段索引技术解析

概述

在大规模向量相似性搜索场景中,结合标量字段和向量字段的过滤搜索需求日益增加。Milvus 2.1.0 版本引入的标量字段索引,为此类查询提供了极大的性能提升。本文将探讨 Milvus 的标量字段索引技术,包括其原理、实现方法、使用场景及性能优势。

为什么选择标量字段索引?

当在 Milvus 中进行向量相似性搜索时,可能希望通过一些标量字段(例如,数值、字符串字段)来进行筛选,以实现更精准的搜索结果。例如,在图像检索中,可以根据图片上传日期等标量字段来筛选结果。然而,标量字段过滤的效率直接影响最终查询的速度。为了解决这一瓶颈,Milvus 引入了标量字段索引,它可以有效组织标量字段的数据,并结合倒排索引、自动索引等技术,极大提升查询效率。

标量字段索引的工作原理

在接收到带有布尔表达式的搜索请求时,Milvus 会将表达式解析为抽象语法树(AST),并生成对应的物理计划。然后,Milvus 在每个数据段中执行物理计划,生成比特集作为过滤结果,再将此结果用于向量搜索参数,以缩小搜索范围。

1. 标量字段索引的分段过滤

标量字段索引的作用在于加速分段内的属性过滤过程。它以特定方式对标量字段值进行排序,使得信息检索速度大大提升。Milvus 提供了两种主要的标量字段索引算法:自动索引和反转索引。

2. 自动索引与反转索引

  • 自动索引:适用于频繁检索、前缀匹配等查询。Milvus 可以基于标量字段的数据类型自动创建索引,无需手动干预。
  • 反转索引:提供了手动配置的灵活性,适合更复杂的场景,如点查询、模式匹配、全文检索、布尔搜索和 JSON 查询。
自动索引的数据类型支持
数据类型自动索引算法
VARCHAR反转索引
INT8反转索引
INT16反转索引
INT32反转索引
INT64反转索引
FLOAT反转索引
二进制反转索引
反转索引的优势

Milvus 中的反转索引由 Tantivy(一个高效的全文搜索引擎库)支持。Tantivy 确保了 Milvus 的反转索引在性能和速度上的优越性。反转索引由术语字典和倒排列表两部分组成,其中术语字典是按字母顺序排列的所有标记词列表,而倒排列表记录每个词所关联的文档。这样设计让反转索引在点查询和范围查询中比暴力搜索快得多。

  • 点查询:通过在术语字典中查找关键字并获取相关倒排列表,避免了大量无效遍历。
  • 范围查询:利用已排序的术语字典更快速地定位符合条件的内容,进一步加速检索过程。

Milvus 中标量字段索引的使用

在 Milvus 中使用标量字段索引可以显著提高带有标量字段筛选的查询性能,以下是一些常见的使用方法和参数配置。

1. 配置自动索引

Milvus 自动为支持的数据类型(如 VARCHARINT 等)创建索引,无需手动干预。在执行搜索时,仅需构造包含布尔表达式的查询条件,Milvus 会自动处理索引。

# 假设我们有一个字符串和整型标量字段
search_params = {"bool_expr": "age > 30 AND status == 'active'"
}
results = collection.search(data=query_vectors, anns_field="embedding", param=search_params, limit=top_K)

2. 手动配置反转索引

反转索引支持更灵活的查询需求,适合点查询、前缀匹配、范围查询等操作。通过反转索引可在 Milvus 中手动配置标量字段的索引。

# 使用倒排索引来支持复杂的查询场景
index_params = {"field_name": "attribute_field","index_type": "INVERTED_INDEX"
}
collection.create_index(index_params=index_params)

3. 查询示例

一旦标量字段索引构建完毕,可以通过以下方式进行点查询和范围查询。

# 点查询:根据某个值精确匹配
point_query = "category == 'Electronics'"
results = collection.search(data=query_vectors, anns_field="embedding", bool_expr=point_query, limit=top_K)# 范围查询:查找某个范围内的数据
range_query = "price > 500 AND price < 1000"
results = collection.search(data=query_vectors, anns_field="embedding", bool_expr=range_query, limit=top_K)

标量索引性能测试结果

为了验证标量字段索引的性能优势,实验对比了倒排索引和暴力搜索的性能表现。实验在包含 100 万条记录的数据集上进行测试,结果表明:

  • 点查询:使用倒排索引的查询性能比暴力搜索快 30 倍。
  • 范围查询:使用倒排索引在大数据集上的性能提升更加显著。

这些结果表明,倒排索引在大规模数据场景中提供了更高效的查询性能。

性能建议

使用 Milvus 标量字段索引时,可以根据数据类型和数据量,估算所需的内存大小,以更好地进行资源规划。以下为不同数据类型的内存估算公式:

数值字段

数据类型内存估算函数(MB)
INT8行数 * 12 / 1024 / 1024
INT16行数 * 12 / 1024 / 1024
INT32行数 * 12 / 1024 / 1024
INT64行数 * 24 / 1024 / 1024
FLOAT32行数 * 12 / 1024 / 1024
二进制行数 * 24 / 1024 / 1024

字符串字段

字符串长度内存估算函数(MB)
(0, 8]行数 * 128 / 1024 / 1024
(8, 16]行数 * 144 / 1024 / 1024
(16, 32]行数 * 160 / 1024 / 1024
(32, 64]行数 * 192 / 1024 / 1024
(64, 128]行数 * 256 / 1024 / 1024
(128, 65535]行数 * strLen * 1.5 / 1024 / 1024

结论

标量字段索引为 Milvus 向量相似性搜索增添了强大的筛选能力,使得在处理具有大量标量属性的数据集时,查询性能显著提升。通过选择适当的索引类型和合理的配置,您可以在搜索精度和查询效率之间找到理想的平衡点,满足复杂数据处理场景的业务需求。

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

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

相关文章

若依项目搭建

若依的大版本 基本环境搭建 搭建注意点

(11)(2.1.6) Hobbywing DroneCAN ESC(二)

文章目录 前言 2 配置ESC 3 测试 4 设置视频 5 参数说明 前言 具有 CAN 接口&#xff08;including these&#xff09;的业余 ESC 支持 DroneCAN&#xff0c;它允许自动驾驶仪通过 CAN 控制 ESC /电机&#xff0c;并检索单个转速、电压、电流和温度。 2 配置ESC 默认情…

JVM结构图

JVM&#xff08;Java虚拟机&#xff09;是Java编程语言的核心组件之一&#xff0c;负责将Java字节码翻译成机器码并执行。JVM由多个子系统组成&#xff0c;包括类加载子系统、运行时数据区、执行引擎、Java本地接口和本地方法库。 类加载子系统&#xff08;Class Loading Subsy…

【智能算法改进】混沌映射策略--一网打尽

摘要 本文研究了多种混沌映射策略在智能算法中的改进效果&#xff0c;提出了一种综合不同混沌映射策略的多元混合方法&#xff0c;以提高算法的全局优化能力和收敛速度。通过引入不同的混沌映射&#xff08;如 Logistic、Tent、Sine 等&#xff09;生成初始种群分布&#xff0…

QML —— QML调用C++两种方法(附完整测试源码)

代码效果 说明 QML 其实是对JavaScript 的扩展,融合了Qt Object 系统,它是一种新的解释型的语言, QML 引擎虽然由Qt C++ 实现,但QML 对象的运行环境,说到底和C++ 对象的上下文环境是不同的,是平行的两个世界。如果你想在QML 中访问C++ 对象,那么必然要找到一种途径来在两…

剧本杀小程序,市场发展下的新机遇

剧本杀作为休闲娱乐的一种游戏方式&#xff0c;在短时间内进入了大众视野中&#xff0c;受到了广泛关注。近几年&#xff0c;剧本杀行业面临着创新挑战&#xff0c;商家需求寻求新的发展机遇&#xff0c;在市场饱和度下降的趋势下&#xff0c;获得市场份额。 随着科技的不断进…

mysql error:1449权限问题 及 用户授权

一、权限问题 Got error: 1449: The user specified as a definer (skip-grants userskip-grants host) does not exist when using LOCK TABLES 在迁移数据库时&#xff0c;定义的definer&#xff0c;在两个数据库之间不同步时&#xff0c;要将不存在的definer改成数据库中已…

Spark 的Standalone集群环境安装与测试

目录 一、Standalone 集群环境安装 &#xff08;一&#xff09;理解 Standalone 集群架构 &#xff08;二&#xff09;Standalone 集群部署 二、打开监控界面 &#xff08;一&#xff09;master监控界面 &#xff08;二&#xff09;日志服务监控界面 三、集群的测试 &a…

基于SpringBoot+Vue实现新零售商城系统

作者主页&#xff1a;编程千纸鹤 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验&#xff0c;被多个学校常年聘为校外企业导师&#xff0c;指导学生毕业设计并参…

SAP RFC 用户安全授权

一、SAP 通讯用户 对于RFC接口的用户&#xff0c;使用五种用户类型之一的“通讯”类型&#xff0c;这种类型的用户没有登陆SAPGUI的权限。 二、对调用的RFC授权 在通讯用户内部&#xff0c;权限对象&#xff1a;S_RFC中&#xff0c;限制进一步可以调用的RFC函数授权&#xff…

【Java Web】搭建Web环境以及初识JSP Tomcat

文章目录 程序架构Web服务器TomcatJSP概述主要特点基本语法综合示例程序调试和排错 代码示例 程序架构 C/S&#xff08;Client/Server&#xff0c;客户端/服务器&#xff09;和 B/S&#xff08;Browser/Server&#xff0c;浏览器/服务器&#xff09;是两种常见的软件系统架构模…

如何建购物网站提升用户体验

在构建一个购物网站时&#xff0c;用户体验是至关重要的&#xff0c;它直接影响到顾客的满意度和转化率。为了提升用户体验&#xff0c;可以从以下几个方面入手。 首先&#xff0c;网站设计应简洁明了。确保导航栏清晰易懂&#xff0c;让用户在寻找商品时不会迷失。此外&#x…

qt QTableView详解

1、概述 QTableView 是 Qt 框架中的一个高级视图类&#xff0c;用于以表格形式展示二维数据。它基于 QAbstractItemView&#xff0c;并与模型&#xff08;通常是 QAbstractTableModel 或 QStandardItemModel&#xff09;结合使用&#xff0c;以实现数据的展示和交互。QTableVi…

Android TextView自动换行文本显示不全解决

某些情况下&#xff0c;TextView自动换行后&#xff0c;会出现每行结尾处显示不全的问题&#xff0c; 如图&#xff1a; 常见解决方案&#xff1a; 设置TextView的“ellipsize”属性为“end” 实测无效&#xff01;将TextView外部的Layout改为RelativeLayout 实测无效&…

Rust 力扣 - 1461. 检查一个字符串是否包含所有长度为 K 的二进制子串

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 长度为k的二进制子串所有取值的集合为[0, sum(k)]&#xff0c;其中sum(k)为1 2 4 … 1 << (k - 1) 我们只需要创建一个长度为sum(k) 1的数组 f &#xff0c;其中下标为 i 的元素用来标记字符串中子串…

typescript的简介

简介 tsc npm install -g typescripttsc -v作用 检查类型和语法错误&#xff0c;提前纠错 ts的类型 如何穿件带有ts的vue工程 作用 常见类型 用法 编写一个ts文件 let username:string "John";let age:number 25;let isUpdated:boolean true;let data:any &q…

一文搞懂:AI网关这个新东西是什么意思?有没有开源免费的选择?

AI网关是什么意思&#xff1f;有什么用&#xff1f; AI网关是企业应用与内外部大模型之间的桥梁&#xff0c;它位于企业应用与内外部大模型的调用交汇点。 AI网关的主要功能 是 将应用请求 通过集中管理模块 转发给 1 内部自建模型、2 外部大模型服务提供商&#xff0c;甚至 …

在Java中,实现数据库连接通常使用JDBC

学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……&#xff09; 2、学会Oracle数据库入门到入土用法(创作中……&#xff09; 3、手把手教你开发炫酷的vbs脚本制作(完善中……&#xff09; 4、牛逼哄哄的 IDEA编程利器技巧(编写中……&#xff09; 5、面经吐血整理的 面试技…

机器人零位、工作空间、坐标系及其变换,以UR5e机器人为例

机器人中的主要坐标系 在机器人中&#xff0c;常用的坐标系包括&#xff1a; 基坐标系&#xff08;Base Frame&#xff09;&#xff1a;固定在机器人基座上的坐标系&#xff0c;用于描述机器人的整体位置和方向&#xff0c;是其他所有坐标系的参考点。 连杆坐标系&#xff08…

CSS的配色

目录 1 十六进制2 CSS中的十六进制2.1 十六进制颜色的基本结构2.2 十六进制颜色的范围2.3 简写形式2.4 透明度 3 CSS的命名颜色4 配色4.1 色轮4.2 互补色4.3 类似色4.4 配色工具 日常在开发小程序中&#xff0c;客户总是希望你的配色是美的&#xff0c;但是美如何定义&#xff…