
在当今的信息海洋中航行,既令人惊叹又充满迷宫。全文搜索和向量搜索使我们能够构建搜索体验,使用户能够找到相关产品、内容等。随着我们对搜索精度和上下文的不断追求,一个问题出现了:我们能否在全文搜索的词汇灵活性与向量搜索的语义深度之间取得平衡?
让我们一起探讨每种解决方案的优缺点,并发现正在重新定义现代搜索和发现体验的协同作用。
全文本搜索
全文搜索指的是将部分或全部文本查询与数据库中存储的文档进行匹配。与传统数据库查询相比,全文搜索即使在部分匹配的情况下也能提供结果。它允许为用户构建更灵活的搜索界面,从而使他们能够更快地找到准确的结果。
在实践中,高效的全文搜索解决方案具有容错能力(针对拼写错误)、同义词、前缀搜索和模糊匹配。这些功能使用户即使在信息有限的情况下也能找到他们正在寻找的内容。允许使用不完整信息进行搜索可以加快发现速度。
尽管现代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 Images中。
比较分析:全文搜索 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/#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是一个开源搜索引擎,使开发人员能够构建最先进的体验,同时享受简单直观的开发体验。
要了解更多Meilisearch信息,您可以在Discord上加入社区或订阅新闻通讯。您可以通过查看其路线图并参与产品讨论来了解更多产品信息。