Apache Doris Ai Function学习

一、概述

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 hnswivfivf_on_disk --- ANN 索引算法
metric_type l2_distanceinner_product --- 距离度量方式
dim 正整数 --- 向量维度,导入数据必须与此一致
quantizer flatsq8sq4pq 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_ANYMATCH_ALL 算子;多语言分词器
功能扩展 2.x → 3.x MATCH_PHRASEMATCH_PHRASE_PREFIXMATCH_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 :分词算法,支持 standardngramedge_ngramkeywordicu
  • token_filter :词元规范化,如 lowercaseword_delimiterascii_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)和文档长度的概率模型,对长短文本均有良好鲁棒性,可通过 k1b 参数调整加权策略:

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

五、架构优势总结

  1. 一体化分析:结构化查询 + 向量检索 + 全文检索 + LLM 处理统一在 SQL 中完成,避免多系统数据搬运。
  2. 降低开发成本:AI 能力以函数形式暴露,分析师无需编写应用代码即可调用大模型。
  3. 前过滤保障召回:向量检索与结构化/倒排过滤深度协同,结果可解释、召回稳定。
  4. 灵活的模型接入:支持主流云端大模型与本地模型,便于在成本、性能、合规之间权衡。
  5. 成本可控:向量量化(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/
相关推荐
techdashen1 小时前
Rust 项目管理动态 — 2026 年 2 月
开发语言·后端·rust
Python私教1 小时前
我准备用 AI 二开 shadcn-admin,做一个可交付的后台管理系统模板
后端
DigitalOcean2 小时前
微调后的 LLM 如何部署到生产环境?从GPU 推理端点的搭建、测试与上线全流程
llm·gpu
阿正的梦工坊11 小时前
【Rust】02-变量、不可变性与基础类型
开发语言·后端·rust
我叫黑大帅12 小时前
通过php 中的Route:: 的写法了解什么是静态类调用
后端·面试·php
JS菌13 小时前
AI Agent 沙箱双层防护体系:从权限过滤到内核隔离的完整实现
前端·人工智能·后端
IT空门:门主14 小时前
Spring 注入三剑客:@Resource、@Autowired、@RequiredArgsConstructor 到底该用哪个?
java·后端·spring
ServBay14 小时前
云端 AI 蜜月期宣告结束,为什么 2026 年开发者转向本地优先架构
后端·ai编程
IT_陈寒14 小时前
Vite这个坑我帮你踩了,动态导入居然这样才生效
前端·人工智能·后端