在现代搜索系统里,单纯的关键词匹配已经无法满足用户对 **语义理解 **和 **个性化搜索体验 **的需求。为了让搜索更智能、更贴近用户意图,越来越多的系统开始引入 向量检索。而市场上成熟的搜索引擎仍然离不开 关键词检索 的稳定基础。那么,什么是向量检索和关键词检索?它们有什么区别?Easysearch 又是如何在一个系统中同时支持这两种搜索方式的?我们从核心原理出发,用通俗的语言来解释这些问题。
一、关键词检索:基于文字匹配的传统搜索 #
什么是关键词检索? #
关键词检索就是我们日常熟悉的那种搜索方式:系统按照用户输入的词去查找包含这些词的文档,并根据一定的排序算法返回结果。例如:
搜索 “搜索引擎 原理”
系统会查找文档中同时包含 “搜索引擎” 和 “原理” 的内容,并根据匹配程度、文档权重等因素排名。
关键词检索的核心在于:
- 索引结构 — 通常是反向索引(Inverted Index),每个词对应出现它的所有文档列表。
- 分词与权重 — 文本被拆分成词或词组,计算词频(TF)或结合逆文档频率(IDF)来衡量重要性。
- 相关性排序 — 利用算法(如 BM25 或类似模型)评估文档与查询的匹配质量。
这样做的优势是:
- 查询速度快,执行效率高
- 结果可解释性强
- 对精确匹配表现优异
但它也有局限:
- 无法理解用户没有明确表达的语义
- 对同义词、表达差异不够敏感
- 结果可能对“词序/词形变化”缺乏弹性
这就是为什么传统搜索在满足精确检索时很有效,但在“理解模糊意图”上存在不足的原因。
二、向量检索:从语义层面理解查询 #
什么是向量检索? #
向量检索(Vector Search)是近几年兴起的搜索方式,它基于一种思想:
把文本映射到一个多维空间,使语义相似的句子在空间上更接近。
传统关键词检索关心的是词是否匹配,而向量检索关注的是“语义相似度”。
向量如何表示文本? #
现代机器学习模型(例如 embedding 模型)可以把一段文字转换为一个数值向量,例如:
“如何理解搜索意图” → [0.12, -0.03, 0.88, …]
这个向量代表了这句话的整体语义特征。对两段语义相近的句子,它们对应的向量在空间中距离更近。
在向量检索中,核心就是:
- 把所有文档转成向量并建立索引
- 把查询也转成向量
- 通过计算查询向量与文档向量之间的相似度(如余弦相似度)来返回最相关的文档
这种方式比关键词检索更善于捕获“整体意思”,尤其适合:
- 语义搜索
- 模糊问法
- 最近邻查找(KNN 查询)
三、两个世界的差异:关键词 vs 向量 #
| 特性 | 关键词检索 | 向量检索 |
|---|---|---|
| 基础 | 词与词的匹配 | 向量空间语义距离 |
| 优点 | 精确、快速、解释性强 | 理解模糊语义、支持语义搜索 |
| 局限 | 不理解同义/上下文 | 对精确匹配不一定最佳 |
| 使用场景 | 日常搜索、严格匹配 | 智能问答、个性化搜索 |
关键词检索和向量检索不是二选一,而是互补的搜索能力。在实际系统中,它们可以一起工作,让搜索既能保持可靠性、解释性,又能有更强的语义理解能力。
四、Easysearch 如何同时支持两种检索能力 #
作为一款分布式搜索型数据库,Easysearch 与传统全文搜索引擎一样,天生支持结构化/全文检索,同时也内置了对向量检索的支持。其核心设计理念是:
在统一的索引和查询机制下,让关键词检索与向量检索各自发挥优势,并在需要时组合使用。
下面我们从工程层面逐步解释它是如何做到的。
1. 单一索引,多种检索模式 #
Easysearch 的索引不仅是传统的反向索引,它也支持向量字段类型。你可以在创建索引时定义某些字段为向量类型,然后在这些字段上执行向量搜索。
例如:
PUT /my-index
{
"mappings": {
"properties": {
"content_vector": {
"type": "knn_dense_float_vector",
"knn": {
"dims": 50,
"model": "lsh",
"similarity": "cosine"
}
}
}
}
}
这个定义让一个字段既可以做传统文本字段,又可以作为向量检索字段。
2. 向量检索通过 kNN API 实现语义查找 #
Easysearch 提供了 kNN(近邻搜索)API,用于执行向量空间中最相似向量的查询。该 API 允许指定:
- 向量字段
- 查询向量
- 相似度函数(如余弦距离、L1/L2 距离)
这样,系统就能在搜索时直接基于语义向量进行“最相似项查找”,而不仅仅是关键词匹配。
3. 搜索管道(Search Pipeline)实现请求预处理 #
关键词检索和语义检索的处理过程略有不同:
- 关键词检索直接使用词表、反向索引和匹配逻辑
- 向量检索需要先将文本转换成向量表示
为了解决这个差异,Easysearch 使用 搜索管道机制(Search Pipelines) 来处理搜索请求。
搜索管道可以按顺序执行一系列处理器:
- 拦截请求文本
- 若需要向量检索,则调用模型或外部服务生成查询向量
- 将向量信息放入查询结构
- 最终发送给搜索引擎执行
举例来说,使用 [semantic_query_enricher](https://docs.infinilabs.com/easysearch/main/docs/references/ai-integration/search-text-embedding/) 处理器可以自动将查询文本转换成向量,无需用户手工构造向量数组。
4. 混合搜索:关键词与语义协同提升相关性 #
Easysearch 不仅支持纯向量搜索和纯关键词搜索,还支持更高级的混合搜索能力(比如结合关键词匹配信号和语义相似度信号)。这种搜索策略让两者的优势互补:
- 关键词信号快速筛选精确匹配
- 向量检索捕获语义近似
组合结果后,可以得到既精确又语义相关的结果,特别适合用户输入不够规范或涉及含义层面查询的场景。
五、工程上的协同:为什么不只选一种 #
简单的关键词检索足够快速可控,但在“模糊意图”下容易漏掉语义相关内容;而纯向量检索虽然擅长语义相似性,却可能在精确性上弱于关键词匹配。
Easysearch 通过 统一的索引结构、可配置的管道和兼容的查询 API 同时支持:
- 传统搜索:高效、解释性强
- 向量搜索:语义意识强
- 混合搜索:两者兼顾
这样的设计让搜索系统既能在“查找包含关键字的文档”方面有传统优势,同时在“理解用户意图”上利用现代向量技术。
六、总结:统一搜索、协同理解 #
在搜索领域,“理解用户意图”和“匹配用户输入”从来不是二选一的问题,而是如何在不同场景下灵活使用不同技术的能力。
通过在一个系统内同时支持关键词检索和向量检索,Easysearch 让搜索既保持了传统全文搜索的稳定和效率,又具备了语义理解层面的能力,从而能够更全面、更准确地响应用户的查询意图。





