觀點 · 資訊分享

Google Cloud 資料庫內建 BM25 搜尋:AlloyDB、Cloud SQL 不用再另架搜尋引擎

Google Cloud 讓 AlloyDB 與 Cloud SQL for PostgreSQL 17 以上版本,直接在資料庫裡做 BM25 關鍵字排序(預覽版)。搭配向量搜尋就能做「混合搜尋」,不必再多養一套 Elasticsearch 之類的搜尋服務。

發布
2026-09-19
篇幅
約 3 分鐘 · 1,555 字
結構
7 節 + 3 題常見問題
標籤
#Google Cloud#AlloyDB#Cloud SQL#PostgreSQL#全文檢索
Google Cloud 資料庫內建 BM25 搜尋:AlloyDB、Cloud SQL 不用再另架搜尋引擎

一句話看懂:Google Cloud 讓 AlloyDB 與 Cloud SQL 直接在資料庫裡做 BM25 關鍵字排序,搭配向量搜尋就能做混合搜尋,不必再多架一套搜尋引擎。

Google 雲端資料庫內建 BM25資訊圖卡:關鍵字搜尋和 AI 向量搜尋,現在可以放在同一個資料庫裡做

先用白話講:BM25 和「混合搜尋」是什麼?

想像你在圖書館找書,有兩種館員:

  • 第一位館員很懂意思:你說「想找一本講樹長得比房子高的書」,他就算書名沒有這幾個字,也找得出來。這就是 AI 的向量搜尋
  • 第二位館員很會比對字:你說「我要編號 A-1023 的那本」,他一字不差地翻出來。這就是關鍵字搜尋

BM25 是第二位館員最常用的排序方法:越罕見的詞越重要、同一個詞重複一百次也不會無限加分、還會考慮文章長短。

把兩位館員的結果合在一起排,就叫混合搜尋。問題是,以前在 Google Cloud 的 PostgreSQL 資料庫裡,只請得到第一位館員;第二位要另外花錢、另外架一套搜尋系統。

發生什麼事

Google Cloud 在 9 月 19 日(台灣時間)發表 AlloyDB 與 Cloud SQL 的原生 BM25 索引,目前是預覽版:

  • 適用 AlloyDB,以及 Cloud SQL for PostgreSQL 17 以上
  • 底層是 Tiger Data 開源的 pg_textsearch 擴充套件
  • 關鍵字索引和向量索引可以建在同一張表上,不用再把資料複製到另一套搜尋系統
  • AlloyDB 搭配 ScaNN、HNSW 向量索引,官方說向量查詢比標準 PostgreSQL 最多快 6 倍與 10 倍

跟以前比差在哪?

PostgreSQL 內建的 ts_rank 也能做全文檢索,但官方點出幾個問題:

類別 內建 ts_rank BM25
罕見詞加權 沒有,常見字和罕見字一樣重 有,罕見詞更重要
重複詞 提到 50 次就容易排很前面 重複次數的影響有上限
資料量變大 排序品質下降 官方稱它是資訊檢索的標準做法

給開發者的技術細節

建立 BM25 索引與查詢的方式(改寫自官方範例):

CREATE EXTENSION pg_textsearch;

CREATE INDEX idx_products_bm25
ON products
USING bm25 (description)
WITH (text_config='english');

SELECT name, description <@> 'cherry tree' AS score
FROM products
ORDER BY score
LIMIT 5;
  • 查詢用 <@> 運算子,分數越負代表越相關,所以是由小到大排序
  • AlloyDB 有內建的 ai.hybrid_search() 函式,用 RRF(倒數排名融合)把向量與關鍵字結果合成一份清單
  • Cloud SQL 沒有這個函式,官方示範用 CTE 各查一次,再自己算 RRF 分數合併
  • 官方範例都用 text_config='english',中文斷詞的效果文章沒有說明,處理中文內容前一定要先測

我的看法

接案做電商或內部系統時,「搜尋」幾乎是必備功能,但規模不大的專案為了搜尋另外架 Elasticsearch,維護成本常常比功能本身還高。能在原本的資料庫裡直接做 BM25,對小團隊來說是很實在的簡化。

不過有兩點要保守看待:一是目前還是預覽版,不建議直接上正式環境;二是台灣的專案大多是中文內容,官方範例全是英文,中文要怎麼切詞、效果如何,現階段只能自己實測。如果你的客戶需要搜「料號」「型號」,這功能倒是很值得先試。

名詞小辭典

  • BM25:搜尋引擎常用的關鍵字相關性排序方法,會考慮詞的稀有度、出現次數與文件長度。
  • 向量搜尋:把文字轉成一串數字(向量),用「意思相近」來找資料,是 AI 搜尋的基礎。
  • RAG:讓 AI 回答前先去資料庫找相關資料,再根據找到的內容回答。
  • 擴充套件(Extension):PostgreSQL 的外掛功能,安裝後就能使用新的索引或函式。

資料來源

常見問題

BM25 和 PostgreSQL 原本的全文檢索差在哪?
PostgreSQL 內建的 ts_rank 在資料量變大時排序品質會下降:常見字和罕見字權重一樣,一個詞出現很多次的文件也容易被排到前面。BM25 會讓罕見詞更重要、限制重複字的影響,還會考慮文件長度,排序結果比較接近一般人對「相關」的感覺。
為什麼有了 AI 向量搜尋,還需要關鍵字搜尋?
向量搜尋擅長理解意思,例如「比房子還高的樹」;但遇到商品型號、料號這種一字不差的字串就容易失準。兩種一起用(混合搜尋),才能兼顧「懂意思」和「找得準」。
我用的是自己架的 PostgreSQL,也能用嗎?
pg_textsearch 是 Tiger Data 的開源擴充套件,這篇公告講的是 AlloyDB 與 Cloud SQL 的整合。自架環境能不能裝、相容哪些版本,要以 pg_textsearch 專案本身的說明為準,官方公告沒有涵蓋。
LINE