Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
{
"title": "AI 概述",
"language": "zh-CN",
"description": "AI 技术快速演进的时代,数据基础设施正成为AI应用的核心支撑。Apache Doris 作为一款高性能、实时分析型数据库,深度融合了文本搜索、向量搜索、AI 函数和MCP智能交互能力,构建从数据存储、检索到分析的完整 AI 数据栈。"
"description": "Apache Doris AI 数据栈:支持混合检索(关键词+语义 RRF 融合)、向量搜索、RAG、AI Agent 分析和可观测性,单条 SQL 实现全文检索与向量检索的一体化实时分析。"
}
---

Expand Down Expand Up @@ -49,13 +49,103 @@ Doris凭借高性能MPP架构,在这类面向Agent的分析场景中有非常

![img](/images/vector-search/image-5.png)

半结构化、非结构化数据正成为数据分析的一等公民。客户评论、聊天记录、生产日志、车机信号等数据已深度融入业务决策流程。传统的结构化分析方案需要融合全文检索和向量检索能力,在同一平台上既支持语义搜索,又能进行多维分析和聚合统计。例如:
半结构化、非结构化数据正成为数据分析的一等公民。客户评论、聊天记录、生产日志、车机信号等数据已深度融入业务决策流程。传统的结构化分析方案需要融合全文检索和向量检索能力,在同一平台上既支持语义搜索,又能进行多维分析和聚合统计。

### 为什么需要混合检索?

单一检索方法往往无法完全满足用户的查询意图。以一个菜谱搜索应用为例:

- **关键词检索的局限**:当用户搜索"意大利番茄酱食谱"时,关键词检索会精确匹配包含"意大利"、"番茄酱"等词的文档。但它可能遗漏那些虽然是经典意大利番茄酱菜品、却使用了"marinara""pasta sauce"等不同表述的食谱。
- **语义检索的局限**:语义检索能理解查询的深层含义,找到诸如"经典意式番茄肉酱面"这样语义相关但措辞不同的结果。然而,它也可能引入虽然语义上下文相关但并非用户所需的结果——比如推荐"墨西哥莎莎酱",因为它们在"番茄基酱料"这一语义维度上相近。

**混合检索(Hybrid Search)结合了关键词检索和语义检索的优势**。它既能优先返回精确匹配关键词的直接命中结果,又能包含通过语义理解发现的相关内容。最终效果是:既提高了召回率(减少遗漏),又保证了精确性(减少无关结果),在信息检索的"精确率"和"召回率"之间取得最佳平衡。

### 何时选择混合检索?

选择何种检索方式取决于应用场景和用户查询模式:

| 场景类型 | 推荐检索方式 | 原因 |
|---------|------------|------|
| 代码仓库搜索 | 关键词检索 | 开发者需要精确匹配特定代码片段或错误信息 |
| 心理健康社区 | 语义检索 | 用户用情感描述搜索,需要基于含义而非关键词匹配 |
| 电商商品搜索 | **混合检索** | 既需匹配明确的商品名称,又需发现语义相关的替代商品 |
| 企业知识库 | **混合检索** | 既需精确查找特定政策条款,又需理解自然语言描述的模糊问题 |
| 智能客服系统 | **混合检索** | 既需匹配已知问题的标准答案,又需理解用户多样化的问法 |

### 混合检索的融合策略

混合检索的核心在于**融合(Fusion)**:先分别执行关键词检索和语义检索,各自产生一个排序结果集;然后通过排名融合算法,将两个结果集合并为一个统一的、综合排序的最终列表。

最常见的融合方法是**倒数排名融合(Reciprocal Ranked Fusion, RRF)**。其核心思路是在合并列表中给予那些在各子列表中排名靠前的条目更高的权重。RRF 的评分公式为:

$$
\text{score} = \sum_{i} \frac{1}{k + \text{rank}_i}
$$

其中,`rank_i` 是该记录在第 `i` 个检索结果列表中的排名,`k` 是一个平滑常数(通常为 60),用于防止排名第一的记录获得过高分数。如果某条记录仅出现在一个列表中,则它在另一个列表中的得分为 0。

**示例**:一条记录在关键词检索中排名第 3,在语义检索中排名第 9(k=60):

$$
\text{score} = \frac{1}{60+3} + \frac{1}{60+9} = 0.0159 + 0.0145 = 0.0304
$$

RRF 确保在多个列表中都排名靠前的记录获得更高的最终排名。

### 在 Doris 中实现混合检索

Doris 原生支持倒排索引(用于关键词检索)和向量索引(用于语义检索),可以在单条 SQL 中完成混合检索。以下是一个使用 RRF 实现混合检索的示例:

```sql
-- 1. 创建包含文本和向量列的文档表
CREATE TABLE documents (
id BIGINT,
content TEXT,
embedding ARRAY<FLOAT>,
INDEX idx_content(content) USING INVERTED PROPERTIES("parser" = "unicode", "support_phrase" = "true"),
INDEX idx_embedding(embedding) USING INVERTED PROPERTIES("index_type" = "hnsw")
) ENGINE = OLAP
DUPLICATE KEY(id)
DISTRIBUTED BY HASH(id) BUCKETS 4;

-- 2. 使用 RRF 融合策略执行混合检索
WITH keyword_search AS (
SELECT id, content, embedding,
ROW_NUMBER() OVER (ORDER BY TOKENIZE(content, '<query_text>') DESC) AS rank_ix
FROM documents
WHERE content MATCH '<query_text>'
LIMIT 20
),
semantic_search AS (
SELECT id, content, embedding,
ROW_NUMBER() OVER (ORDER BY l2_distance(embedding, <query_embedding>) ASC) AS rank_ix
FROM documents
ORDER BY l2_distance(embedding, <query_embedding>)
LIMIT 20
)
SELECT
COALESCE(k.id, s.id) AS id,
COALESCE(k.content, s.content) AS content,
COALESCE(1.0 / (60 + k.rank_ix), 0.0) + COALESCE(1.0 / (60 + s.rank_ix), 0.0) AS rrf_score
FROM keyword_search k
FULL OUTER JOIN semantic_search s ON k.id = s.id
ORDER BY rrf_score DESC
LIMIT 10;
```

通过调整关键词检索和语义检索的权重,可以灵活控制两种检索方式对最终排名的影响。例如,给关键词检索分配更高权重适合精确匹配优先的场景,给语义检索更高权重则适合意图理解优先的场景。

### 应用场景

混合检索与分析处理的典型场景包括:

- 客户洞察:结合评论文本检索和用户行为分析,精准定位客户需求和满意度趋势。
- 智能制造:融合生产日志全文搜索、设备图像识别和 IoT 指标分析,实现故障预测和质量优化。
- 车联网:综合车机信号数据分析、用户反馈文本挖掘和驾驶行为向量检索,提升智能座舱体验。

基于Doris的高性能实时分析、文本索引和向量索引能力构建上述场景的AI应用,具备多方面的优势:
### Doris 在混合检索场景中的优势

基于 Doris 的高性能实时分析、文本索引和向量索引能力构建混合检索应用,具备多方面的优势:

- 一体化架构:在单一平台统一处理结构化分析、全文检索和向量搜索,无需数据迁移和异构系统集成
- 混合查询性能:单条 SQL 同时执行向量相似度搜索、关键词过滤和聚合分析,查询性能优异
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
{
"title": "AI 概述",
"language": "zh-CN",
"description": "AI 技术快速演进的时代,数据基础设施正成为AI应用的核心支撑。Apache Doris 作为一款高性能、实时分析型数据库,深度融合了文本搜索、向量搜索、AI 函数和MCP智能交互能力,构建从数据存储、检索到分析的完整 AI 数据栈。"
"description": "Apache Doris AI 数据栈:支持混合检索(关键词+语义 RRF 融合)、向量搜索、RAG、AI Agent 分析和可观测性,单条 SQL 实现全文检索与向量检索的一体化实时分析。"
}
---

Expand Down Expand Up @@ -49,13 +49,103 @@ Doris凭借高性能MPP架构,在这类面向Agent的分析场景中有非常

![img](/images/vector-search/image-5.png)

半结构化、非结构化数据正成为数据分析的一等公民。客户评论、聊天记录、生产日志、车机信号等数据已深度融入业务决策流程。传统的结构化分析方案需要融合全文检索和向量检索能力,在同一平台上既支持语义搜索,又能进行多维分析和聚合统计。例如:
半结构化、非结构化数据正成为数据分析的一等公民。客户评论、聊天记录、生产日志、车机信号等数据已深度融入业务决策流程。传统的结构化分析方案需要融合全文检索和向量检索能力,在同一平台上既支持语义搜索,又能进行多维分析和聚合统计。

### 为什么需要混合检索?

单一检索方法往往无法完全满足用户的查询意图。以一个菜谱搜索应用为例:

- **关键词检索的局限**:当用户搜索"意大利番茄酱食谱"时,关键词检索会精确匹配包含"意大利"、"番茄酱"等词的文档。但它可能遗漏那些虽然是经典意大利番茄酱菜品、却使用了"marinara""pasta sauce"等不同表述的食谱。
- **语义检索的局限**:语义检索能理解查询的深层含义,找到诸如"经典意式番茄肉酱面"这样语义相关但措辞不同的结果。然而,它也可能引入虽然语义上下文相关但并非用户所需的结果——比如推荐"墨西哥莎莎酱",因为它们在"番茄基酱料"这一语义维度上相近。

**混合检索(Hybrid Search)结合了关键词检索和语义检索的优势**。它既能优先返回精确匹配关键词的直接命中结果,又能包含通过语义理解发现的相关内容。最终效果是:既提高了召回率(减少遗漏),又保证了精确性(减少无关结果),在信息检索的"精确率"和"召回率"之间取得最佳平衡。

### 何时选择混合检索?

选择何种检索方式取决于应用场景和用户查询模式:

| 场景类型 | 推荐检索方式 | 原因 |
|---------|------------|------|
| 代码仓库搜索 | 关键词检索 | 开发者需要精确匹配特定代码片段或错误信息 |
| 心理健康社区 | 语义检索 | 用户用情感描述搜索,需要基于含义而非关键词匹配 |
| 电商商品搜索 | **混合检索** | 既需匹配明确的商品名称,又需发现语义相关的替代商品 |
| 企业知识库 | **混合检索** | 既需精确查找特定政策条款,又需理解自然语言描述的模糊问题 |
| 智能客服系统 | **混合检索** | 既需匹配已知问题的标准答案,又需理解用户多样化的问法 |

### 混合检索的融合策略

混合检索的核心在于**融合(Fusion)**:先分别执行关键词检索和语义检索,各自产生一个排序结果集;然后通过排名融合算法,将两个结果集合并为一个统一的、综合排序的最终列表。

最常见的融合方法是**倒数排名融合(Reciprocal Ranked Fusion, RRF)**。其核心思路是在合并列表中给予那些在各子列表中排名靠前的条目更高的权重。RRF 的评分公式为:

$$
\text{score} = \sum_{i} \frac{1}{k + \text{rank}_i}
$$

其中,`rank_i` 是该记录在第 `i` 个检索结果列表中的排名,`k` 是一个平滑常数(通常为 60),用于防止排名第一的记录获得过高分数。如果某条记录仅出现在一个列表中,则它在另一个列表中的得分为 0。

**示例**:一条记录在关键词检索中排名第 3,在语义检索中排名第 9(k=60):

$$
\text{score} = \frac{1}{60+3} + \frac{1}{60+9} = 0.0159 + 0.0145 = 0.0304
$$

RRF 确保在多个列表中都排名靠前的记录获得更高的最终排名。

### 在 Doris 中实现混合检索

Doris 原生支持倒排索引(用于关键词检索)和向量索引(用于语义检索),可以在单条 SQL 中完成混合检索。以下是一个使用 RRF 实现混合检索的示例:

```sql
-- 1. 创建包含文本和向量列的文档表
CREATE TABLE documents (
id BIGINT,
content TEXT,
embedding ARRAY<FLOAT>,
INDEX idx_content(content) USING INVERTED PROPERTIES("parser" = "unicode", "support_phrase" = "true"),
INDEX idx_embedding(embedding) USING INVERTED PROPERTIES("index_type" = "hnsw")
) ENGINE = OLAP
DUPLICATE KEY(id)
DISTRIBUTED BY HASH(id) BUCKETS 4;

-- 2. 使用 RRF 融合策略执行混合检索
WITH keyword_search AS (
SELECT id, content, embedding,
ROW_NUMBER() OVER (ORDER BY TOKENIZE(content, '<query_text>') DESC) AS rank_ix
FROM documents
WHERE content MATCH '<query_text>'
LIMIT 20
),
semantic_search AS (
SELECT id, content, embedding,
ROW_NUMBER() OVER (ORDER BY l2_distance(embedding, <query_embedding>) ASC) AS rank_ix
FROM documents
ORDER BY l2_distance(embedding, <query_embedding>)
LIMIT 20
)
SELECT
COALESCE(k.id, s.id) AS id,
COALESCE(k.content, s.content) AS content,
COALESCE(1.0 / (60 + k.rank_ix), 0.0) + COALESCE(1.0 / (60 + s.rank_ix), 0.0) AS rrf_score
FROM keyword_search k
FULL OUTER JOIN semantic_search s ON k.id = s.id
ORDER BY rrf_score DESC
LIMIT 10;
```

通过调整关键词检索和语义检索的权重,可以灵活控制两种检索方式对最终排名的影响。例如,给关键词检索分配更高权重适合精确匹配优先的场景,给语义检索更高权重则适合意图理解优先的场景。

### 应用场景

混合检索与分析处理的典型场景包括:

- 客户洞察:结合评论文本检索和用户行为分析,精准定位客户需求和满意度趋势。
- 智能制造:融合生产日志全文搜索、设备图像识别和 IoT 指标分析,实现故障预测和质量优化。
- 车联网:综合车机信号数据分析、用户反馈文本挖掘和驾驶行为向量检索,提升智能座舱体验。

基于Doris的高性能实时分析、文本索引和向量索引能力构建上述场景的AI应用,具备多方面的优势:
### Doris 在混合检索场景中的优势

基于 Doris 的高性能实时分析、文本索引和向量索引能力构建混合检索应用,具备多方面的优势:

- 一体化架构:在单一平台统一处理结构化分析、全文检索和向量搜索,无需数据迁移和异构系统集成
- 混合查询性能:单条 SQL 同时执行向量相似度搜索、关键词过滤和聚合分析,查询性能优异
Expand Down
Loading