全文搜尋總覽

您可以使用 AlloyDB for PostgreSQL 的全文搜尋 (FTS) 功能,找出符合查詢條件的自然語言文件。這種方法比標準字串比對更有效,因為它會考量語言細微差異,例如忽略「the」等常見停用詞,並比對字詞的不同形式,例如「run」、「running」或「ran」。

除了標準 PostgreSQL GIN 和 GiST 索引,AlloyDB 還提供 rum 擴充功能,可在 PostgreSQL 17 以下版本執行高效能全文檢索,並在 PostgreSQL 17 以上版本執行 Best Matching 25 (BM25) 關聯性排名。

如要有效實作全文搜尋 (FTS),您應瞭解 PostgreSQL 處理及搜尋文字的方式。搜尋單位 (文件) 通常是文字欄,或是資料列中的欄組合。索引建構程序會剖析這份文件,將字詞 (或「詞素」,即字詞的基本形式) 與資料列建立關聯。

這項程序包含預先處理管道,會透過下列方式將原始文字轉換為可搜尋的格式:

  • 將文字拆分為詞元。
  • 移除常見的停用詞。
  • 將字詞正規化為字根形式,例如「run」是「run」、「runs」、「running」和「ran」的詞位。

使用全文搜尋時,您也需要瞭解專門的資料類型、運算子和各種索引策略,包括內建的 PostgreSQL 索引和高效能 RUM 索引。

PostgreSQL 使用兩種主要資料類型和比對運算子來管理 FTS:

  • tsvector:以可搜尋的格式 (不同詞彙的排序清單) 表示文件。
  • tsquery:代表搜尋字詞,包括可讓您合併詞彙的布林運算子。
  • @@:檢查 tsvector 是否與 tsquery 相符,以便進行語言感知搜尋。

AlloyDB 支援內建 PostgreSQL 支援的所有全文檢索索引類型。選擇索引時,請考量搜尋速度、索引建構時間、更新速度,以及所需特定搜尋功能 (例如詞組搜尋或相關性排名) 之間的平衡。

如要提升搜尋結果的關聯性和準確度,您也可以選擇下列選項:

  • RUM 索引:直接在索引中儲存位置資訊,改善標準 GIN 索引,讓您不必存取資料表資料,就能更快執行詞組搜尋和關聯性排名。這項擴充功能支援 PostgreSQL 17 以下版本。詳情請參閱「建立及管理 RUM 索引」。
  • BM25 索引:採用機率式 Best Matching 25 演算法,根據字詞頻率和長度飽和度為文件排名,提供業界標準的關鍵字比對精確度。這項擴充功能支援 PostgreSQL 17 以上版本。詳情請參閱「建立及管理 BM25 索引」。

最強大的搜尋實作通常會結合使用 RUM 索引的全文搜尋和向量搜尋。使用混合型搜尋,結合語意解讀和完全比對關鍵字的優勢,合併不同的結果集,進行全面排名。

舉例來說,在電子商務應用程式中,您可以先使用 RUM 進行全文搜尋,找出含有「慢跑鞋」等特定關鍵字的產品,然後使用向量搜尋,根據語意相似度找出與使用者更詳細查詢內容 (例如「適合長距離訓練的舒適鞋款」) 相符的結果。接著,資料庫會使用倒數排名融合 (RRF) 演算法,將兩個搜尋元件的排名結果合併為單一統合清單,產生最終排名。

如要進一步瞭解如何使用這種混合方法,請參閱「執行混合型向量相似度搜尋」。

後續步驟