Oracle 23ai Vector Search 系列之5 向量索引(Vector Indexes)

news2025/4/15 5:11:54

文章目录

  • Oracle 23ai Vector Search 系列之5 向量索引
    • Oracle 23ai支持的向量索引类型
      • 内存中的邻居图向量索引 (In-Memory Neighbor Graph Vector Index)
      • 磁盘上的邻居分区矢量索引 (Neighbor Partition Vector Index)
    • 创建向量索引
      • HNSW索引
      • IVF索引
    • 向量索引示例
    • 参考

Windows 环境图形化安装 Oracle 23ai
Oracle 23ai Vector Search 系列之1 架构基础
Oracle 23ai Vector Search 系列之2 ONNX(Open Neural Network Exchange)
Oracle 23ai Vector Search 系列之3 集成嵌入生成模型(Embedding Model)到数据库示例,以及常见错误
Oracle 23ai Vector Search 系列之4 VECTOR数据类型和基本操作

Oracle 23ai Vector Search的典型工作流程:
在这里插入图片描述
来源:https://blogs.oracle.com/coretec/post/getting-started-with-vectors-in-23ai

Oracle 23ai Vector Search 系列之5 向量索引

Oracle Database 23ai推出了​AI Vector Search​​功能,和数据库的普通索引一样,对于向量检索也可以通过​​向量索引(Vector Indexes)​​加速高维向量的相似性搜索(similarity search)。

Oracle 23ai支持的向量索引类型

Oracle提供了两种主要索引类型:

  • 内存中的邻居图向量索引 (In-Memory Neighbor Graph Vector Index)
  • 磁盘上的邻居分区矢量索引(Neighbor Partition Vector Index)

内存中的邻居图向量索引 (In-Memory Neighbor Graph Vector Index)

HNSW(Hierarchical Navigable Small World :分层可导航小世界)索引 是 Oracle AI Vector Search 中唯一支持的内存邻居图向量索引类型。基于HNSW图算法,通过多层图结构加速搜索。
HNSW索引在23ai版本引入的新的内存结构:向量内存池(Vector Memory Pool)中创建;向量内存池(Vector Memory Pool)位于SGA中,Oracle通过 vector_memory_size参数控制这块内存的大小。

参考:
Understand Hierarchical Navigable Small World Indexes

磁盘上的邻居分区矢量索引 (Neighbor Partition Vector Index)

IVF(Inverted File Flat :倒排文件扁平) 索引是一种基于分区的向量索引技术,是 Oracle AI Vector Search 中唯一支持的邻居分区向量索引类型。
IVF索引在磁盘上创建,并且和其他数据块一样可以缓存在buffer cache。

参考:
Understand Inverted File Flat Vector Indexes

创建向量索引

创建不同类型向量索引的语法稍有不同。

参考:
CREATE VECTOR INDEX
https://docs.oracle.com/en/database/oracle/oracle-database/23/sqlrf/create-vector-index.html

HNSW索引

HNSW索引创建语法如下:

CREATE VECTOR INDEX vector_index_name 
    ON table_name ( vector_column )
    [ GLOBAL ] 
    ORGANIZATION  INMEMORY [ NEIGHBOR ] GRAPH 
               [ WITH ] [ DISTANCE metric name ]
    [ WITH TARGET ACCURACY percentage_value ]
    [ PARAMETERS (  
    		     TYPE HNSW , 
    		     { [ NEIGHBORS ] | M }  max_closest_vectors_connected   						  
    		    , [ EFCONSTRUCTION ] max_candidates_to_consider   
		    )
    ] 
    [ PARALLEL degree_of_parallelism ]
    

​参数说明:​

 - ORGANIZATION INMEMORY [NEIGHBOR] GRAPH​
声明索引类型为 ​​HNSW(基于内存的图结构索引)
必须包含 INMEMORY 和 GRAPH 关键字。

 - DISTANCE(可选)​​
定义向量相似度的计算方式。
​​可选值​​:
			EUCLIDEAN(欧氏距离)
			L2_SQUARED(欧氏距离平方,即CLIDEAN_SQUARED`)
			COSINE(余弦相似度)
			DOT(点积相似度)
			MANHATTAN(曼哈顿距离)
			HAMMING(汉明距离)
​​默认​​:若省略,使用系统默认距离函数(通常是 EUCLIDEAN

 - WITH TARGET ACCURACY(可选)​​
​​作用​​:指定索引的目标搜索精度(百分比)。
​​取值范围​​:>0 且 <=100。
​​示例​​:WITH TARGET ACCURACY 95 表示目标精度为 95%。
​​注意​​:精度越高,查询速度可能越慢。

 - PARAMETERS(可选)​​
	​​TYPE HNSW​​ 
		定义 HNSW 索引
	​​NEIGHBORS 或 M​​
	​​	作用​​:定义每个层中向量最多可连接的邻居数量(最后一层允许最多 2M 个邻居)。
	​​	取值范围​​:>0 且 <=2048。
	​​	示例​​:NEIGHBORS 64 或 M 64。
		​​影响​​:值越大,索引构建时间越长,但查询精度可能更高。
	​​EFCONSTRUCTION​​
	​​	作用​​:控制索引构建时每一步插入操作搜索的候选向量数量。
		​​取值范围​​:>0 且 <=65535。
		​​示例​​:EFCONSTRUCTION 500。
		​​影响​​:值越大,索引构建时间越长,但索引质量(精度)更高。

 - PARALLEL(可选)​​
​​作用​​:指定索引构建时的并行度(如多线程或分布式加速)。
​​示例​​:PARALLEL 8 表示使用 8 个并行线程。

IVF索引

IVF索引创建语法如下:

CREATE VECTOR INDEX vector_index_name 
    ON table_name ( vector_column )
    [ INCLUDE ( covering_column[,covering_column]+ ) ]
    [ GLOBAL ] 
    ORGANIZATION  [ NEIGHBOR ] PARTITIONS  
               [ WITH ] [ DISTANCE metric name ]
    [ WITH TARGET ACCURACY percentage_value ]
    [ PARAMETERS (  
    		     TYPE IVF , {  NEIGHBOR PARTITIONS number_of_partitions   
                             | [ SAMPLES_PER_PARTITION number_of_samples ]
                             | [ MIN_VECTORS_PER_PARTITION min_number_of_vectors_per_partition] 
		       }
		    )
    ] 
    [ PARALLEL degree_of_parallelism ]

​参数说明:​


 - ​​INCLUDE(可选)​​
​​作用​​:指定索引包含的非向量列,用于非向量列的查询优化。
​​示例​​:INCLUDE (colomn1)。

 - GLOBAL(可选)​​
​​作用​​:声明索引为全局索引(适用于分布式或分区表场景)。
​​默认​​:省略时为局部索引。
 
 - ORGANIZATION [NEIGHBOR] PARTITIONS​​
​​作用​​:声明索引类型为 ​​IVF(基于分区的索引)​​。
必须包含 PARTITIONS 关键字,NEIGHBOR 为可选修饰符。

 - DISTANCE(可选)​​
定义向量相似度的计算方式。
​​可选值​​:
			EUCLIDEAN(欧氏距离)
			L2_SQUARED(欧氏距离平方,即CLIDEAN_SQUARED`)
			COSINE(余弦相似度)
			DOT(点积相似度)
			MANHATTAN(曼哈顿距离)
			HAMMING(汉明距离)
​​默认​​:若省略,使用系统默认距离函数(通常是 EUCLIDEAN

 - WITH TARGET ACCURACY(可选)​​
​​作用​​:指定索引的目标搜索精度(百分比)。
​​取值范围​​:>0 且 <=100。
​​示例​​:WITH TARGET ACCURACY 95 表示目标精度为 95%。
​​注意​​:精度越高,查询速度可能越慢。

 - PARAMETERS(可选)​​
​​作用​​:定义 IVF 索引的详细参数,必须包含 TYPE IVF。

	​​NEIGHBOR PARTITIONS​​
		​​作用​​:指定分区的数量(即聚类中心的数量)。
		​​取值范围​​:>0 且 <=10,000,000。
		​​示例​​:NEIGHBOR PARTITIONS 1000。
		​​分区越多,每个分区的向量越少,搜索速度越快,但精度可能降低。

	​​SAMPLES_PER_PARTITION​​
		​​作用​​:指定每个分区用于聚类算法的采样数。
		​​取值范围​​:1 ≤ 值 ≤ 总向量数/分区数。
		​​示例​​:SAMPLES_PER_PARTITION 1000。
		采样数越多,聚类中心越准确,但构建时间越长。
		默认值通常为总向量数的 1%~10%。

	​​MIN_VECTORS_PER_PARTITION​​
		​​作用​​:设置每个分区的最小向量数,低于此值的分区会被合并或剔除。
		​​取值范围​​:0 ≤ 值 ≤ 总向量数。
		​​示例​​:MIN_VECTORS_PER_PARTITION 100。
		避免过小的分区(例如设置 ≥100),以提高搜索效率。
		设为 0 表示不进行分区剪裁。

 - PARALLEL(可选)​​
​​作用​​:指定索引构建时的并行度(如多线程或分布式加速)。
​​示例​​:PARALLEL 8 表示使用 8 个并行线程。

参考:
Manage the Different Categories of Vector Indexes

向量索引示例

SQL> CREATE TABLE documents_hnsw (
  2      id NUMBER PRIMARY KEY,
  3      content VARCHAR2(4000),
  4      embedding VECTOR
  5  );

表已创建。

SQL> INSERT INTO documents_hnsw (id, content, embedding)
  2  VALUES
  3      (1, '自然语言处理技术', VECTOR('[0.1, 0.3, 0.8]')),
  4      (2, '机器学习算法', VECTOR('[0.2, 0.5,  0.7]')),
  5      (3, '人工智能应用', VECTOR('[0.4, 0.6, 0.9]'));

已创建 3 行。

SQL> -- HNSW索引(基于内存图)
SQL> CREATE VECTOR INDEX idx_docs_hnsw
  2  ON documents_hnsw (embedding)
  3  ORGANIZATION INMEMORY NEIGHBOR GRAPH
  4  DISTANCE COSINE
  5  WITH TARGET ACCURACY 95
  6  PARAMETERS (
  7      TYPE HNSW,
  8      NEIGHBORS 64,       -- 每层最大邻居数
  9      EFCONSTRUCTION 500  -- 构建时候选数
 10  )
 11  PARALLEL 4;

索引已创建。

SQL> select owner, index_name, index_organization, allocated_bytes, used_bytes, num_vectors
  2  from v$vector_index where index_organization = 'INMEMORY NEIGHBOR GRAPH';

OWNER
--------------------------------------------------------------------------------
INDEX_NAME
--------------------------------------------------------------------------------
INDEX_ORGANIZATION
--------------------------------------------------------------------------------
ALLOCATED_BYTES USED_BYTES NUM_VECTORS
--------------- ---------- -----------
VECTOR
IDX_DOCS_HNSW
INMEMORY NEIGHBOR GRAPH
        1179648      65660           3

SQL> drop INDEX idx_docs_hnsw;

索引已删除。

SQL> -- IVF索引(基于分区)
SQL> CREATE VECTOR INDEX idx_docs_ivf
  2  ON documents_hnsw (embedding)
  3  ORGANIZATION NEIGHBOR PARTITIONS
  4  DISTANCE COSINE
  5  WITH TARGET ACCURACY 90
  6  PARAMETERS (
  7      TYPE IVF,
  8      NEIGHBOR PARTITIONS 100,  -- 分区数
  9      SAMPLES_PER_PARTITION 500, -- 每个分区采样数
 10      MIN_VECTORS_PER_PARTITION 50 -- 最小向量数/分区
 11  )
 12  PARALLEL 4;

索引已创建。

参考

Oracle AI Vector Search User’s Guide

6 Create Vector Indexes and Hybrid Vector Indexes

CREATE_INDEX

Getting Started with Oracle Database 23ai AI Vector Search

Getting started with vectors in 23ai

Using HNSW Vector Indexes in AI Vector Search

Hybrid Vector Index - a combination of AI Vector Search with Text Search

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

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

相关文章

vue模拟扑克效果

vue模拟扑克效果 效果图&#xff1a; step1:C:\Users\wangrusheng\PycharmProjects\untitled18\src\views\Home.vue <template><div class"poker-container"><!-- 使用复合数据对象实现双行显示 --><divv-for"(card, index) in POKER_…

Android12源码编译之预置Android Studio项目Android.mk文件编写

1、在AndroidManifest.xml文件中添加package"com.sprd.silentinstalldemo"属性&#xff0c;因为新版本的Android Studio默认生成的AndroidManifest.xml是没有这个属性值的 <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:an…

Spring Boot 测试详解,包含maven引入依赖、测试业务层类、REST风格测试和Mock测试

Spring Boot 测试详解 1. 测试依赖引入 Spring Boot 默认通过以下 Maven 依赖引入测试工具&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</s…

leetcode刷题日记——螺旋矩阵

[ 题目描述 ]&#xff1a; [ 思路 ]&#xff1a; 题目要求按顺时针顺序给出m行n列的矩阵的数组按照题目所给的顺序挨个插入答案数组中运行如下 int* spiralOrder(int** matrix, int matrixSize, int* matrixColSize, int* returnSize) {*returnSize matrixSize * matrixCol…

模板引擎语法-标签

模板引擎语法-标签 文章目录 模板引擎语法-标签[toc]一、用于进行判断的{% if-elif-else-endif %}标签二、关于循环对象的{% for-endfor %}标签三、关于自动转义的{% autoescape-endautoescape %}标签四、关于循环对象的{% cycle %}标签五、关于检查值是否变化的{% ifchange %}…

深度学习学习笔记

目录 摘要 Abstracts 简介 Hourglass Module&#xff08;Hourglass 模块&#xff09; 网络结构 Intermediate Supervision&#xff08;中间监督&#xff09; 训练过程细节 评测结果 摘要 本周阅读了《Stacked Hourglass Networks for Human Pose Estimation》&#xf…

当Browser Use遇见A2A:浏览器自动化与智能体协作的“冰与火之歌“

——一场正在改写数字文明的技术奇遇 第一章 浏览器革命&#xff1a;从"手动挡"到"自动驾驶" 1.1 传统自动化工具的"中年危机" 还记得2023年那个抓狂的凌晨吗&#xff1f;你蹲守演唱会门票时&#xff0c;Selenium脚本因为验证码识别失败第108次…

(已解决)如何安装python离线包及其依赖包 2025最新

字数 305&#xff0c;阅读大约需 2 分钟 没有网络的Linux服务器上&#xff0c;如何安装完整的、离线的python包 1. 写入待安装的包 新建requirement.txt, 写入待安装的包 和 包的版本 如 flwr1.13.0 2.使用命令行直接下载 pip download -d flwr_packages -r requirements.tx…

豪越赋能消防安全管控,解锁一体化内管“安全密码”

在消防安全保障体系中&#xff0c;内部管理的高效运作是迅速、有效应对火灾及各类灾害事故的重要基础。豪越科技凭借在消防领域的深耕细作与持续创新&#xff0c;深入剖析消防体系内部管理的痛点&#xff0c;以自主研发的消防一体化安全管控平台&#xff0c;为行业发展提供了创…

拓扑排序 —— 2. 力扣刷题207. 课程表

题目链接&#xff1a;https://leetcode.cn/problems/course-schedule/description/ 题目难度&#xff1a;中等 相关标签&#xff1a;拓扑排序 / 广度优先搜搜 BFS / 深度优先搜索 DFS 2.1 问题与分析 2.1.1 原题截图 2.1.2 题目分析 首先&#xff0c;理解题目后必须马上意识到…

【STM32】ST7789屏幕驱动

目录 CubeMX配置 配置SPI 开DMA 时钟树 堆栈大小 Keil工程配置 添加两个group 添加文件包含路径 驱动编写 写单字节函数 写字函数 写多字节函数 初始化函数 设置窗口函数 情况一&#xff1a;正常的0度旋转 情况二&#xff1a;顺时针90度旋转 情况三&#xff1…

10min速通Linux文件传输

实验环境 在Linux中传输文件需要借助网络以及sshd&#xff0c;我们可通过systemctl status sshd来查看sshd状态 若服务未开启我们可通过systemctl enable --now sshd来开启sshd服务 将/etc/ssh/sshd_config中的PermitRootLogin 状态修改为yes 传输文件 scp scp &#xff08;Sec…

dify windos,linux下载安装部署,提供百度云盘地址

dify1.0.1 windos安装包百度云盘地址 通过网盘分享的文件&#xff1a;dify-1.0.1.zip 链接: 百度网盘 请输入提取码 提取码: 1234 dify安装包 linux安装包百度云盘地址 通过网盘分享的文件&#xff1a;dify-1.0.1.tar.gz 链接: 百度网盘 请输入提取码 提取码: 1234 1.安装…

使用 TFIDF+分类器 范式进行企业级文本分类(二)

1.开场白 上一期讲了 TF-IDF 的底层原理&#xff0c;简单讲了一下它可以将文本转为向量形式&#xff0c;并搭配相应分类器做文本分类&#xff0c;且即便如今的企业实践中也十分常见。详情请见我的上一篇文章 从One-Hot到TF-IDF&#xff08;点我跳转&#xff09; 光说不练假把…

《车辆人机工程-汽车驾驶操纵实验》

汽车操纵装置有哪几种&#xff0c;各有什么特点 汽车操纵装置是驾驶员直接控制车辆行驶状态的关键部件&#xff0c;主要包括以下几种&#xff0c;其特点如下&#xff1a; 一、方向盘&#xff08;转向操纵装置&#xff09; 作用&#xff1a;控制车辆行驶方向&#xff0c;通过转…

python高级编程一(生成器与高级编程)

@TOC 生成器 生成器使用 通过列表⽣成式,我们可以直接创建⼀个列表。但是,受到内存限制,列表容量肯定是有限的。⽽且,创建⼀个包含100万个元素的列表,不仅占⽤很⼤的存储空间,如果我们仅仅需要访问前⾯⼏个元素,那后⾯绝⼤多数元素占 ⽤的空间都⽩⽩浪费了。所以,如果…

单片机Day05---动态数码管显示01234567

一、原理图 数组索引段码值二进制显示内容00x3f0011 1111010x060000 0110120x5b0101 1011230x4f0100 1111340x660110 0110450x6d0110 1101560x7d0111 1101670x070000 0111780x7f0111 1111890x6f0110 11119100x770111 0111A110x7c0111 1100B120x390011 1001C130x5e0101 1110D140…

muduo库源码分析: One Loop Per Thread

One Loop Per Thread的含义就是&#xff0c;一个EventLoop和一个线程唯一绑定&#xff0c;和这个EventLoop有关的&#xff0c;被这个EventLoop管辖的一切操作都必须在这个EventLoop绑定线程中执行 1.在MainEventLoop中&#xff0c;负责新连接建立的操作都要在MainEventLoop线程…

MCP结合高德地图完成配置

文章目录 1.MCP到底是什么2.cursor配置2.1配置之后的效果2.2如何进行正确的配置2.3高德地图获取key2.4选择匹配的模型 1.MCP到底是什么 作为学生&#xff0c;我们应该如何认识MCP&#xff1f;最近看到了好多跟MCP相关的文章&#xff0c;我觉得我们不应该盲目的追求热点的技术&…

重读《人件》Peopleware -(5)Ⅰ管理人力资源Ⅳ-质量—若时间允许

20世纪的心理学理论认为&#xff0c;人类的性格主要由少数几个基本本能所主导&#xff1a;生存、自尊、繁衍、领地等。这些本能直接嵌入大脑的“固件”中。我们可以在没有强烈情感的情况下理智地考虑这些本能&#xff08;就像你现在正在做的那样&#xff09;&#xff0c;但当我…