Apache Doris 已经深度拥抱 AI。自 4.0+ 版本起,它集成了**向量检索、AI 函数和混合搜索 (HSAP)**三大核心能力,让你能用熟悉的 SQL 轻松结合 AI 模型处理非结构化数据。

🧠 Doris AI 核心能力概览

  • AI 函数:直接调用大模型处理文本。适合情感分析、文本摘要、信息分类等,支持 OpenAI、DeepSeek 等众多厂商。
  • 向量检索:为高维向量数据(如图片、语义特征)创建索引 (HNSW/IVF) 进行相似性搜索。适合以图搜图、语义搜索、推荐系统去重等。
  • 混合搜索 (HSAP):融合全文检索 (BM25)、向量检索 (ANN)、结构化过滤 (WHERE/JOIN)。适合复杂商业分析场景,如带用户画像约束的智能推荐。

🔧 实战演练:三步玩转 Doris AI

第一步:配置 AI 资源 (Resource)

这是连接 AI 模型服务的“钥匙”。所有厂商的接入方式类似,修改参数即可,以两个主流方案为例:

  • 创建云端 AI 资源 (如 DeepSeek)
  • 创建本地模型资源 (如 Ollama)
    CREATE RESOURCE "deepseek_resource" PROPERTIES (
        'type' = 'ai',
        'ai.provider_type' = 'deepseek',
        'ai.endpoint' = 'https://api.deepseek.com/v1',
        'ai.model_name' = 'deepseek-chat',   
    

这不是 Docker 镜像,而是 Doris 内部一个用于管理与外部 AI 服务连接配置的“资源对象”。

第二步:使用 AI 函数,文本处理一句搞定

配置好资源后,就能在 SQL 中启用了。先用瞬时会话变量 SET default_ai_resource = 'deepseek_resource'; 指定默认资源,然后直接使用函数。官方提供了丰富的内置 AI 函数,足以覆盖多数场景。

核心 AI 函数速览

函数名 能力 示例
AI_SENTIMENT 文本情感分析 SELECT AI_SENTIMENT('这个产品真不错')
AI_CLASSIFY 文本信息分类 SELECT AI_CLASSIFY('我的手机屏幕碎了', ['硬件', '软件', '其他'])
AI_EXTRACT 提取文本关键信息 SELECT AI_EXTRACT('我于2023年6月5日购买了...', ['日期', '事件'])
AI_SUMMARY 生成文本摘要 SELECT AI_SUMMARY('这是一段很长的产品描述文本...')
第三步:掌握混合搜索,语义与关键词并行

混合搜索是 Doris 面向复杂 AI 应用的杀手锏。

-- 5. 使用混合搜索精准定位:既要语义相似,又要关键词匹配,还要结构化过滤
SELECT id, title, author,
       L2_DISTANCE_APPROXIMATE(embedding, array<float>[0.1, 0.2, ...]) AS dist
FROM technical_articles
WHERE title MATCH_ANY 'Doris' -- 关键词全文检索
  AND category_id = 2     -- 结构化过滤
ORDER BY dist ASC
LIMIT 10;

背后的技术:混合搜索中,全文检索基于 BM25 算法,向量检索基于 HNSW/IVF 近似最近邻算法 (ANN)。对于高维向量,建议为频繁查询的列创建索引以大幅提升效率。

🚀 应用案例:基于多模态数据的智能分析

当单一能力无法胜任复杂需求时,可以将它们组合。在企业数据分析中,AI 函数的价值更显著:可快速对海量评论、工单进行情感分析 (AI_SENTIMENT);也可用 AI_AGG 函数对海量客服工单按类型进行智能聚合分析,几秒内完成传统上数天人工处理的质检工作。

1. 环境准备

首先,按[第一步]创建名为 my_embedding_vendor 的 AI 资源并置为默认。

2. 数据集成与建表

接着,创建包含向量列和全文检索索引的数据表,将用户行为和订单等数据集成到 Doris 中。具体建表示例如下:

-- 建表,包含向量列,用于存储图片的语义特征向量
CREATE TABLE image_search (
    id BIGINT,
    image_path STRING,
    description STRING,
    tags ARRAY<STRING>,
    embedding ARRAY<FLOAT> NOT NULL,
    INDEX ann_idx (embedding) USING ANN PROPERTIES (
        "index_type" = "hnsw",
        "metric_type" = "l2_distance",
        "dim" = "768"          -- 向量维度,取决于生成向量的模型
    ),
    INDEX title_idx (description) USING INVERTED PROPERTIES ("parser" = "english")
) DUPLICATE KEY(id) DISTRIBUTED BY HASH(id) BUCKETS 10;

注意dim 值取决于 AI 模型输出维度(如 OpenAI text-embedding-3-small 为 512)。若值不匹配,可能导致索引构建失败或查询错误。

3. 写入向量与查询

使用 AI 函数写入和检索向量数据,完成智能分析的闭环。

-- 1. 写入图片向量数据(使用 EMBED 函数将文本描述转为向量)
INSERT INTO image_search VALUES (1, 'img/cat1.jpg', '一只橘猫在沙发上睡觉',
                                 ['猫', '宠物', '室内'],
                                 EMBED('my_embedding_vendor', '一只橘猫在沙发上睡觉'));

-- 2. 图片语义检索:查询与指定向量最相似的图片,并结合全文检索进行过滤
SELECT image_path, description,
       L2_DISTANCE_APPROXIMATE(embedding, EMBED('my_embedding_vendor', '一个毛茸茸的动物')) AS dist
FROM image_search
WHERE tags HAS '猫' AND description MATCH_ANY '睡觉'
ORDER BY dist ASC LIMIT 20;

💡 总结与实践提示

Doris 选型 (AVX2) 与 AI 功能协作紧密:向量索引构建是高强度 CPU 计算,使用 AVX2 版本可显著提升索引构建速度和查询性能。

  • 尝试 AI 函数:在测试环境先用 AI_SENTIMENT 等初步分析。
  • 试用混合搜索:整合全文、向量检索和结构化查询。
  • 生态集成
    • MCP Server:可通过 doris-mcp-server 与 LangChain/Dify 集成,用自然语言查询数据。
    • RAG 系统:作为私有知识库和数据存储底座,开发智能问答/知识库应用。
Logo

更多推荐