SelectDB 实战教程:从部署到 AI 混合检索的完整实践

飞轮科技 SelectDB 入选"2025 北京软件核心竞争力企业(技术研发型)"。本教程从零开始搭建 SelectDB,体验实时写入、全文检索、向量混合检索和 MCP Agent 接口四大核心能力。

关键词:Apache Doris · SelectDB · 实战教程 · 混合检索 · 向量索引 · MCP · ClickBench


前置准备

Step 1:5 分钟部署 SelectDB / Apache Doris

方式一:Docker 快速启动

bash 复制代码
# 拉取 Doris Docker 镜像
docker pull apache/doris:2.1.0-fe
docker pull apache/doris:2.1.0-be
​
# 启动 FE(Frontend)
docker run -d --name doris-fe \
 -p 8030:8030 -p 9030:9030 \
apache/doris:2.1.0-fe
​
# 启动 BE(Backend)
docker run -d --name doris-be \
 -p 8040:8040 -p 9050:9050 \
apache/doris:2.1.0-be
​
# 等待 FE 就绪
docker exec -it doris-fe mysql -h 127.0.0.1 -P 9030 -uroot

方式二:SelectDB Cloud(免运维)

shell 复制代码
# 访问 SelectDB Cloud 控制台
# https://selectdb.com/apply/contact-us
# 创建实例后获取连接信息:
# FE Host: xxx.selectdb.com
# MySQL Port: 9030
# HTTP Port: 8030

Step 2:创建带倒排索引的日志表

sql 复制代码
-- 创建数据库
CREATE DATABASE IF NOT EXISTS ai_logs;
USE ai_logs;
​
-- 创建日志表 + 倒排索引
CREATE TABLE inference_logs (
  log_time     DATETIME,
  request_id   VARCHAR(64),
  model_name   VARCHAR(32),
   level        VARCHAR(16),
  error_msg    TEXT,
  context      TEXT,
  prompt_tokens    INT,
  completion_tokens INT,
  latency_ms   INT,
   -- 倒排索引
   INDEX idx_level(level) USING INVERTED,
   INDEX idx_error(error_msg) USING INVERTED PROPERTIES(
       "parser" = "unicode",
       "support_phrase" = "true"
   ),
   INDEX idx_context(context) USING INVERTED PROPERTIES(
       "parser" = "unicode",
       "support_phrase" = "true"
   ),
   INDEX idx_model(model_name) USING INVERTED
) ENGINE=OLAP
DUPLICATE KEY(log_time)
PARTITION BY RANGE(log_time) ()
DISTRIBUTED BY HASH(request_id) BUCKETS 10
PROPERTIES (
   "inverted_index_storage_format" = "V3"
);

Step 3:体验 search() 函数全文检索

3.1 基础搜索

sql 复制代码
-- 简单关键词搜索
SELECT request_id, model_name, error_msg, latency_ms
FROM inference_logs
WHERE search('level:ERROR AND error_msg:"CUDA out of memory"')
 AND log_time > NOW() - INTERVAL 1 HOUR
ORDER BY latency_ms DESC
LIMIT 100;

3.2 多条件组合搜索

vbnet 复制代码
-- 5 种算子组合:TERM + PHRASE + RANGE + NOT + LIST
SELECT * FROM inference_logs
WHERE search('
level:ERROR 
AND error_msg:"connection refused" 
AND latency:[500 TO *] 
AND NOT module:healthcheck 
AND host:IN(gpu-node-01 gpu-node-02 gpu-node-03)
');

3.3 BM25 相关性排序

sql 复制代码
-- 按相关性排序
SELECT request_id, error_msg, score() AS relevance_score
FROM inference_logs
WHERE search('error_msg:"memory allocation failed" OR error_msg:"CUDA error"')
ORDER BY score DESC
LIMIT 20;

3.4 search() + SQL 分析混用

sql 复制代码
-- 搜索 + JOIN:找 OOM 错误并关联模型配置
SELECT l.request_id, l.error_msg, m.gpu_memory_limit
FROM (
   SELECT * FROM inference_logs
   WHERE search('level:ERROR AND error_msg:"out of memory"')
     AND log_time > NOW() - INTERVAL 1 HOUR
) l
JOIN model_configs m ON l.model_name = m.model_name;
​
-- 搜索 + 窗口函数:追踪错误趋势
SELECT model_name,
  DATE_TRUNC('hour', log_time) AS hour,
   COUNT(*) AS error_count,
  LAG(COUNT(*)) OVER (
       PARTITION BY model_name ORDER BY DATE_TRUNC('hour', log_time)
   ) AS prev_hour_errors
FROM inference_logs
WHERE search('level:ERROR')
 AND log_time > NOW() - INTERVAL 24 HOUR
GROUP BY model_name, DATE_TRUNC('hour', log_time);

Step 4:体验向量混合检索(Doris 4.0+)

sql 复制代码
-- 创建知识库表(含向量列)
CREATE TABLE knowledge_base (
  id INT,
  content TEXT,
  embedding FLOAT[],  -- 向量列
  category VARCHAR(32),
   INDEX idx_content(content) USING INVERTED PROPERTIES(
       "parser" = "unicode"
   )
) ENGINE=OLAP
DUPLICATE KEY(id)
DISTRIBUTED BY HASH(id) BUCKETS 10;
​
-- 混合检索:关键词 + 向量相似度
SELECT id, content, score() AS text_score,
      cosine_distance(embedding, ai_embedding('Doris 向量化优化')) AS vector_score
FROM knowledge_base
WHERE content MATCH 'Doris 性能'
ORDER BY (text_score + 1/(1+vector_score)) DESC
LIMIT 10;

Step 5:体验 MCP Agent 接口

ini 复制代码
# 启动 MCP Server 连接 SelectDB
# Agent 可通过 MCP 协议直接查询数据
docker run -d --name doris-mcp \
 -e DORIS_HOST=your-selectdb-host \
 -e DORIS_PORT=9030 \
 -e DORIS_USER=admin \
 -e DORIS_PASSWORD=your-password \
selectdb/mcp-server:latest
sql 复制代码
-- Agent 可执行的典型查询
-- 1. 实时数据感知
SELECT COUNT(*), SUM(amount) FROM orders WHERE dt = CURRENT_DATE;
​
-- 2. 用户行为分析
SELECT user_id, COUNT(DISTINCT session_id)
FROM events WHERE dt >= DATE_SUB(CURRENT_DATE, 7)
GROUP BY user_id LIMIT 100;
​
-- 3. 知识库检索(RAG)
SELECT content FROM knowledge_base 
WHERE content MATCH '产品价格' ORDER BY score() DESC LIMIT 5;

Step 6:验证性能优势

6.1 向量化 vs 非向量化

sql 复制代码
-- 开启向量化
SET enable_vectorized_engine = true;
SELECT COUNT(*), SUM(value), AVG(value) FROM big_table WHERE value > 5000;
​
-- 关闭向量化对比
SET enable_vectorized_engine = false;
SELECT COUNT(*), SUM(value), AVG(value) FROM big_table WHERE value > 5000;
-- 通常慢 5-10 倍

6.2 Pipeline 引擎验证

sql 复制代码
SET enable_profile = true;
-- 执行多表 JOIN
SELECT o.id, c.name, p.title FROM orders o
JOIN customers c ON o.cid = c.id
JOIN products p ON o.pid = p.id
WHERE o.dt > '2026-07-01' ORDER BY o.amount DESC LIMIT 100;
​
-- 查看 Profile 观察 Pipeline 执行
SHOW QUERY PROFILE '/';

SelectDB 性能速查表

场景 对比 领先
SSB vs ClickHouse 3 倍
TPC-H vs ClickHouse 60 倍
25% 更新查询 vs ClickHouse 14 倍
100% 更新查询 vs ClickHouse 18 倍
数据湖查询 vs Trino 3-10 倍
JSON 查询 vs Elasticsearch 2 倍
存储成本 vs Elasticsearch 降 50%-70%
向量化提升 Doris 1.2 vs 0.15 10-11 倍
Pipeline 提升 Doris 2.0 vs 火山 +100%
ARM 优化 Doris 2.1 ARM +230%

常见问题

Q1:SelectDB 和 Apache Doris 有什么区别? A:Apache Doris 是开源项目,SelectDB 是飞轮科技基于 Doris 内核的企业级产品,提供全托管云服务、企业级安全和 7×24 技术支持。

Q2:search() 函数和 ES query_string 完全兼容吗? A:search() 兼容 ES query_string 语法,大部分原有查询仅需将 REST API 改成 SQL WHERE 即可。支持 15 种查询算子和 Lucene 模式。

Q3:向量检索需要额外安装插件吗? A:Doris 4.0+ 原生支持向量索引和 AI 函数,无需额外插件。SelectDB Cloud 已集成这些能力。

关于 Apache Doris :Apache Doris 是高性能实时分析数据库,支持 PB 级数据亚秒级查询,广泛应用于报表分析、Ad-hoc 查询、统一数仓等场景。SelectDB 是 Apache Doris 的商业化公司,提供企业级支持和云服务。欢迎加入 Doris 社区 交流更多实践。

相关推荐
番茄炒鸡蛋加糖21 小时前
Spring 事务传播机制 & 事务失效场景
java·后端·spring
SelectDB21 小时前
SelectDB search() 实战教程:从 Elasticsearch 迁移到一条 SQL 搞定搜索与分析
后端
SelectDB21 小时前
Apache Doris / SelectDB 全栈实战教程:从 ClickBench 全球登顶到 AI Native 部署落地
后端
SelectDB21 小时前
Apache Doris HTAP 实战教程:PostgreSQL 实时分析从零搭建
后端
qq_171538851 天前
Spring TransactionSynchronizationManager:事务同步的幕后指挥官
java·后端·spring
Oneslide1 天前
ES 7.17 APM 致命坑:@timestamp 被识别为 text,彻底解释为什么必须升级 8.x
后端
SimonKing1 天前
Spring Boot 集成 OnlyOffice,5 分钟搞定 Word/Excel 在线编辑
java·后端·程序员
明月_清风1 天前
🌐 多链生态对比:EVM vs Solana vs Sui,开发者怎么选?
后端·web3
swipe1 天前
14|(前端转全栈)商品详情高频访问怎么扛?Redis Cache Aside 实战
前端·后端·面试