「类似文档搜索」(More Like This,简称 MLT)是搜索引擎中一个被广泛使用的功能:用户从一篇已有文章、一件商品或一张工单出发,让系统找出与之相似的其他内容。这种场景常见于新闻网站的「相关阅读」、电商的「相似商品推荐」,以及技术支持中根据错误代码匹配历史工单。
从关键词匹配到语义理解
传统的 MLT 采用「词法搜索」——系统提取文档中的重要词汇(如错误代码、SKU、堆栈信息),构建查询语句,在索引中寻找包含这些词汇的文档。这套机制依赖 TF-IDF 或 BM25 等成熟算法,优势在于精确:同一个错误码 "ERR_404" 在两份工单中出现时,词法搜索能准确命中。
然而,当两份文档用不同措辞表达相同含义时,词法搜索就会力不从心。例如,「内存泄漏」和「堆内存无限增长」描述的是同一问题,但普通分词器会将它们视为不同词条。
近年来的趋势是引入「嵌入向量」(embedding)来替代关键词匹配:每份文档被转换为一个稠密向量,向量间的距离代表语义相似度。这样,即使两篇文章措辞完全不同,只要核心含义相近,就能被识别为相似文档。
混合搜索与实际应用
在实际生产环境中,词法搜索并未被完全取代。它在精确匹配场景(错误码、SKU、法规条文)中仍是首选。因此,主流做法是「混合搜索」:词法搜索负责精确命中,向量搜索补充语义相似的候选结果,辅以过滤条件和结果重排序,兼顾准确率和覆盖率。
从实现角度看,某些搜索引擎(如 Manticore Search)已支持直接在索引层执行向量搜索——无需在应用层额外计算和传输向量数据,只需指定源文档 ID,系统即可从索引中取出其预存向量,执行 KNN 邻近搜索。这简化了架构,也降低了延迟。
整体而言,MLT 的演进体现了搜索技术从「找一样的词」向「找相近的意思」转变,这一趋势在 RAG(检索增强生成)等应用场景中尤为关键。
编注:信源为 Manticore Search 官方博客,材料系统梳理了 MLT 的词法与向量两代方案及各自适用场景,未涉及具体性能基准数据。