Show HN:pg_textsearch - 支援 BM25 相關性排序的 PostgreSQL 全文檢索擴充功能
Timescale 發佈了 pg_textsearch,這是一個開源的 PostgreSQL 擴充功能,為全文檢索帶來了現代化的 BM25 相關性排序功能,並具備生產級的效能與 top-k 優化。
背景
這篇文章介紹了由 Timescale 開發的開源 PostgreSQL 擴充功能 pg_textsearch,旨在為資料庫提供現代化的 BM25 相關性排名全文檢索。開發者 Todd J. Green 分享了這項專案的誕生背景:由於現有的 Postgres 全文檢索缺乏全索引排名算法,而領先的解決方案 ParadeDB 採用 AGPL 授權,對某些企業而言存在限制,因此他利用 AI 輔助開發工具,在短時間內獨力完成了這款基於 Postgres 授權的替代方案。
社群觀點
在 Hacker News 的討論中,社群對於 pg_textsearch 的效能表現給予了高度關注。開發者分享的基準測試數據顯示,該工具在處理大規模數據集時具有極高的效率,例如能在 18 分鐘內完成 1.38 億份文件的索引編寫,這讓許多受困於索引速度瓶頸的用戶感到振奮。對於正在構建檢索增強生成(RAG)或混合搜索系統的工程師來說,能在不脫離 Postgres 生態系、無需額外掛載 Elasticsearch 的情況下獲得原生 BM25 支持,被視為開發體驗上的重大勝利。
然而,討論中也出現了關於功能完整性的質疑。知名開發者 Simon Willison 指出,目前的實作似乎更偏向於排名而非過濾。他對範例中出現的魔術數字過濾方式表示困惑,認為 BM25 的分數閾值會隨數據集變動,難以預測。對此,開發者坦承目前的版本在過濾機制上仍有優化空間,建議用戶暫時採用後過濾模式,即先獲取排名結果再進行篩選,這與 pgvector 的處理邏輯相似。
授權協議的選擇也引發了一場關於開源倫理的爭論。有留言批評 Tiger Data 刻意避開 AGPL 授權的 ParadeDB 是對開源社群的不友善行為,但隨即遭到其他成員反駁。支持者認為,提供一個基於更寬鬆的 Postgres 授權協議的替代方案,實際上是擴大了開源社群的選擇權,對商業應用更為友好。此外,針對高頻更新環境下的寫入與查詢權衡,開發者表示目前的版本優先優化了批量索引與查詢效能,未來將持續改進段落合併與記憶體刷新機制,以應對更頻繁的數據變動需求。
延伸閱讀
在討論過程中,社群成員提到了 Anthropic 關於「上下文檢索」(Contextual Retrieval)的技術文章,探討了如何結合向量搜索與關鍵字搜索來提升 RAG 系統的精準度。此外,開發者也提及了 pgvectorscale,這是該團隊開發的另一個擴充功能,旨在解決 pgvector 在主記憶體限制下的擴展性問題,兩者結合可構建完整的混合搜索架構。