当数据处理遇上 AI,企业最头疼的是什么?—— 结构化数据在数仓,非结构化数据在搜索/向量库,AI 分析依赖独立引擎,多系统联动导致延迟高、成本高、开发复杂。
★注意:组件越多,复杂度就会越高~
Apache Doris 4.x 的 AI 能力,从底层把全文检索、向量搜索和 AI 函数原生集成到同一个实时分析引擎中,让你在一个系统里完成“结构化分析 + 文本搜索 + 向量检索 + AI 智能处理”。向量库、搜索引擎可以不再是必选项;而大模型本身通过 Doris 的 AI Resource 机制统一接入(如 OpenAI、DeepSeek、Gemini、本地模型等),在 SQL 中直接调用。
在 Doris 4.x 之前,企业处理“结构化 + 非结构化数据”的 AI 需求时,普遍面临三大痛点:
典型方案往往是:数仓(如 Doris/Hive)+ 向量库 + 搜索引擎 + AI 引擎(LLM 服务)。多系统部署和运维成本高,数据在系统间同步带来延迟和一致性问题。
开发人员需要同时掌握 SQL、搜索 DSL、向量库 API、LLM 调用方式等,多系统间的关联分析逻辑复杂,调试成本高。
向量搜索结果、全文检索结果与结构化过滤往往需要在应用层拼接,跨系统网络开销和数据搬运导致整体查询延迟高,很难满足实时分析和在线服务场景。
Doris 4.0 的核心解法是“AI 原生集成”:在一个 MPP 实时分析引擎中,同时提供结构化分析、全文检索、向量搜索和 AI 函数能力,统一存储与计算路径,减少系统间数据流转,从架构层面降低复杂度和延迟。
Doris 4.x 的 AI 能力主要围绕三大模块展开:文本搜索、向量搜索、AI 函数,全部通过 SQL 原生调用。
Doris 自 2.0 起引入倒排索引和基础全文检索能力,在 4.0 中进一步增强,提供统一的 SEARCH() 函数和 BM25 相关性评分,用于高性能文本检索和 TopN 排序。
对文本列建立倒排索引,将“词 → 文档列表”进行存储,支持高效的关键词、短语等检索。
Doris 4.0 引入 BM25 算法,对匹配行计算相关性得分,可用于按相关性排序返回 TopN 结果。
使用示例:
SELECT id, title, score() AS relevance
FROM docs
WHERE content MATCH_ANY 'real-time OLAP analytics'
ORDER BY relevance DESC
LIMIT 10;
4.0 新增 SEARCH() 函数,提供类似 Elasticsearch Query String 的轻量 DSL,可在一个函数中组合多字段、多条件的全文检索逻辑,并将可下推条件推入倒排索引执行。
示例:
-- Term 查询
SELECT * FROM docs WHERESEARCH('title:apache');
-- ANY:匹配任意一个值
SELECT * FROM docs WHERESEARCH('tags:ANY(java python golang)');
-- ALL:要求同时包含所有值
SELECT * FROM docs WHERESEARCH('tags:ALL(machine learning)');
-- 多字段布尔组合
SELECT * FROM docs
WHERESEARCH('(title:Doris OR content:database) AND NOT category:archived');
-- 结合结构化过滤
SELECT * FROM docs
WHERESEARCH('title:apache') AND publish_date >= '2025-01-01';
除 SEARCH() 外,Doris 还提供 MATCH_ANY、MATCH_ALL、MATCH_PHRASE、MATCH_PHRASE_PREFIX、MATCH_REGEXP 等操作符,用于关键词匹配、短语匹配、前缀匹配和正则匹配等场景。
SELECT id, title, price, score() AS relevance
FROM product_table
WHERE title MATCH_ANY '手机'
AND price <= 5000
ORDER BY relevance DESC
LIMIT 10;
上述查询中:
MATCH_ANY '手机' 使用倒排索引进行关键词匹配;score() 使用 BM25 计算相关性得分,并按得分排序返回 TopN。
Doris 4.0 引入向量索引能力,可以在同一引擎中完成结构化查询与向量相似度检索,无需额外部署独立向量数据库。
向量列类型为 ARRAYNOT NULL,并要求导入向量的维度与索引属性中的 dim 完全一致。[向量索引]
目前支持的索引类型为 HNSW(Hierarchical Navigable Small Worlds),通过图结构实现高效的近似最近邻(ANN)检索。索引属性包括:
Doris 提供近似相似度计算函数:
Doris 默认采用“先过滤后向量 TopN”的预过滤机制:先利用可精确定位的索引(如倒排索引、结构化条件)缩小候选集,再在剩余数据上做 ANN 检索,兼顾可解释性和性能。
建表并创建 HNSW 向量索引与文本倒排索引:
CREATE TABLE doc_store (
idBIGINT,
title STRING,
tags ARRAY<STRING>,
embedding ARRAY<FLOAT> NOTNULL,
INDEX idx_vec (embedding) USING ANN PROPERTIES (
"index_type" = "hnsw",
"metric_type" = "l2_distance",
"dim" = "768",
"quantizer" = "flat"-- flat / sq8 / sq4
),
INDEX idx_title (title) USING INVERTED PROPERTIES ("parser" = "english")
)
DUPLICATEKEY(id)
DISTRIBUTEDBYHASH(id) BUCKETS 16
PROPERTIES("replication_num"="1");
TopN 向量检索:
SELECT id, l2_distance_approximate(embedding, [...]) AS dist
FROM doc_store
ORDER BY dist ASC
LIMIT 10;
混合检索(文本过滤 + 标签过滤 + 向量 TopN):
SELECT id, title,
l2_distance_approximate(embedding, [...]) AS dist
FROM doc_store
WHERE title MATCH_ANY 'music' -- 使用倒排索引过滤
AND array_contains(tags, 'recommendation') -- 结构化过滤
ORDER BY dist ASC
LIMIT 5;
范围查询:
SELECT COUNT(*)
FROM doc_store
WHERE l2_distance_approximate(embedding, [...]) <= 0.35;
Doris 4.x 内置一组 AI 函数,允许在 SQL 中直接调用外部 LLM 服务(如 OpenAI、Anthropic、Gemini、DeepSeek、本地模型等),完成文本生成、翻译、摘要、分类、情感分析等任务。模型本身由外部提供,Doris 通过 RESOURCE 机制统一管理访问配置。
在使用 AI 函数前,需要创建 type = 'ai' 的 Resource,配置外部模型的访问信息,例如:
CREATE RESOURCE "ai_resource_name"
PROPERTIES (
'type' = 'ai',
'ai.provider_type' = 'openai',
'ai.endpoint' = 'https://endpoint_example',
'ai.model_name' = 'model_example',
'ai.api_key' = 'sk-xxx',
'ai.temperature' = '0.7',
'ai.max_tokens' = '1024',
'ai.max_retries' = '3',
'ai.retry_delay_second' = '1'
);
然后可以通过会话变量设置默认资源:
SET default_ai_resource = 'ai_resource_name';
调用时可以显式指定资源,也可以省略使用默认资源:
-- 使用默认资源
SELECT AI_SENTIMENT('Apache Doris is a great DBMS.');
-- 显式指定资源
SELECT AI_TRANSLATE('ai_resource_name', 'this is a test', 'Chinese');
示例 1:生成摘要
可以使用 AI_SUMMARIZE 对长文本生成摘要(具体提示词和长度控制可通过函数参数或 prompt 设计实现):
SET default_ai_resource = 'ai_resource_name';
SELECT id, title,
AI_SUMMARIZE(content) AS summary
FROM news_table
LIMIT 3;
示例 2:情感分析
对用户评论进行情感分类:
SET default_ai_resource = 'ai_resource_name';
SELECT comment,
AI_SENTIMENT(comment) AS sentiment
FROM user_comment_table;
示例 3:语义筛选(招聘场景)
SELECT
c.candidate_id, c.name,
j.job_id, j.title
FROM candidate_profiles AS c
JOIN job_requirements AS j
WHERE AI_FILTER(CONCAT('Does the following candidate self-introduction match the job description?',
'Job: ', j.jd_text, ' Candidate: ', c.self_intro));
Doris 4.x AI 能力相对传统多系统方案的优势如下:
在AI场景下,Doris 可以定位为“一套引擎同时支持分析、全文检索和向量搜索”,并通过 AI 函数把 LLM 能力引入 SQL 工作流。
在一个 Doris 集群中完成结构化分析、文本搜索、向量检索和 AI 调用,减少对独立搜索/向量引擎的依赖,降低系统数量和运维复杂度。
所有能力通过 SQL 原生调用,数据团队无需额外学习多套 DSL 或 SDK,即可构建从数据查询到 AI 分析的完整链路。
数据同源存储 + 面向 AI 场景的查询优化(倒排索引、向量索引、BM25 评分、预过滤等),显著降低查询延迟,适用于实时分析、RAG 检索、推荐、风控等在线场景。