全文搜索 vs 向量搜索
全文搜索、向量搜索和混合搜索的对比分析。

在当今的信息海洋中导航既是一件奇妙的事,也是一个迷宫。全文搜索和向量搜索使我们能够构建搜索体验,从而使用户能够找到相关的产品、内容等。随着我们对搜索的精确性和上下文的追求不断发展,一个问题出现了:我们能否在全文搜索的词汇灵活性与向量搜索的语义深度之间取得平衡?
让我们一起探讨每种解决方案的优点和缺点,并发现正在重新定义现代搜索和发现体验的协同效应。
全文搜索
全文搜索是指将部分或全部文本查询与数据库中存储的文档进行匹配。与传统的数据库查询相比,即使在部分匹配的情况下,全文搜索也能提供结果。它允许为用户构建更灵活的搜索界面,从而使用户能够更快地找到准确的结果。
在实践中,高效的全文搜索解决方案应能容忍错别字、同义词、前缀搜索和模糊匹配。这些功能使最终用户即使在掌握的信息有限的情况下也能找到他们想要查找的内容。允许使用不完整的信息进行搜索可以加快发现速度。
尽管现代 SQL 和 NoSQL 数据库都具有一定的全文搜索功能,但与专注于搜索的数据库相比,它们通常相形见绌。要深入了解此主题,请考虑阅读有关 [Postgres 在全文搜索方面不足的领域](/blog/postgres-full-text-search-limitations/#vector-search&utm_source=blog&utm_medium=full-text-vs-vector
在我们的专题文章中了解搜索引擎的内部工作原理。
向量搜索
向量搜索是 AI 驱动的搜索方法。它不是查找与文本查询匹配的文档,而是允许查找具有相似语义含义的文档。这是通过建立在大型语言模型 (LLM) 提供的文本语义理解之上来实现的。
LLM 可以处理数据库记录并生成向量嵌入——文档语义含义的数字表示。然后,这些嵌入存储在[向量数据库](/blog/what-is-a-vector-database/#vector-search&utm_source=blog&utm_medium=full-text-vs-vector 中。顾名思义,向量搜索的工作原理是比较相似的向量。
通过执行向量比较,向量搜索有效地实现了[语义搜索](/blog/what-is-a-vector-database/#vector-search&utm_source=blog&utm_medium=full-text-vs-vector#what-is-similarity-search。尽管依赖于不同的底层技术,但它也解决了与全文搜索类似的目的:通过改进搜索的发现方面来增强用户体验。它尤其支持多模态搜索——使用非文本输入进行搜索,例如在 Google 图片中。
对比分析:全文搜索 vs 向量搜索
全文搜索的工作原理是在文档中查找单词。这使其擅长理解用户查询背后的词汇意图。但是,当它必须处理无法模糊匹配的模糊查询时,它就显得不足。缺乏对文档的语义理解使其无法理解上下文并进行概括。
总而言之,全文搜索
- ✅ 纠正错别字 — 例如
reutrn of the jedi
- ✅ 处理精确查询 — 例如
an exact product name
- ✅ 处理不完整查询 — 例如
return of the j
- ❌ 无法处理模糊查询 — 例如
folks fighting with lightsabers
- ❌ 无法理解上下文 — 例如
winter clothes
另一方面,向量搜索的工作原理是查找具有相似含义的文档。这使其擅长理解用户查询背后的语义意图。它非常擅长理解同义词和文档描述。它也适用于发现相似文档。
总而言之,向量搜索
- ✅ 处理模糊查询 — 例如 first released star wars movie
- ✅ 理解上下文 — 例如 winter clothes
- ✅ 可以建议相似的文档
- ❌ 无法处理精确查询
- 👎 需要更多资源
正如我们所见,没有哪种解决方案是完美的。对于给定的用例,它们各自具有明显的优势。它们彼此互补。构建最先进的搜索体验将需要结合全文搜索和向量搜索的优势。
的确,我们能两者兼得吗?
混合搜索的案例
混合搜索结合了全文搜索和向量搜索的优势。它建立在易于访问的、即时搜索的全文搜索体验之上,并集成了 AI 搜索实现的增强型发现功能。
像 Meilisearch 的混合搜索这样的解决方案完美地融合了两者的优点。这允许开发人员对所有类型的搜索使用统一的 API。下面的代码示例演示了此类 API 的用法。
// Hybrid search with Meilisearch const results = await client.multiSearch({ queries: [{ indexUid: 'movies', q: 'batman', hybrid: { embedder: 'default', semanticRatio: 0.5 } }] })
不使用 JavaScript?Meilisearch 支持多种 SDK。
此代码使用 Meilisearch 客户端在电影索引中搜索 batman
查询。它使用混合搜索,该搜索通过 hybrid
参数进行配置。让我们查看 hybrid
对象中的字段,看看它们启用了什么。
embedder
字段允许选择哪个嵌入器将处理查询(Meilisearch 允许为给定的索引配置多个嵌入器。)
semanticRatio
字段允许我们平衡来自语义搜索的结果的重要性。较高的值将允许在[语义空间](/blog/what-are-vector-embeddings/#vector-search&utm_source=blog&utm_medium=full-text-vs-vector#what-is-the-semantic-space 中距离较远的文档进入最终搜索结果。
semanticRatio
值的工作方式如下
- 语义比率 = 0 — 这是全文搜索
- 语义比率 = 1 — 这是向量搜索
- 0 < 语义比率 < 1 — 这是混合搜索 ✨
由于语义搜索总是返回一些文档,因此保持整体搜索结果的相关性至关重要。下面的演示允许您搜索电影并使用语义比率来查看它如何影响结果。
搜索“童话故事恶搞中的绿色怪物”(在线演示)
更新:混合搜索现已在 Meilisearch Cloud 上全面上市。
结论
正如工程师会告诉你的那样,“X 的最佳工具是什么?”这个问题总是:视情况而定。就其本身而言,全文搜索和向量搜索都无法满足构建快速、相关搜索体验的所有标准。混合搜索融合了全文搜索的可访问性和 AI 实现的改进型发现功能。
混合搜索是现代搜索方法,在单个 API 背后统一了最先进的搜索功能。这种混合方法将全文搜索与语义搜索相结合,从而提高了搜索结果的准确性和全面性。它是一种现代、灵活的解决方案,适应了当今的搜索用例。
Meilisearch 是一款开源搜索引擎,使开发人员能够构建最先进的体验,同时享受简单直观的 DX。
要了解更多关于 Meilisearch 的信息,您可以加入 Discord 上的社区或订阅新闻通讯。您可以通过查看其路线图并参与产品讨论来了解有关该产品的更多信息。