传统全文搜索依赖关键词精确匹配,用户必须"猜对词"才能命中目标文档。Easysearch 语义搜索通过理解文本的语义和上下文关系,让系统能够识别"意思相近"的内容——即使查询与结果不包含相同关键词,也能返回高相关性的搜索结果。
语义搜索 vs 全文搜索 #
| 对比维度 | 全文搜索(BM25) | 语义搜索 |
|---|---|---|
| 匹配方式 | 关键词精确/模糊匹配 | 向量空间中的语义相似度 |
| 同义词处理 | 需手工配置同义词表 | 模型自动理解同义/近义 |
| 长尾查询 | 词汇差异大时召回率低 | 自然语言描述即可获取结果 |
| 语言依赖 | 依赖分词器、语言特定配置 | 多语言模型天然支持跨语言 |
| 计算成本 | 低 | 较高(需 Embedding 计算) |
最佳实践:在实际业务中,推荐使用 Hybrid 检索 同时利用两者的优势。
工作原理 #
语义搜索的核心流程:
用户查询 ──→ Embedding 模型 ──→ 查询向量
│
k-NN 相似度计算
│
文档库 ──→ Embedding 模型 ──→ 文档向量 ──→ 排序结果
- 离线阶段:将文档内容通过 Embedding 模型转换为向量,存入 Easysearch 的向量字段
- 在线阶段:用户输入自然语言查询,同样转换为向量,在向量空间中找到最相似的文档
- 融合排序:可选地与全文搜索结果融合,输出综合排序
快速上手 #
1. 创建包含向量字段的索引 #
PUT /knowledge-base
{
"mappings": {
"properties": {
"title": { "type": "text" },
"content": { "type": "text" },
"embedding": {
"type": "knn_dense_float_vector",
"knn": { "dims": 768 }
}
}
}
}
2. 写入文档与向量 #
将文档内容通过 Embedding 模型(如通义千问、OpenAI 等)转换为向量后写入:
POST /knowledge-base/_doc
{
"title": "如何配置 Easysearch 集群安全",
"content": "Easysearch 默认启用安全模块,支持 TLS 加密...",
"embedding": [0.12, -0.03, 0.88, ...]
}
3. 语义查询 #
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 检索(推荐) #
将语义搜索与关键词搜索结合,获得更稳定的搜索效果:
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 服务集成。
搜索效果调优 #
权重调节 #
通过调整全文搜索与向量搜索的权重比例,可以优化不同场景下的搜索效果:
- 偏语义:适合知识库问答、客服系统,用户输入自然语言
- 偏关键词:适合日志搜索、精确查找,需要关键词命中
- 均衡:适合电商搜索,既需要意图理解也需要品牌/型号匹配
可解释与可回滚 #
- 语义搜索结果可与全文搜索结果对比分析
- 支持通过规则、权重和策略进行调优
- 支持渐进式上线和风险控制
应用场景 #
| 场景 | 说明 |
|---|---|
| 企业知识库 | 不需要记住文档标题或关键词,自然语言描述即可定位制度、方案和历史资料 |
| 智能问答 / AI 助手 | 通过语义理解检索相关内容,显著提升回答的准确性与上下文相关度 |
| 电商搜索 | 用户描述不完整或不精准时,依然返回符合需求的商品 |
| 多语言搜索 | 不同语言和表达方式下,匹配到语义相近的内容 |