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

当你在电商网站搜索“便宜好用的电脑”,但商品标题里写的却是“高性价比笔记本”,你希望搜索引擎能足够“聪明”,为你返回正确的结果。然而,传统的搜索引擎很可能会因为找不到“便宜”或“电脑”这两个字,而无情地告诉你“未找到相关商品”。

这就是搜索领域长期存在的“语义鸿沟”——用户表达的“意思”和数据库里存储的“字面”无法匹配。

为了跨越这道鸿沟,搜索技术经历了一场深刻的进化。Easysearch 作为现代搜索引擎的代表,同时掌握了两种强大的能力:传统的全文搜索和新兴的向量检索。前者像一个严谨的“文字警察”,后者则更像一位善于推理的“读心神探”。

1. “文字警察”:全文搜索的精准与无奈 #

传统的全文搜索,其核心武器是我们在之前文章中介绍过的倒排索引。它的工作原理,就像是为海量文档建立了一张巨大的“关键词-文档”映射表。

  • 工作模式关键词精确匹配。你输入“笔记本”,它就去倒排索引里找到所有包含“笔记本”这个词的文档。

优点:

  • 快如闪电:对于明确的关键词,倒排索引能实现毫秒级的响应。
  • 绝对精准:搜索“iPhone 15 Pro Max”,绝不会返回三星的手机。这对于SKU、人名、错误码、代码函数等精确查找场景至关重要。

无奈之处:
这位“文字警察”过于依赖字面证据,缺乏变通能力,导致了:

  • 同义词困境:无法理解“买”和“购买”是同一个意思。
  • 概念盲点:无法理解“国王”和“女王”在概念上是高度相关的。
  • 语言障碍:搜索中文“狗”,自然找不到英文文档里的 “dog”。

为了解决这些问题,我们需要一位能理解语言背后深层含义的“神探”。

2. “读心神探”:向量检索的诞生 #

如果我们能将文字的“意思”转换成数学,是不是就能让机器理解语义了?答案是肯定的。这就是向量检索 (Vector Search) 的核心思想。

向量是什么?
想象一下,我们有一张巨大的“宇宙意义地图”。在这个地图上,每一个词、每一句话,甚至每一张图片,都被表示为一个坐标点。这个坐标点,就是向量

  • 核心原则:意思相近的内容,它们在地图上的坐标也相近。
  • 生成过程:通过 Embeding 模型,将非结构化的数据(文本、图片)转化为一串固定长度的数字(即向量)。

搜索如何进行?
有了这张“意义地图”,搜索不再是“匹配关键词”,而是变成了一个几何问题
“在地图上,找到与我查询坐标点距离最近的那些点。”

优点:

  • 理解概念:能轻松跨越同义词、近义词的障碍。搜索“如何变得更快乐”,它能找到一篇标题为“提升幸福感的五个技巧”的文章。
  • 支持跨模态:不同格式的内容都被转换成了统一的数学坐标,我们可以轻松实现“以图搜图”、“以文搜图”等高级功能。

3. Easysearch 的向量利器:ANN 近似查找 #

注意:需要安装 knn插件

要在海量数据中进行向量检索,如果对每一个点都计算一遍距离(即 KNN, K-Nearest Neighbors),计算量将是天文数字。因此,Easysearch 采用了一种更聪明的策略——ANN (Approximate Nearest Neighbors),即近似最近邻查找。

在 Easysearch 中,我们可以通过 knn_dense_float_vector 字段类型来存储和查询向量,示例 mappings 如下:

"mappings": {
  "properties": {
    "embedding": {
      "type": "knn_dense_float_vector",
      "dims": 768,                      // 向量维度,由你的 Embedding 模型决定
      "model": "lsh",                   // lsh: ANN 搜索;exact: 精确搜索
      "similarity": "cosine"            // 距离计算方法 (如余弦相似度)
    }
  }
}

注意:

  • 字段名中的 knn 描述的是功能目标(找到 K 个最近邻居)。但其底层的实现,是通过 lsh (局部敏感哈希) ANN 算法来完成的。
  • ANN 的核心思想是“牺牲绝对精度,换取数量级的性能提升”。它不保证找到的 100% 是最接近的点,但在实践中,其准确率(如 99%)已经完全足够,而查询速度却提升了成百上千倍。对于“语义”这种本就有些模糊的概念,这种取舍是完全值得的。

4. 神探组合:混合搜索,1+1 > 2 #

现在,我们同时拥有了“文字警察”和“读心神探”,但他们各自也有短板:

  • 全文搜索:过于死板,容易漏掉相关结果。
  • 向量检索:有时过于“联想”,可能缺乏关键词的硬性约束。比如搜索“苹果手机换电池”,你最想看到的官方指南可能因为关键词匹配度不高而被排在后面。

真正的王牌,是将两者结合起来——混合搜索 (Hybrid Search)

Easysearch 允许你在同一次查询中,同时执行全文搜索和向量检索,然后通过智能的结果融合算法 (Reciprocal Rank Fusion, RRF),将两份结果列表合并成一份最终排名。

混合搜索的工作流程:

  1. 并行执行:用户查询“高性价比笔记本”同时触发:
    • 全文搜索:查找包含“笔记本”等关键词的文档。
    • 向量检索:将“高性价比笔记本”转换成向量,在“意义地图”上查找最近邻。
  2. 独立排名:两路搜索各自产生一份排名列表。
  3. 智能融合 (RRF):RRF 算法会综合考虑一个文档在两个列表中的排名位置,给出一个最终的综合分数,生成一份既包含关键词精确匹配,又包含语义相关扩展的完美结果列表。
# 创建一个 RRF pipeline
PUT /_search/pipeline/rrf-pipeline
{
  "rerank_processors": [
    {
      "hybrid_ranker_processor": {
        "combination": {
          "technique": "rrf",
          "rank_constant": 60
        }
      }
    }
  ]
}

# 可选地,让上述 pipeline 成为索引默认的 pipeline
PUT /my-index/_settings
{
  "index.search.default_pipeline" : "rrf-pipeline"
}

# 进行混合搜索
GET /my-index/_search
{
  "query": {
    "hybrid": {
      "queries": [
        {
          "match": {
            "text": "电脑"
          }
        },
        {
          "knn_nearest_neighbors": {
            "field": "embedding",
            "vec": {"values": [-0.374, -0.119, ...]}, # '高性价比笔记本' 的向量表示
            "candidates": 50
          }
        }
      ]
    }
  }
}

5. 总结:何时派上你的“神探组合”? #

  • 只用全文搜索:当你的场景是日志查询、代码搜索、站内精确内容查找时,它依然是最高效、最精准的选择。
  • 只用向量检索:当你的场景是图片搜索、推荐系统、跨语言问答等纯语义驱动的应用时,它是你的不二之选。
  • 使用混合搜索对于绝大多数现代的、面向用户的搜索框,如电商搜索、知识库问答、社区内容发现,混合搜索都应该是标配。它能确保在用户输入模糊或使用同义词时,依然能召回最相关的结果,同时又不会丢失关键词匹配带来的确定性。

结论:
Easysearch 通过在一个统一的平台内提供全文、向量及混合搜索能力,真正实现了搜索的现代化。它不仅能找到用户输入的“字面”,更能深刻理解用户想要表达的“意思”。这不仅是一次技术升级,更是搜索体验的一次认知飞跃。