全文搜尋 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) 提供的文字語義理解來實現的。
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. 向量搜尋
全文搜尋的工作原理是尋找文件中的文字。這使得它擅長理解使用者查詢背後的詞彙意圖。但是,當它必須處理無法模糊比對的模糊查詢時,它就會捉襟見肘。由於缺乏對文件的語義理解,它無法理解上下文並做出概括。
總而言之,全文搜尋
- ✅ 修正拼寫錯誤 — 例如:
絕地歸來
- ✅ 處理精確查詢 — 例如:
確切的產品名稱
- ✅ 處理不完整查詢 — 例如:
絕地歸
- ❌ 無法處理模糊查詢 — 例如:
拿著光劍戰鬥的人們
- ❌ 無法理解上下文 — 例如:
冬季服裝
另一方面,向量搜尋的工作原理是尋找具有相似含義的文件。這使得它擅長理解使用者查詢背後的語義意圖。它很擅長理解同義詞和文件描述。它也適用於探索相似文件。
總而言之,向量搜尋
- ✅ 處理模糊查詢 — 例如:第一部上映的星際大戰電影
- ✅ 理解上下文 — 例如:冬季服裝
- ✅ 可以建議相似文件
- ❌ 無法處理精確查詢
- 👎 需要更多資源
正如我們所見,沒有完美的解決方案。它們在特定的使用案例中各有明顯的優勢。它們彼此互補。建立最先進的搜尋體驗需要結合全文搜尋和向量搜尋的優點。
確實,我們能兩者兼得嗎?
混合搜尋的理由
混合搜尋結合了全文搜尋和向量搜尋的優勢。它以全文搜尋的易於存取、即時搜尋體驗為基礎,並整合了 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 的最佳工具?」這個問題的答案始終是:這取決於情況。單獨而言,全文搜尋和向量搜尋都無法滿足建立快速、相關搜尋體驗的所有條件。混合搜尋將全文搜尋的易於存取性與 AI 所實現的改進探索結合在一起。
混合搜尋是現代的搜尋方法,它在單一 API 背後統一了最先進的搜尋功能。這種混合方法將全文搜尋與語義搜尋相結合,提高了搜尋結果的準確性和全面性。它是一種現代、靈活的解決方案,適用於當今的搜尋使用案例。
Meilisearch 是一個開放原始碼的搜尋引擎,使開發人員能夠在享受簡單、直觀的 DX 的同時,建立最先進的體驗。
想了解更多關於 Meilisearch 的資訊,您可以加入我們的 Discord 社群,或是訂閱我們的電子報。您可以查看我們的產品路線圖,並參與產品討論,以進一步了解產品。