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.pswp.cn/web/76050.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/76050.shtml
英文地址,請注明出處:http://en.pswp.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…