📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

在现代搜索系统里,单纯的关键词匹配已经无法满足用户对 **语义理解 **和 **个性化搜索体验 **的需求。为了让搜索更智能、更贴近用户意图,越来越多的系统开始引入 向量检索。而市场上成熟的搜索引擎仍然离不开 关键词检索 的稳定基础。那么,什么是向量检索和关键词检索?它们有什么区别?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) 来处理搜索请求。

搜索管道可以按顺序执行一系列处理器:

  1. 拦截请求文本
  2. 若需要向量检索,则调用模型或外部服务生成查询向量
  3. 将向量信息放入查询结构
  4. 最终发送给搜索引擎执行

举例来说,使用 [semantic_query_enricher](https://docs.infinilabs.com/easysearch/main/docs/references/ai-integration/search-text-embedding/) 处理器可以自动将查询文本转换成向量,无需用户手工构造向量数组。

点击链接跳转到文档可以查看详细用法


4. 混合搜索:关键词与语义协同提升相关性 #

Easysearch 不仅支持纯向量搜索和纯关键词搜索,还支持更高级的混合搜索能力(比如结合关键词匹配信号和语义相似度信号)。这种搜索策略让两者的优势互补:

  • 关键词信号快速筛选精确匹配
  • 向量检索捕获语义近似

组合结果后,可以得到既精确又语义相关的结果,特别适合用户输入不够规范或涉及含义层面查询的场景。


五、工程上的协同:为什么不只选一种 #

简单的关键词检索足够快速可控,但在“模糊意图”下容易漏掉语义相关内容;而纯向量检索虽然擅长语义相似性,却可能在精确性上弱于关键词匹配。

Easysearch 通过 统一的索引结构、可配置的管道和兼容的查询 API 同时支持:

  • 传统搜索:高效、解释性强
  • 向量搜索:语义意识强
  • 混合搜索:两者兼顾

这样的设计让搜索系统既能在“查找包含关键字的文档”方面有传统优势,同时在“理解用户意图”上利用现代向量技术。


六、总结:统一搜索、协同理解 #

在搜索领域,“理解用户意图”和“匹配用户输入”从来不是二选一的问题,而是如何在不同场景下灵活使用不同技术的能力。

通过在一个系统内同时支持关键词检索和向量检索,Easysearch 让搜索既保持了传统全文搜索的稳定和效率,又具备了语义理解层面的能力,从而能够更全面、更准确地响应用户的查询意图。