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

你是否在搜索框中输入过“苹裹手机”,或者只记得一个词的一部分,比如“华*为”,但 Easysearch 依然能为你找到“苹果手机”和“华为”相关的结果?这种“模糊搜索”的能力,常常让人感到惊奇:搜索引擎是如何理解我的“错别字”或“不完整记忆”的?

难道它在背后偷偷做了什么“读心术”吗?

其实,Easysearch 能实现模糊搜索,原理比你想的“更简单”,因为这得益于它底层数据结构和算法的精妙设计;同时,它也比你想的“更复杂”,因为它可能涉及多种不同的技术手段。

今天,我们就来揭秘 Easysearch 如何在“字面相似”和“意思相似”两个层面,实现模糊搜索的魔法。

1. 核心基石:倒排索引与分词 #

在深入模糊搜索之前,我们必须回顾 Easysearch 的两大基石:

  • 倒排索引:关键词与文档 ID 的映射表。它是实现“快”的基础。
  • 分词:将文本切分成有意义的词语。它是实现“理解”的基础。

所有的模糊搜索,最终都要回归到对倒排索引中“词项词典”的查找和匹配上。

2. 第一层魔法:字面相似度(当你不小心打错字) #

当用户输入“苹裹手机”时,Easysearch 怎么知道你其实想搜的是“苹果手机”?这依赖于它对字面字符序列相似度的判断,最常用的是 编辑距离 (Edit Distance) 算法。

2.1 编辑距离(Levenshtein Distance) #

  • 原理:计算将一个字符串转换成另一个字符串所需的最少单字符编辑操作(插入、删除、替换)次数。
  • 比喻:就像侦探对比两份笔迹。一个“裹”字和“果”字,可能只需要一次笔画的修改(替换),它们的编辑距离就是 1。
  • Easysearch 实现
    • 在查询时,你可以指定一个模糊度参数(例如 ~1 代表编辑距离为 1)。当你在查询 苹果~1 时,Easysearch 会在词项词典中查找所有与“苹果”编辑距离为 1 的词(如“苹裹”),并将它们作为有效的搜索词。

2.2 通配符查询(当你不记得完整的词) #

  • 原理:使用 *(0个或多个字符)和 ?(单个字符)来匹配未知字符。
  • 比喻:侦探有一段残缺不全的线索:“他叫华*为”,他知道中间有未知字符。
  • Easysearch 实现
    • GET /_search?q=华*为:Easysearch 会查找所有以“华”开头,以“为”结尾的词(例如“华为”、“华中科技大学”)。
    • 性能注意:需要特别提醒的是,以 * 开头的通配符查询(例如 *苹果性能极差,因为它无法利用倒排索引的前缀优化,可能导致全索引扫描。应尽量避免或使用其他优化手段。

2.3 前缀查询(最基础的模糊) #

  • 原理:匹配以特定字符串开头的词语。
  • Easysearch 实现GET /_search?q=苹果* 会快速找到“苹果手机”、“苹果公司”等。得益于倒排索引底层的 FST (Finite State Transducer) 结构,前缀查询效率极高。

3. 第二层魔法:语义相似度(当你想搜“意思相近”的) #

字面上的相似可以解决错别字问题,但如果我想搜“快乐”,希望能找到包含“幸福”的文章呢?这就需要搜索引擎理解词语背后的“意思”这是通过向量检索来实现的。

3.1 向量 (Embeddings) #

  • 原理:通过 Embedding 模型,将每个词或句子转换成一个高维的数字向量。意思相近的词,它们的向量在数学空间中距离也相近。
  • 比喻:侦探现在有了一张“意义地图”。“快乐”和“幸福”在地图上的位置非常接近。
  • Easysearch 实现
    • 通过 knn_dense_float_vector 字段存储文本的向量。
    • 当用户输入查询时,查询语句也会被转换为向量。
    • Easysearch 就会在向量空间中,快速查找与查询向量“距离最近”(如余弦相似度最高)的文档。
    • 核心算法:利用 ANN (Approximate Nearest Neighbors) 算法,在海量向量中实现近似的快速查找。
  • 原理:将传统的字面匹配(倒排索引)与语义匹配(向量检索)结合起来,实现 1+1 > 2 的效果。
  • 比喻:我们的侦探现在是“神探组合”,既有“文字警察”的严谨,又有“读心神探”的敏锐。
  • Easysearch 实现
    • 在一次查询中,同时执行 match (全文搜索) 和 knn (向量检索) 操作。
    • 通过 RRF (Reciprocal Rank Fusion) 等融合算法,将两份独立的结果列表智能地合并,既能精确匹配关键词,又能召回语义相关的结果。

4. 总结:从“字面警察”到“读心神探” #

Easysearch 之所以能实现强大的“模糊搜索”,是它底层技术的综合体现:

  • 字面相似:依赖于倒排索引词项词典的高效查找,结合编辑距离通配符前缀匹配等算法,解决错别字和不完整记忆问题。
  • 语义相似:利用 Embedding 技术将文本转化为向量,并通过 ANN 算法在向量空间中查找“意思相近”的文档。
  • 混合搜索:将字面与语义能力融合,提供最全面、最智能的搜索体验。

所以,下一次当你在 Easysearch 中模糊搜索并得到完美结果时,你就会明白,这背后并没有什么魔法,只有一套经过精心设计、不断进化的搜索引擎原理在高效运转。它不仅能理解你的“字面”,更能理解你想要表达的“意思”。