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

文章目录

  • 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 VECTOR5  );表已创建。SQL> INSERT INTO documents_hnsw (id, content, embedding)2  VALUES3      (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_hnsw2  ON documents_hnsw (embedding)3  ORGANIZATION INMEMORY NEIGHBOR GRAPH4  DISTANCE COSINE5  WITH TARGET ACCURACY 956  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_vectors2  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 GRAPH1179648      65660           3SQL> drop INDEX idx_docs_hnsw;索引已删除。SQL> -- IVF索引(基于分区)
SQL> CREATE VECTOR INDEX idx_docs_ivf2  ON documents_hnsw (embedding)3  ORGANIZATION NEIGHBOR PARTITIONS4  DISTANCE COSINE5  WITH TARGET ACCURACY 906  PARAMETERS (7      TYPE IVF,8      NEIGHBOR PARTITIONS 100,  -- 分区数9      SAMPLES_PER_PARTITION 500, -- 每个分区采样数10      MIN_VECTORS_PER_PARTITION 50 -- 最小向量数/分区11  )12  PARALLEL 4;索引已创建。SQL> select owner, index_name, index_organization, allocated_bytes, used_bytes, num_vectors2  from v$vector_index ;OWNER
--------------------------------------------------------------------------------
INDEX_NAME
--------------------------------------------------------------------------------
INDEX_ORGANIZATION
--------------------------------------------------------------------------------
ALLOCATED_BYTES USED_BYTES NUM_VECTORS
--------------- ---------- -----------
VECTOR
IDX_DOCS_IVF
NEIGHBOR PARTITIONS0          0           3

参考

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.mzph.cn/web/76050.shtml

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

相关文章

cas 5.3单点登录中心开发手册

文档格式PDF 只读文档。 代码源码。 一、适用对象 需要快速上手出成果的服务端开发人员&#xff0c;具备3年经验java 开发&#xff0c;熟悉数据库&#xff0c;基本的Linux操作系统配置。 工期紧张需要快速搭建以cas为基础的统一登录中心&#xff0c;遇到技术瓶颈&#xff0c…

行星际激波在日球层中的传播:Propagation of Interplanetary Shocks in the Heliosphere (第一部分)

行星际激波在日球层中的传播&#xff1a;Propagation of Interplanetary Shocks in the Heliosphere &#xff08;第二部分&#xff09;- Chapter 3: Solar and heliospheric physics 行星际激波在日球层中的传播&#xff1a;Propagation of Interplanetary Shocks in the Hel…

Linux——消息队列

目录 一、消息队列的定义 二、相关函数 2.1 msgget 函数 2.2 msgsnd 函数 2.3 msgrcv 函数 2.4 msgctl 函数 三、消息队列的操作 3.1 创建消息队列 3.2 获取消息队列并发送消息 3.3 从消息队列接收消息recv 四、 删除消息队列 4.1 ipcrm 4.2 msgctl函数 一、消息…

蓝桥杯常考排序

1.逆序 Collections.reverseOrder() 方法对列表进行逆序排序。通过 Collections.sort() 方法配合 Collections.reverseOrder()&#xff0c;可以轻松实现从大到小的排序。 import java.util.ArrayList; // 导入 ArrayList 类&#xff0c;用于创建动态数组 import java.util.C…

ILGPU的核心功能使用详解

什么是ILGPU? ILGPU 是一种用于高性能 GPU 程序的新型 JIT&#xff08;即时&#xff09;编译器 &#xff08;也称为 kernels&#xff09;编写的 .基于 Net 的语言。ILGPU 完全 用 C# 编写&#xff0c;没有任何原生依赖项&#xff0c;允许您编写 GPU 真正可移植的程序。…

金融的未来

1. DeFi的爆发式增长与核心使命 DeFi&#xff08;去中心化金融&#xff09;的使命是重构传统金融基础设施&#xff0c;通过区块链技术实现更高的透明度、可访问性、效率、便利性和互操作性。其增长数据印证了这一趋势&#xff1a; TVL&#xff08;总锁定价值&#xff09;爆炸…

在Vue项目中查询所有版本号为 1.1.9 的依赖包名 的具体方法,支持 npm/yarn/pnpm 等主流工具

以下是 在Vue项目中查询所有版本号为 1.1.9 的依赖包名 的具体方法&#xff0c;支持 npm/yarn/pnpm 等主流工具&#xff1a; 一、使用 npm 1. 直接过滤依赖树 npm ls --depth0 | grep "1.1.9"说明&#xff1a; npm ls --depth0&#xff1a;仅显示直接依赖&#xf…

其利天下即将亮相第21届(顺德)家电电源与智能控制技术研讨会

2025年4月25日&#xff0c;第21届&#xff08;顺德&#xff09;家电电源与智能控制技术研讨会即将拉开帷幕&#xff0c;其利天下应大比特之邀&#xff0c;确认将参加此次研讨会。 本次研讨会&#xff0c;我司委派研发总监冯建武先生围绕《重新定义风扇驱动&#xff1a;一套算法…

阿里云OSS

目录 第三方服务-通用思路 SDK 准备工作 阿里云OSS-入门程序 .putObject 如何拿到文件对应的字节数组&#xff1f; .readAllBytes&#xff08;&#xff09; 集成阿里云OSS完成文件上传 引入阿里云OSS文件上传的工具类 上传文件接口开发 .getOriginalFilename() 程序…

李宏毅NLP-4-语音识别part3-CTC

Connectionist Temporal Classification&#xff5c;CTC 基于连接主义时间分类&#xff08;CTC&#xff09;的语音识别架构&#xff0c;具体描述如下&#xff1a; 输入层&#xff1a;底部的 x 1 , x 2 , x 3 , x 4 x^1, x^2, x^3, x^4 x1,x2,x3,x4代表输入的语音信号分帧数据…

如何构建类似云数据仓库 Snowflake 的本地数据仓库?

目录 一、Snowflake 架构的三大核心价值 二、本地数据仓库要“像 Snowflake”&#xff0c;关键在数据服务化 三、SQL2API&#xff1a;本地数据服务共享的核心引擎 ✅ 什么是 SQL2API&#xff1f; ✅ 为什么是构建本地类 Snowflake 架构的关键&#xff1f; 四、QuickAPI&a…

设计模式 - 单例模式

一个类不管创建多少次对象&#xff0c;永远只能得到该类型一个对象的实力 常用到的&#xff0c;比如日志模块&#xff0c;数据库模块 饿汉式单例模式&#xff1a;还没有获取实例对象&#xff0c;实例对象就已经产生了 懒汉式单例模式&#xff1a;唯一的实例对象&#xff0c;…

【Windows Cmake工程配置Boost库】

Windows Cmake工程配置Boost库 背景配置流程1. 下载Boost库2. 配置环境变量3. 修改CmakeLists背景 Windows环境下使用cmake开发程序,如图需要用到boost库,但是从官网下载的boost库源码没有编译成功,于是从网上下载boost预编译库,直接配置。 配置流程 1. 下载Boost库 官…

长期坚持的本质,看重休息,看轻自律

01 你有没有这样的经历&#xff0c; 年初立下减肥20斤、读完100本书、旅行10次等目标&#xff0c; 年中发现进度太慢&#xff0c; 于是降低年初目标&#xff0c; 但年终完成度仍然不及格。 只好跨年时将希望寄托于来年&#xff0c; 明年复明年&#xff0c;明年何其多。 …

Python实现贪吃蛇三

上篇文章Python实现贪吃蛇一&#xff0c;实现了一个贪吃蛇的基础版本。后面第二篇文章Python实现贪吃蛇二修改了一些不足&#xff0c;但最近发现还有两点需要优化&#xff1a; 1、生成食物的时候有概率和记分牌重合 2、游戏缺少暂停功能 先看生成食物的时候有概率和记分牌重合的…

LSTM概述

一、LSTM的背景与动机 1.1 为什么需要LSTM? 在深度学习中,普通的神经网络(如全连接网络或卷积神经网络)在处理序列数据时表现不佳,因为它们无法捕捉数据中的时间依赖关系。循环神经网络(RNN)被设计来处理序列数据,通过隐藏状态在时间步之间传递信息。然而,传统RNN存…

DDS信号发生器设计

一、基本概述 1.1 DDS简介 DDS信号发生器即直接数字频率合成&#xff08;Direct Digital Frequency Synthesis&#xff0c;简称DDS&#xff09;是一种利用数字技术生成信号的方法。它通过数字信号处理技术&#xff0c;将数字信号转换为模拟信号&#xff0c;从而生成高质量的正…

生成式AI:如何用大模型呼叫系统提升销售转化率?

生成式AI技术正以惊人的速度重塑商业版图。从智能助手到自动化营销&#xff0c;从数据分析到客户洞察&#xff0c;生成式AI正在颠覆传统商业模式&#xff0c;云蝠智能以大模型、智能体为核心技术,致力于为百万企业提供语音互动智能体平台与解决方案&#xff0c;为企业在销售转化…

OOP丨《Java编程思想》阅读笔记Chapter 6 : 访问权限控制

《Java编程思想》Chapter 6 : 访问权限控制 1. 前言 1.1. 访问权限控制的等级1.2. package关键字的引入 2. 包&#xff1a;库单元 2.1. 代码组织2.2. 包名的创建 3. Java访问权限修饰词 3.1. 包访问权限3.2. public: 接口访问权限3.3. private: 你无法访问3.4. protected: 继承…

reconic 天空 模型

目录 推理代码&#xff1a; EnvLight 代码&#xff1a; 推理代码&#xff1a; sky_model self.models["Sky"]outputs["rgb_sky"] sky_model(image_info)outputs["rgb_sky_blend"] outputs["rgb_sky"] * (1.0 - outputs["opa…