---
title: "语义搜索"
date: 0001-01-01
description: "理解查询意图而非只匹配关键词，通过 Embedding 和向量匹配提升搜索精度和召回率。"
summary: "传统全文搜索依赖关键词精确匹配，用户必须&quot;猜对词&quot;才能命中目标文档。Easysearch 语义搜索通过理解文本的语义和上下文关系，让系统能够识别&quot;意思相近&quot;的内容——即使查询与结果不包含相同关键词，也能返回高相关性的搜索结果。
 语义搜索 vs 全文搜索 #     对比维度 全文搜索（BM25） 语义搜索     匹配方式 关键词精确/模糊匹配 向量空间中的语义相似度   同义词处理 需手工配置同义词表 模型自动理解同义/近义   长尾查询 词汇差异大时召回率低 自然语言描述即可获取结果   语言依赖 依赖分词器、语言特定配置 多语言模型天然支持跨语言   计算成本 低 较高（需 Embedding 计算）     最佳实践：在实际业务中，推荐使用 Hybrid 检索 同时利用两者的优势。
  工作原理 #  语义搜索的核心流程：
用户查询 ──→ Embedding 模型 ──→ 查询向量 │ k-NN 相似度计算 │ 文档库 ──→ Embedding 模型 ──→ 文档向量 ──→ 排序结果  离线阶段：将文档内容通过 Embedding 模型转换为向量，存入 Easysearch 的向量字段 在线阶段：用户输入自然语言查询，同样转换为向量，在向量空间中找到最相似的文档 融合排序：可选地与全文搜索结果融合，输出综合排序   快速上手 #  1."
---


传统全文搜索依赖关键词精确匹配，用户必须"猜对词"才能命中目标文档。Easysearch 语义搜索通过理解文本的语义和上下文关系，让系统能够识别"意思相近"的内容——即使查询与结果不包含相同关键词，也能返回高相关性的搜索结果。

---

## 语义搜索 vs 全文搜索

| 对比维度   | 全文搜索（BM25）         | 语义搜索                  |
| ---------- | ------------------------ | ------------------------- |
| 匹配方式   | 关键词精确/模糊匹配      | 向量空间中的语义相似度    |
| 同义词处理 | 需手工配置同义词表       | 模型自动理解同义/近义     |
| 长尾查询   | 词汇差异大时召回率低     | 自然语言描述即可获取结果  |
| 语言依赖   | 依赖分词器、语言特定配置 | 多语言模型天然支持跨语言  |
| 计算成本   | 低                       | 较高（需 Embedding 计算） |

> **最佳实践**：在实际业务中，推荐使用 [Hybrid 检索]({{< relref "../vector-search" >}}) 同时利用两者的优势。

---

## 工作原理

语义搜索的核心流程：

```
用户查询 ──→ Embedding 模型 ──→ 查询向量
                                    │
                              k-NN 相似度计算
                                    │
文档库 ──→ Embedding 模型 ──→ 文档向量 ──→ 排序结果
```

1. **离线阶段**：将文档内容通过 Embedding 模型转换为向量，存入 Easysearch 的向量字段
2. **在线阶段**：用户输入自然语言查询，同样转换为向量，在向量空间中找到最相似的文档
3. **融合排序**：可选地与全文搜索结果融合，输出综合排序

---

## 快速上手

### 1. 创建包含向量字段的索引

```json
PUT /knowledge-base
{
  "mappings": {
    "properties": {
      "title":   { "type": "text" },
      "content": { "type": "text" },
      "embedding": {
        "type": "knn_dense_float_vector",
        "knn": { "dims": 768 }
      }
    }
  }
}
```

### 2. 写入文档与向量

将文档内容通过 Embedding 模型（如通义千问、OpenAI 等）转换为向量后写入：

```json
POST /knowledge-base/_doc
{
  "title": "如何配置 Easysearch 集群安全",
  "content": "Easysearch 默认启用安全模块，支持 TLS 加密...",
  "embedding": [0.12, -0.03, 0.88, ...]
}
```

### 3. 语义查询

```json
POST /knowledge-base/_search
{
  "size": 5,
  "query": {
    "knn_nearest_neighbors": {
      "field": "embedding",
      "vec": {
        "values": [0.15, -0.01, 0.91, ...]
      },
      "model": "lsh",
      "similarity": "cosine",
      "candidates": 50
    }
  }
}
```

### 4. Hybrid 检索（推荐）

将语义搜索与关键词搜索结合，获得更稳定的搜索效果：

```json
POST /knowledge-base/_search
{
  "size": 10,
  "query": {
    "bool": {
      "must": [
        {
          "knn_nearest_neighbors": {
            "field": "embedding",
            "vec": { "values": [0.15, -0.01, 0.91, ...] },
            "model": "lsh",
            "similarity": "cosine",
            "candidates": 100
          }
        }
      ],
      "should": [
        { "match": { "content": "集群安全配置" } }
      ]
    }
  }
}
```

---

## Embedding 模型选择

语义搜索的效果取决于 Embedding 模型的质量。常用模型：

| 模型                            | 维度     | 适用场景   |
| ------------------------------- | -------- | ---------- |
| OpenAI `text-embedding-3-small` | 1536     | 通用多语言 |
| 通义千问 Embedding              | 1024     | 中文优化   |
| BGE / M3E                       | 768      | 中文开源   |
| Ollama 本地模型                 | 384~4096 | 私有化部署 |

> 关于如何接入 Embedding 服务，参见 [Embedding 服务集成]({{< relref "../../integrations/ai/embedding-service" >}})。

---

## 搜索效果调优

### 权重调节

通过调整全文搜索与向量搜索的权重比例，可以优化不同场景下的搜索效果：

- **偏语义**：适合知识库问答、客服系统，用户输入自然语言
- **偏关键词**：适合日志搜索、精确查找，需要关键词命中
- **均衡**：适合电商搜索，既需要意图理解也需要品牌/型号匹配

### 可解释与可回滚

- 语义搜索结果可与全文搜索结果对比分析
- 支持通过规则、权重和策略进行调优
- 支持渐进式上线和风险控制

---

## 应用场景

| 场景                   | 说明                                                                 |
| ---------------------- | -------------------------------------------------------------------- |
| **企业知识库**         | 不需要记住文档标题或关键词，自然语言描述即可定位制度、方案和历史资料 |
| **智能问答 / AI 助手** | 通过语义理解检索相关内容，显著提升回答的准确性与上下文相关度         |
| **电商搜索**           | 用户描述不完整或不精准时，依然返回符合需求的商品                     |
| **多语言搜索**         | 不同语言和表达方式下，匹配到语义相近的内容                           |

---

## 相关文档

- [向量搜索]({{< relref "../vector-search" >}})
- [Embedding 服务集成]({{< relref "../../integrations/ai/embedding-service" >}})
- [RAG 与大模型]({{< relref "../../integrations/ai/rag-and-llm" >}})
- [AI API 使用指南]({{< relref "../../integrations/ai/_index.md" >}})
