Apache Solr 混合搜索技術解析:結合向量與關鍵字的智慧檢索方案

引言

在資訊檢索領域,向量搜索技術因能處理高維語義資料而廣受應用,但其缺乏可解釋性與關鍵字匹配能力,導致無法完全滿足用戶需求。Apache Solr 自 Solr 9.0 版本起逐步整合向量搜索功能,並透過混合搜索技術(Hybrid Search)解決上述問題。本文深入解析 Solr 混合搜索的實現機制、技術特性與應用策略,協助讀者掌握此技術的核心價值與實作方法。

向量搜索的限制與混合搜索需求

可解釋性不足

向量搜索依賴高維度數值向量計算相似度,但其結果難以解釋單一維度對相關性影響,且缺乏語義與相似度的直接對應關係,導致無法明確回應用戶對結果的質疑。

關鍵字匹配缺失

用戶習慣透過關鍵字進行搜尋,而向量搜索可能忽略顯著關鍵字,造成結果位置偏移。此問題在處理「關鍵字未出現結果」的用戶投訴時尤為明顯。

結果多樣性不足

向量搜索基於相似度搜尋,易產生重複結果,需額外邏輯處理才能提升結果多樣性,影響搜尋體驗。

Apache Solr 混合搜索實現

當前功能與版本更新

  • Solr 9.0 首次支援 KNN 搜索(2022 年 5 月)
  • Solr 9.1 預設使用預過濾(prefilter)於向量搜索
  • Solr 9.6 增加 KNN 查詢參數靈活性,支援 prefilterinclude tagsexclude tags

檢索階段策略

Union 組合結果

使用 Boolean 查詢解析器,結合語義搜索(KNN)與傳統關鍵字搜索,範例語法如下:

{!edismax qf=text} keyword_query AND {!knn field=vector_field topK=10} vector_query

結果集大小為兩者結果數量總和,Solr 自動去重以避免重複。

Intersection 組合結果

交集方式:語義結果與關鍵字結果的重疊部分,類似後過濾(post-filter)機制,但直接於查詢階段處理。

過濾器機制

  • 預過濾(prefilter):於 KNN 搜索階段應用,減少候選集規模
  • 後過濾(post-filter):於結果集後處理,可能導致結果數量不預期減少
  • 標籤控制:透過 include tags / exclude tags 管理過濾器應用範圍

排序階段策略

得分組合方式

  • 加權求和:正規化關鍵字得分(0-1)與向量相似度得分(如餘弦相似度),使用 function 查詢解析器定義加權公式:
{!func} sum(normalized_lexical_score, vector_similarity_score)
  • 乘積運算:乘積方式可能更適合不同尺度得分的組合

學習到排序(Learning to Rank, LTR)

透過訓練集(查詢-文檔對)訓練機器學習模型,特徵定義包含:

  • 關鍵字得分(如正規化後的語義得分)
  • 向量相似度(如向量點積)

Solr 6.4 開始支援 LTR,9.3 版本整合向量相似度功能,此功能源自 Lucene 貢獻。

未來發展方向

Rank Fusion

結合多個檢索函數與排序函數的混合策略,相關功能已提出 PO(Product Owner)請求,預計於柏林會議展開討論。

向量搜索優化

繼續提升 KNN 搜索效能與靈活性,支援更多相似度計算方式(如歐氏距離、餘弦相似度)。

學習到排序深化

增強 LTR 模型的自適應能力,結合更多語義特徵,支援更複雜的特徵組合與模型訓練流程

總結

混合搜索透過結合向量與關鍵字查詢,有效解決向量搜索的可解釋性與關鍵字匹配缺失問題。Solr 提供 Union、Intersection 等組合策略,以及加權求和、乘積運算等得分組合方式,並整合 LTR 技術提升排序準確性。未來發展方向包含 Rank Fusion 與向量搜索優化,建議根據應用場景選擇合適的組合策略,並持續關注 Solr 的版本更新以掌握最新功能。