Oracle 26AI 混合向量索引技术文档
1. 用途
混合向量索引是 Oracle Text 的一种专用域索引(Domain Index),属于 SEARCH INDEX 类型。它将现有 Oracle Text 索引的数据结构与向量索引数据结构整合为统一结构,作为单一域索引存储文档的文本字段和向量字段。
其核心功能是实现两种搜索的融合:
- 文本搜索:基于分词术语执行;
- 相似度搜索:基于向量执行。
两种搜索结果会被自动合并并评分,最终返回统一结果集。通过同时支持向量搜索和关键词搜索,混合向量索引可提升 Oracle Text 索引的搜索相关性,整合传统关键词文本搜索与向量相似度搜索的优势,改善整体搜索体验,为用户提供更准确的信息。
2. 使用说明
创建混合向量索引时,用户仅需提供以下基本信息:
- 需创建索引的表或列;
- 用于生成嵌入向量的库内 ONNX 嵌入模型。
2.1 多列 / 多表场景处理
若需为多列或多表同时创建索引,可指定MULTI_COLUMN_DATASTORE或USER_DATASTORE偏好设置。
2.2 参数调整
混合向量索引的大部分参数已预定义,用户无需精通文本处理、分块或嵌入策略即可完成索引创建。如需调整,可通过以下方式修改预定义参数:
- 针对向量索引部分:调整向量搜索偏好设置;
- 针对文本索引部分:调整文本搜索偏好设置;
- 针对整体索引:调整 DML 操作的索引维护偏好设置。
有关创建过程及基本概念的详细信息,可参阅《理解混合向量索引》。
3. 语法
3.1 基础语法结构
CREATE HYBRID VECTOR INDEX [schema.]index_name ON
[schema.]table_name(column_name)
[FILTER BY filter_column[, filter_column]...]
[ORDER BY oby_column[desc|asc][, oby_column[desc|asc]]...]
PARAMETERS ('paramstring')
[LOCAL [PARTITION [partition] ][, PARTITION [partition] ]]
[PARALLEL n];
3.2 语法元素说明
3.2.1 [schema.]index_name
指定要创建的混合向量索引的名称。
3.2.2 [schema.]table_name (column_name)
指定需创建索引的表和列。支持在数据类型为VARCHAR2、CLOB、BLOB的文本列上创建,但不能在含IS JSON检查约束的文本列上创建。
系统支持对多种文档格式建立索引(包括 HTML、PDF、Microsoft Word、纯文本等),完整格式列表参见《受支持的文档格式》。如需对多列或多表联合建立索引,需指定数据存储偏好设置(详见 3.3.2 文本搜索偏好设置)。
3.3 PARAMETERS (paramstring)
用于指定混合向量索引的各类偏好设置,包括向量搜索、文本搜索、索引维护三类参数。
3.3.1 向量搜索偏好设置(Vector Search Preferences)
配置混合向量索引中 “向量索引” 部分,涉及向量搜索的输入处理。注意:参数可通过两种方式指定,且不可同时使用:
- 直接在
PARAMETERS子句中传递最小参数集(含必需的MODEL和可选的VECTOR_IDXTYPE); - 通过向量器偏好设置(vectorizer preference)指定一整套参数。
3.3.1.1 直接指定 MODEL 和 VECTOR_IDXTYPE
CREATE HYBRID VECTOR INDEX [schema.]index_name ON
[schema.]table_name(column_name)
PARAMETERS ('MODEL <model_name>
[VECTOR_IDXTYPE <vector_index_type>]')
[FILTER BY filter_column[, filter_column]...]
[ORDER BY oby_column[desc|asc][, oby_column[desc|asc]]...]
[PARALLEL n];
MODEL <model_name>:必需参数,指定导入数据库的向量嵌入模型(仅支持 ONNX 库内嵌入模型),用于生成输入数据的向量嵌入;VECTOR_IDXTYPE <vector_index_type>:可选参数,指定向量索引类型。默认值为IVF(倒排文件扁平向量索引),支持HNSW(层次化可导航小世界向量索引)。
注意:
- 当向量索引类型为
IVF时,支持创建本地索引(LOCAL index); - 当类型为
HNSW时,创建本地索引会在文档处理前抛出错误。
示例:
CREATE HYBRID VECTOR INDEX my_hybrid_idx on
doc_table(text_column)
parameters('MODEL my_doc_model
VECTOR_IDXTYPE IVF')
LOCAL PARALLEL;
3.3.1.2 使用向量器偏好设置(vectorizer preference)
向量器偏好设置是包含分块、嵌入、向量索引相关参数的 JSON 对象,需通过DBMS_VECTOR_CHAIN.CREATE_PREFERENCE函数创建,再通过VECTORIZER参数引用。
创建向量器偏好设置示例:
begin
DBMS_VECTOR_CHAIN.CREATE_PREFERENCE(
'my_vectorizer_pref', -- 偏好设置名称
dbms_vector_chain.vectorizer, -- 类型
json('{
"vector_idxtype": "hnsw", -- 向量索引类型
"model" : "my_doc_model", -- 嵌入模型
"by" : "words", -- 分块方式
"max" : 100, -- 最大分块大小
"overlap" : 10, -- 分块重叠度
"split" : "recursively" -- 分块策略
}'
));
end;
/
引用向量器偏好设置创建索引示例:
CREATE HYBRID VECTOR INDEX my_hybrid_idx on
doc_table(text_column)
parameters('VECTORIZER my_vectorizer_pref'); -- 引用上述偏好设置
3.3.1.3 外部托管向量嵌入模型的支持
DBMS_VECTOR_CHAIN.CREATE_PREFERENCE允许使用外部托管的向量嵌入模型(如 Oracle 私有 AI 容器、Open AI、谷歌等第三方服务)。注意:目前仅支持与 Oracle 私有 AI 容器建立未加密的 HTTP 连接,不支持 HTTPS。
示例:
begin
dbms_vector_chain.create_preference('hvi_pref_restapi',
DBMS_VECTOR_CHAIN.VECTORIZER,
json('{
"embedder_spec": -- 外部模型配置
{
"provider": "oracleai", -- 服务提供商
"url": "http://myhost.us.example.com:9091/omlmodels/all_mini_l12/score", -- 服务地址
"host": "local",
"model": "all_minilm_l12" -- 模型名称
}
}'));
end;
/
-- 引用外部模型的偏好设置创建索引
CREATE HYBRID VECTOR INDEX my_hybrid_idx on
doc_table(text_column)
parameters('VECTORIZER hvi_pref_restapi');
3.3.2 文本搜索偏好设置(Text Search Preferences)
配置混合向量索引中 “Oracle Text 索引” 部分,定义文本处理和分词阶段的参数,与单独使用 Oracle Text 索引时的参数一致。
[DATASTORE datastore_pref]
[STORAGE storage_pref]
[MEMORY memsize]
[STOPLIST stoplist]
[LEXER lexer_pref]
[FILTER filter_pref]
[WORDLIST wordlist_pref]
[SECTION GROUP section_group]
DATASTORE datastore_pref:数据存储偏好设置,指定源文件的本地 / 远程存储位置。多列 / 多表场景需使用MULTI_COLUMN_DATASTORE或USER_DATASTORE。默认值:DIRECT_DATASTORE;STORAGE storage_pref:存储偏好设置,指定索引表的存储方式(详见《存储类型》);MEMORY memsize:索引时使用的运行时内存量,格式为数值 [K|M|G](1M~CTX_PARAMETERS视图中MAX_INDEX_MEMORY的值,超限时需通过CTX_ADM.SET_PARAMETER调整)。默认值:500MB;STOPLIST stoplist:停用词表名称,标识不应被索引的词(详见CTX_DDL.CREATE_STOPLIST)。默认值:CTXSYS.DEFAULT_STOPLIST;LEXER lexer_pref:分词器 / 多分词器偏好设置,指定文本语言及分词规则(详见《分词器类型》)。默认值:CTXSYS.DEFAULT_LEXER;FILTER filter_pref:过滤器偏好设置,指定格式化文档转纯文本的规则(详见《过滤器类型》)。默认值:二进制列为NULL_FILTER,其他列为AUTO_FILTER;WORDLIST wordlist_pref:词表偏好设置,启用模糊搜索、词干提取等功能(详见《词表类型》);SECTION GROUP section_group:分区组名称,在结构化文档中创建分区(详见CTX_DDL.CREATE_SECTION_GROUP)。默认值:NULL_SECTION_GROUP。
3.3.3 索引维护偏好设置(Index Maintenance Preferences)
配置混合向量索引上的 DML 操作(同步和优化),继承 Oracle Text 索引的维护功能。
[MAINTENANCE AUTO | MAINTENANCE MANUAL]
[SYNC (MANUAL | EVERY "interval-string" | ON COMMIT)]
[OPTIMIZE (MANUAL | AUTO_DAILY | EVERY "interval-string")]
3.3.3.1 MAINTENANCE AUTO | MAINTENANCE MANUAL
指定基表执行插入 / 更新 / 删除时的索引同步维护类型(适用于所有索引分区):
MAINTENANCE AUTO:自动维护,后台通过跟踪 DML 队列自动同步,无需手动配置;MAINTENANCE MANUAL:手动维护,需指定SYNC类型(MANUAL/EVERY/ON COMMIT)。
3.3.3.2 SYNC (MANUAL | EVERY "interval-string" | ON COMMIT)
仅适用于MAINTENANCE MANUAL模式,指定索引同步类型:
MANUAL:需通过CTX_DDL.SYNC_INDEX手动同步;EVERY "interval-string":按指定间隔自动同步(语法同调度任务,需创建者有CREATE JOB权限);ON COMMIT:提交后立即同步(提交需等待同步完成,建议启用STAGE_ITAB索引选项以减少碎片)。
语法示例:
SYNC [EVERY "freq=secondly;interval=20"] MEMORY 500M PARALLEL 2
3.3.3.3 OPTIMIZE (MANUAL | AUTO_DAILY | EVERY "interval-string)
指定索引优化方式:
MANUAL:需通过CTX_DDL.OPTIMIZE_INDEX手动优化;AUTO_DAILY:默认值,每天当地时间午夜执行OPTIMIZE FULL;EVERY "interval-string":按指定间隔自动优化(语法同调度任务)。
语法示例:
OPTIMIZE [EVERY "freq=minutely;interval=20"] PARALLEL 2
3.4 FILTER BY filter_column
指定结构化索引列,用于混合查询WHERE子句中的范围 / 等值谓词(与CONTAINS()谓词配合使用)。
- 支持列类型:
CHAR、NUMBER、DATE、VARCHAR2、RAW(及这些类型的 ADT 属性); - 支持运算符:
<、<=、=、>=、>、BETWEEN、LIKE(仅VARCHAR2); - 限制:
CHAR/VARCHAR2最大长度≤249 字节(若以字符为单位,需满足≤FLOOR(249/max_char_width),如AL32UTF8字符集≤62 字符);不支持表达式和虚拟列。
3.5 ORDER BY oby_column[desc|asc]
指定结构化索引列,用于对查询结果排序。
- 支持列类型:
CHAR、NUMBER、DATE、VARCHAR2、RAW(不支持表达式和虚拟列); - 长度限制:
VARCHAR2/RAW超过 249 字节时截断为前 249 字节; - 排序规则:
DESC(降序)、ASC(默认,升序); - 查询兼容性:查询
ORDER BY子句可包含完整有序列、有序列前缀、分数 + 有序列前缀。
3.6 [PARALLEL n]
指定并行度以提升索引创建性能(适用于多 CPU 场景)。实际并行度受资源限制可能降低,支持本地分区索引的并行创建。
内存计算:总 PGA 内存 = 参数子句中MEMORY值 × 并行度(如MEMORY 1G+PARALLEL 4,总 PGA 内存为 4GB)。
4. 示例
4.1 直接指定向量搜索偏好设置
-- 基础示例(默认IVF向量索引)
CREATE HYBRID VECTOR INDEX my_hybrid_idx on
doc_table(text_column)
parameters('MODEL my_doc_model');
-- 指定HNSW向量索引
CREATE HYBRID VECTOR INDEX my_hybrid_idx on
doc_table(text_column)
parameters('MODEL my_doc_model
VECTOR_IDXTYPE HNSW');
4.2 使用 VECTORIZER 指定向量搜索偏好设置
-- 创建向量器偏好设置
begin
DBMS_VECTOR_CHAIN.CREATE_PREFERENCE(
'my_vectorizer_spec',
dbms_vector_chain.vectorizer,
json('{"vector_idxtype" : "hnsw",
"model" : "my_doc_model",
"by" : "words",
"max" : 100,
"overlap" : 10,
"split" : "recursively"}'));
end;
/
-- 引用偏好设置创建索引
CREATE HYBRID VECTOR INDEX my_hybrid_idx on
doc_table(text_column)
parameters('VECTORIZER my_vectorizer_spec');
4.3 同时指定向量和文本搜索偏好设置
sql
CREATE HYBRID VECTOR INDEX my_hybrid_idx on
doc_table(text_column)
parameters('MODEL my_doc_model -- 向量参数
DATASTORE my_datastore -- 文本数据存储
STORAGE my_storage -- 文本存储
STOPLIST my_stoplist -- 停用词表
LEXER my_lexer') -- 分词器
ORDER BY docid asc; -- 排序列
4.4 完整示例(含向量、文本、维护偏好设置)
-- 创建向量器偏好设置
begin
DBMS_VECTOR_CHAIN.CREATE_PREFERENCE(
'my_vectorizer_spec',
dbms_vector_chain.vectorizer,
json('{
"vector_idxtype" : "hnsw",
"model" : "my_doc_model",
"by" : "words",
"max" : 100,
"overlap" : 10,
"split" : "recursively"
}'
));
end;
/
-- 创建混合向量索引
CREATE HYBRID VECTOR INDEX my_hybrid_idx on
doc_table(text_column)
parameters('VECTORIZER my_vectorizer_spec -- 向量偏好
DATASTORE my_datastore -- 文本数据存储
STORAGE my_storage -- 文本存储
MEMORY 128M -- 内存设置
MAINTENANCE AUTO -- 自动维护
OPTIMIZE AUTO_DAILY -- 自动优化
STOPLIST my_stoplist -- 停用词表
LEXER my_lexer -- 分词器
FILTER my_filter -- 过滤器
WORDLIST my_wordlist -- 词表
SECTION GROUP my_section_group') -- 分区组
FILTER BY category, author -- 过滤列
ORDER BY score(10), score(20) desc -- 排序
PARALLEL 3; -- 并行度
更多推荐



所有评论(0)