一、概述
Apache Doris 是一款基于 MPP 架构的高性能、实时分析型数据库。随着大模型与向量检索技术在企业级场景的加速落地,从 Apache Doris 4.0 版本开始,Doris 围绕 "AI 驱动、搜索增强、离线提效" 三大方向进行了重大升级,正式将 AI 能力深度集成到数据库内核。
通过原生的向量索引与 AI 函数库,Doris 突破了传统数据库的功能边界,能够高效融合企业的结构化数据与非结构化数据 ,从单纯的分析数据库升级为企业核心的 "AI 分析中枢" ,为智能化决策与创新应用提供稳定、高效的底层数据支撑。
二、核心 AI 能力
Doris 的 AI 能力主要由两大支柱构成:向量函数(Vector Funtions) 与 AI 函数库(AI Functions) 。
1. 向量函数(Vector Functions)
Doris 的向量函数位于 ai-functions/distance-functions 下,整体分为两类:精确距离函数 (对全量数据逐条计算)和近似距离函数 (带 _APPROXIMATE 后缀,可利用 ANN 索引加速检索)。
精确距离函数
这类函数对向量逐条精确计算,不依赖 ANN 索引,适合数据量较小或需要精确结果的场景。
| 函数 | 语法 | 说明 |
|---|---|---|
L2_DISTANCE |
L2_DISTANCE(<array1>, <array2>) |
计算欧几里得空间中两点(向量值为坐标)之间的距离,即欧氏距离 |
L1_DISTANCE |
L1_DISTANCE(<array1>, <array2>) |
计算两个向量之间的 L1 距离(曼哈顿距离) |
COSINE_DISTANCE |
COSINE_DISTANCE(<array1>, <array2>) |
计算两个向量之间的余弦距离 |
INNER_PRODUCT |
INNER_PRODUCT(<array1>, <array2>) |
计算两个向量的内积 |
EMBED |
EMBED([<resource_name>], <text>) |
向量函数分类下的嵌入相关函数 |
近似距离函数(ANN 索引加速)
这类函数是对应精确函数的近似版本。如果相关的数组列上构建了 ANN 索引,函数结果可直接从索引中获取,从而大幅提升大规模向量检索的性能。
| 函数 | 语法 | 对应 metric_type | 相似度规则 |
|---|---|---|---|
L2_DISTANCE_APPROXIMATE |
L2_DISTANCE_APPROXIMATE(<array1>, <array2>) |
l2_distance |
数值越小越相似 |
INNER_PRODUCT_APPROXIMATE |
INNER_PRODUCT_APPROXIMATE(<array1>, <array2>) |
inner_product |
数值越大越相似 |
关键点:近似函数要发挥加速作用,建表时 ANN 索引的 metric_type 必须与所用函数匹配(L2 用 l2_distance,内积用 inner_product)。
2. AI 函数库(AI Functions)
AI 函数库让数据分析师能够直接通过简单的 SQL 语句调用大语言模型进行文本处理。无论是提取重要信息、对评论做情感分类,还是生成文本摘要,都可以在数据库内部无缝完成,无需额外的应用层开发。
函数清单
| 函数 | 功能说明 |
|---|---|
AI_CLASSIFY |
在给定标签中提取与文本匹配度最高的单个标签 |
AI_EXTRACT |
根据文本内容,为每个给定标签提取相关信息 |
AI_FILTER |
判断文本内容是否正确,返回 bool 类型 |
AI_FIXGRAMMAR |
修复文本中的语法、拼写错误 |
AI_GENERATE |
基于参数内容生成内容 |
AI_MASK |
根据标签将敏感信息用 [MASKED] 替换 |
AI_SENTIMENT |
分析文本情感倾向(positive/negative/neutral/mixed) |
AI_SIMILARITY |
判断两段文本的语义相似度(0--10 浮点数,越大越相似) |
AI_SUMMARIZE |
对文本进行高度总结概括 |
AI_TRANSLATE |
将文本翻译为指定语言 |
AI_AGG |
对多条文本进行跨行聚合分析 |
支持的大模型
目前支持接入:OpenAI、Anthropic、Gemini、DeepSeek、MoonShot、MiniMax、Zhipu(智谱)、Qwen(通义千问)、Baichuan(百川) ,以及 Local 本地模型。
三、核心检索能力
向量索引(Vector Index / ANN)
Apache Doris 自 4.0 版本起原生支持 ANN(Approximate Nearest Neighbor,近似最近邻)向量搜索,基于 Faiss 实现 HNSW 与 IVF 索引,可在亿级向量数据上实现毫秒级 TopN 与范围检索。
适用场景
- RAG 检索:从大规模知识库中检索与用户查询最相关的 Top-K 文本片段,缓解模型幻觉与知识时效性问题
- 多模态检索:将图片、语音、视频等数据编码为向量,用于语义相似度查询
- 推荐系统:基于范围搜索获取"相似但不重复"的候选内容,提升推荐多样性
- 异常检测:定位远离正常模式的数据点
建表语法
Doris 不引入额外数据类型,向量以定长 ARRAY<FLOAT> 存储:
sql
CREATE TABLE sift_1M (
id int NOT NULL,
embedding array<float> NOT NULL COMMENT "",
INDEX ann_index (embedding) USING ANN PROPERTIES(
"index_type" = "hnsw",
"metric_type" = "l2_distance",
"dim" = "128",
"quantizer" = "flat"
)
) ENGINE=OLAP
DUPLICATE KEY(id)
DISTRIBUTED BY HASH(id) BUCKETS 1
PROPERTIES ("replication_num" = "1");
完整索引参数
| 参数 | 必填 | 可选值 | 默认值 | 说明 |
|---|---|---|---|---|
index_type |
✅ | hnsw、ivf、ivf_on_disk |
--- | ANN 索引算法 |
metric_type |
✅ | l2_distance、inner_product |
--- | 距离度量方式 |
dim |
✅ | 正整数 | --- | 向量维度,导入数据必须与此一致 |
quantizer |
否 | flat、sq8、sq4、pq |
flat |
向量编码方式 |
nlist |
否 | 正整数 | 1024 |
IVF 倒排桶数量,仅 ivf/ivf_on_disk 生效 |
max_degree |
否 | 正整数 | 32 |
HNSW 单节点最大邻居数(M) |
ef_construction |
否 | 正整数 | 40 |
HNSW 构建阶段候选队列大小 |
pq_m |
pq 必填 |
正整数 | --- | 子向量分割数(dim 须能被整除) |
pq_nbits |
pq 必填 |
正整数 | --- | 每个子向量量化比特数 |
查询规则
使用 _APPROXIMATE 函数才会触发 ANN 索引路径:
索引 metric_type |
对应查询函数 | 排序方向 |
|---|---|---|
l2_distance |
L2_DISTANCE_APPROXIMATE() |
ORDER BY dist ASC(越小越近) |
inner_product |
INNER_PRODUCT_APPROXIMATE() |
ORDER BY dist DESC(越大越近) |
性能参考:同一 SIFT 数据集上,精确 l2_distance 耗时约 290ms ,启用 ANN 索引后降至约 20ms。
倒排索引(Inverted Index / 文本搜索)
Doris 从 2.0.0 版本引入倒排索引以支持全文搜索,并在后续版本持续扩展能力。
版本演进
| 阶段 | 版本 | 关键能力 |
|---|---|---|
| 基础阶段 | 2.0+ | 列级倒排索引;MATCH_ANY、MATCH_ALL 算子;多语言分词器 |
| 功能扩展 | 2.x → 3.x | MATCH_PHRASE、MATCH_PHRASE_PREFIX、MATCH_REGEXP;3.1 引入自定义分词 |
| 能力增强 | 4.0+ | BM25 相关性打分(score());统一查询入口 SEARCH() 函数 |
文本搜索算子
| 算子 | 说明 | 典型场景 |
|---|---|---|
MATCH_ANY |
任意词匹配(OR) | 通用关键词检索 |
MATCH_ALL |
全词匹配(AND) | 多关键词精确过滤 |
MATCH_PHRASE |
精确短语匹配,支持自定义词距(slop)与顺序控制 | 邻近词语查询 |
MATCH_PHRASE_PREFIX |
短语前缀匹配 | 自动补全、增量搜索 |
MATCH_REGEXP |
正则表达式匹配 | 模式化文本检索 |
自定义分词(3.1+)
通过组合三类组件实现细粒度文本控制:
- char_filter:分词前做符号替换、去除或标准化
- tokenizer :分词算法,支持
standard、ngram、edge_ngram、keyword、icu等 - token_filter :词元规范化,如
lowercase、word_delimiter、ascii_folding等
sql
-- 定义自定义分词器
CREATE INVERTED INDEX ANALYZER IF NOT EXISTS keyword_lowercase
PROPERTIES (
"tokenizer" = "keyword",
"token_filter" = "asciifolding, lowercase"
);
-- 建表时使用
CREATE TABLE docs (
id BIGINT,
content TEXT,
INDEX idx_content (content) USING INVERTED PROPERTIES(
"analyzer" = "keyword_lowercase",
"support_phrase" = "true"
)
);
BM25 相关性打分(4.0+)
基于词频(TF)、逆文档频率(IDF)和文档长度的概率模型,对长短文本均有良好鲁棒性,可通过 k1、b 参数调整加权策略:
sql
SELECT id, title, score() AS relevance
FROM docs
WHERE content MATCH_ANY '实时 OLAP 分析'
ORDER BY relevance DESC
LIMIT 10;
SEARCH 函数:统一查询入口(4.0+),提供轻量级 DSL 全文检索
- 一个函数搞定全文检索 :将复杂文本检索算子收拢到
SEARCH()统一入口,语法贴近 Elasticsearch Query String,降低 SQL 拼接复杂度与迁移成本。 - 多条件索引下推:复杂检索条件直接下推至倒排索引执行,显著提升性能。
sql
-- 词项查询
SELECT * FROM docs WHERE search('title:apache');
-- ANY:匹配任意一个值
SELECT * FROM docs WHERE search('tags:ANY(java python golang)');
-- ALL:同时包含多个值
SELECT * FROM docs WHERE search('tags:ALL(machine learning)');
当前支持词项查询、ANY/ALL 多值匹配、布尔组合(AND/OR/NOT)、多字段搜索;后续版本将迭代支持短语、前缀、通配符、正则、范围、列表等语法。
索引管理
sql
-- 建表时创建
CREATE TABLE t (
content STRING,
INDEX idx(content) USING INVERTED PROPERTIES ("parser" = "chinese")
);
-- 现有表上追加
CREATE INDEX idx_content ON docs(content) USING INVERTED PROPERTIES ("parser" = "chinese");
-- 为存量数据构建
BUILD INDEX idx_content ON docs;
-- 删除索引
DROP INDEX idx_content ON docs;
混合搜索:向量 + 文本
两种索引在 RAG 场景中协同互补:
| 文本搜索 | 向量搜索 | |
|---|---|---|
| 特点 | "找准"------可控、可解释的精确匹配 | "找全"------语义相似性扩展召回 |
| 适用 | 关键词检索、短语匹配、布尔过滤 | 语义检索、近似匹配 |
sql
-- 混合检索:语义召回 + 关键词约束
SELECT id, title, score() AS text_relevance
FROM docs
WHERE
cosine_distance(embedding, [0.1, 0.2, ...]) < 0.3
AND SEARCH('title:搜索 AND content:引擎 AND category:技术')
ORDER BY text_relevance DESC
LIMIT 10;
四、典型应用场景
| 场景 | 关键能力 | 价值 |
|---|---|---|
| 语义搜索 / RAG 检索 | 向量索引 + 倒排索引 | 在一套系统内完成关键词与语义双路检索 |
| 智能推荐 | 向量相似性 + 结构化过滤 | 结合用户标签做精准召回 |
| 文本智能分析 | AI 函数库 | SQL 直接完成情感分析、分类、摘要 |
| 数据脱敏与治理 | AI_MASK |
入库即脱敏,保护隐私数据 |
| 多语言处理 | AI_TRANSLATE |
数据库内完成翻译,简化 ETL |
五、架构优势总结
- 一体化分析:结构化查询 + 向量检索 + 全文检索 + LLM 处理统一在 SQL 中完成,避免多系统数据搬运。
- 降低开发成本:AI 能力以函数形式暴露,分析师无需编写应用代码即可调用大模型。
- 前过滤保障召回:向量检索与结构化/倒排过滤深度协同,结果可解释、召回稳定。
- 灵活的模型接入:支持主流云端大模型与本地模型,便于在成本、性能、合规之间权衡。
- 成本可控:向量量化(SQ8/SQ4)显著降低内存占用,支撑更大规模的向量数据。
六、获取与参考
- GitHub 下载:
https://github.com/apache/doris/releases - 官网下载:
https://doris.apache.org/download - AI 函数文档:
https://doris.apache.org/zh-CN/docs/dev/sql-manual/sql-functions/ai-functions/