全文搜索 vs 向量搜索
全文搜索、向量搜索和混合搜索的对比分析。
在当今的信息海洋中航行既是一种奇迹,也是一个迷宫。全文搜索和向量搜索使我们能够构建搜索体验,让用户能够找到相关的产品、内容等。随着我们对搜索的精确性和上下文的追求不断发展,一个问题出现了:我们能否在全文搜索的词汇灵活性与向量搜索的语义深度之间取得平衡?
让我们一起探索每种解决方案的优缺点,并发现正在重新定义现代搜索和发现体验的协同作用。
全文搜索
全文搜索指的是将文本查询的部分或全部与数据库中存储的文档进行匹配。与传统的数据库查询相比,即使在部分匹配的情况下,全文搜索也能提供结果。它可以为用户构建更灵活的搜索界面,从而使他们能够更快地找到准确的结果。
实际上,一个高效的全文搜索解决方案需要能够容忍拼写错误、同义词、前缀搜索和模糊匹配。这些功能使最终用户即使在掌握的信息有限的情况下也能找到他们想要的东西。允许使用不完整的信息进行搜索可以加快发现速度。
尽管现代 SQL 和 NoSQL 数据库具有一些全文搜索功能,但与专注于搜索的数据库相比,它们通常不足。有关此主题的更深入探讨,请考虑阅读 [Postgres 在全文搜索方面不足的领域](/blog/postgres-full-text-search-limitations/?utm_campaign=vector-search&utm_source=blog&utm_medium=full-text-vs-vector
在我们的专题文章中了解 搜索引擎的内部运作原理。
向量搜索
向量搜索是 AI 驱动的搜索方法。它不是寻找与文本查询匹配的文档,而是允许查找具有相似语义含义的文档。这是通过建立在大型语言模型(LLM)提供的文本语义理解之上来实现的。
大型语言模型可以处理数据库记录并生成向量嵌入——文档语义含义的数值表示。然后,这些嵌入存储在 [向量数据库](/blog/what-is-a-vector-database/?utm_campaign=vector-search&utm_source=blog&utm_medium=full-text-vs-vector) 中。顾名思义,向量搜索的工作原理是比较相似的向量。
通过执行向量比较,向量搜索有效地实现了 [语义搜索](/blog/what-is-a-vector-database/?utm_campaign=vector-search&utm_source=blog&utm_medium=full-text-vs-vector#what-is-similarity-search)。尽管依赖于不同的底层技术,但它也解决了与全文搜索类似的目的:通过改进搜索的发现方面来增强用户体验。它尤其支持多模态搜索——使用非文本输入进行搜索,例如在 Google 图片中。
对比分析:全文搜索 vs 向量搜索
全文搜索的工作原理是在文档中查找单词。这使其擅长理解用户查询背后的词汇意图。但是,当它必须处理无法模糊匹配的模糊查询时,它就显得不足。由于缺乏对文档的语义理解,它无法理解上下文并进行概括。
总而言之,全文搜索
- ✅ 纠正拼写错误 — 例如,
reutrn of the jedi
- ✅ 处理精确查询 — 例如,
一个确切的产品名称
- ✅ 处理不完整查询 — 例如,
return of the j
- ❌ 无法处理模糊查询 — 例如,
人们用光剑战斗
- ❌ 无法理解上下文 — 例如,
冬季服装
另一方面,向量搜索的工作原理是查找具有相似含义的文档。这使其擅长理解用户查询背后的语义意图。它非常擅长理解同义词和文档描述。它也适用于发现相似的文档。
总而言之,向量搜索
- ✅ 处理模糊查询 — 例如,第一部上映的星球大战电影
- ✅ 理解上下文 — 例如,冬季服装
- ✅ 可以建议相似的文档
- ❌ 无法处理精确查询
- 👎 需要更多资源
正如我们所见,没有哪个解决方案是完美的。它们在给定的用例中都具有明显的优势。它们相辅相成。构建最先进的搜索体验需要结合全文搜索和向量搜索的优势。
那么,我们能同时拥有两者吗?
混合搜索的理由
混合搜索结合了全文搜索和向量搜索的优势。它建立在全文搜索的可访问、即时搜索体验的基础上,并集成了 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/?utm_campaign=vector-search&utm_source=blog&utm_medium=full-text-vs-vector#what-is-the-semantic-space) 中距离更远的文档进入最终的搜索结果。
semanticRatio
值的工作原理如下:
- 语义比率 = 0 — 它是全文搜索
- 语义比率 = 1 — 它是向量搜索
- 0 < 语义比率 < 1 — 它是混合搜索 ✨
由于语义搜索总是会返回一些文档,因此保持良好的平衡以使整体搜索结果保持相关性非常重要。下面的演示允许您搜索电影并使用语义比率,以查看它如何影响结果。
搜索“童话模仿中的绿色食人魔”(实时演示)
混合搜索即将登陆 Meilisearch Cloud,加入等候名单
结论
正如工程师们会告诉你的,“X 的最佳工具是什么?”这个问题总是:视情况而定。单独来看,全文搜索和向量搜索都无法满足构建快速、相关的搜索体验的所有标准。混合搜索融合了全文搜索的可访问性以及人工智能所带来的改进的发现能力。
混合搜索是现代搜索方法,它将最先进的搜索功能统一在一个单一的 API 之后。这种混合方法将全文搜索与语义搜索相结合,提高了搜索结果的准确性和全面性。它是一种现代、灵活的解决方案,适应了当今的搜索用例。
Meilisearch 是一个开源搜索引擎,使开发人员能够构建最先进的体验,同时享受简单、直观的开发体验。
有关 Meilisearch 的更多信息,你可以加入 Discord 上的社区,或订阅 新闻通讯。你可以查看其路线图并参与产品讨论,从而了解有关该产品的更多信息。