全文搜尋 (FTS) 可協助您找出符合查詢條件的自然語言文件。這種做法比標準字串比對更有效,因為會考量語言細微差異,例如忽略「the」等常見字詞,以及比對不同形式的字詞,例如「run」、「running」或「ran」。
AlloyDB for PostgreSQL 支援所有全文搜尋功能。除了支援 GIN 和 GiST 索引,AlloyDB 也提供 RUM 擴充功能,可在 PostgreSQL 17 以下版本執行高效能全文搜尋,以及在 PostgreSQL 17 以上版本執行 BM25 相關性排名。
全文搜尋的核心概念
如要有效實作全文搜尋 (FTS),您應瞭解 PostgreSQL 處理及搜尋文字的方式。搜尋單位是「文件」,通常是文字欄或資料列中的欄組合。索引建構程序會剖析這份文件,將字詞 (或詞素,即字詞的基本形式) 與資料列建立關聯。
這個程序會透過預先處理管道,將原始文字轉換為可搜尋的格式,方法如下:
- 將文字拆分為符記。
- 移除常見的停用詞。
- 將字詞正規化為字根形式,例如「run」是「run」、「runs」、「running」和「ran」的詞素。
使用全文搜尋時,您也需要瞭解專門的資料類型、運算子和各種索引策略,包括內建的 PostgreSQL 索引和高效能 RUM 索引。
PostgreSQL 使用兩種主要資料類型和比對運算子來管理 FTS:
tsvector:以可搜尋的格式表示文件,也就是不重複的詞素排序清單。tsquery:代表搜尋字詞,包括可合併詞素的布林運算子。@@:檢查tsvector是否與tsquery相符,可進行語言感知搜尋。
AlloyDB 支援內建 PostgreSQL 支援的所有全文搜尋索引類型。選擇索引時,請考量搜尋速度、索引建構時間、更新速度,以及所需特定搜尋功能 (例如詞組搜尋或關聯性排名) 之間的平衡。
如要提升搜尋結果的相關性和準確度,您也可以選擇下列選項:
- RUM 索引:將位置資訊直接儲存在索引中,藉此改善標準 GIN 索引,讓您不必存取表格資料,就能更快執行詞組搜尋和相關性排名。這項擴充功能支援 PostgreSQL 17 以下版本。詳情請參閱「建立及管理 RUM 索引」。
- BM25 索引:實作機率最佳比對 25 演算法,根據字詞頻率和長度飽和度排列文件,提供符合業界標準的關鍵字比對精確度。這項擴充功能支援 PostgreSQL 17 以上版本。詳情請參閱「建立及管理 BM25 索引」。
結合全文搜尋和語意搜尋
最強大的搜尋實作通常會結合使用 RUM 索引的全文搜尋和向量搜尋。使用混合型搜尋,結合語意解讀和精確關鍵字比對的優勢,合併不同的結果集,進行全面排名。
舉例來說,在電子商務應用程式中,您可以先使用全文搜尋和 RUM,找出含有特定關鍵字 (例如「慢跑鞋」) 的產品,然後使用向量搜尋,根據與使用者更詳細查詢 (例如「適合長跑訓練的舒適鞋款」) 的語意相似度,找出結果。接著,資料庫會使用倒數排名融合 (RRF) 演算法,將這兩個搜尋元件的排名結果融合為單一整合清單,產生最終排名。
如要進一步瞭解如何使用這種混合式方法,請參閱「執行混合型向量相似度搜尋」。
後續步驟
- 瞭解如何建立及管理 RUM 索引。
- 瞭解如何建立及管理 BM25 索引。
- 瞭解如何執行混合型向量相似度搜尋。