---
title: "pgx-bm25 1.0 面世：BM25 排序全文檢索成為 PostgreSQL 原生索引"
url: https://sammy.hk/pgx-bm25-1-0-%e9%9d%a2%e4%b8%96%ef%bc%9abm25-%e6%8e%92%e5%ba%8f%e5%85%a8%e6%96%87%e6%aa%a2%e7%b4%a2%e6%88%90%e7%82%ba-postgresql-%e5%8e%9f%e7%94%9f%e7%b4%a2%e5%bc%95/
author: Ethan
published: 2026-10-08T12:11:00+08:00
modified: 2026-10-08T09:36:57+08:00
description: "PGX, Inc. 於 2026 年 10 月 7 日在 PostgreSQL 官方新聞頁公布，推出 pgx-bm25 1.0——一個把 Okapi BM25 排序全文檢索加入 PostgreSQL 的擴充，以原生索引存取方法實作。該擴充支援 PostgreSQL 17 與 18，安裝後以 bm25_native 使用…"
categories: ["開放源碼"]
tags: [BM25, pgx-bm25, PostgreSQL, RAG, "全文檢索", "索引"]
source: https://sammy.hk
---
![](https://sammy.hk/wp-content/uploads/2026/10/pgx-bm25-og.jpg)PGX, Inc. 於 2026 年 10 月 7 日在 PostgreSQL 官方新聞頁公布，推出 pgx-bm25 1.0——一個把 Okapi BM25 排序全文檢索加入 PostgreSQL 的擴充，以原生索引存取方法實作。該擴充支援 PostgreSQL 17 與 18，安裝後以 `bm25_native` 使用。\[1\]

## 用法

官方示範建立擴充與索引，並以運算子查詢：\[1\]

“` CREATE EXTENSION bm25\_native; CREATE INDEX docs\_bm25 ON docs USING bm25\_native (body);

SELECT id, bm25\_score(ctid) AS score FROM docs WHERE body @@@ ‘quick fox’ ORDER BY body &amp;@@ ‘quick fox’ LIMIT 10; “`

官方說明，`@@@` 負責選出符合的資料列，`&@@` 則按相關度排序；整個查詢以有序索引掃描執行，沒有 Sort 節點。\[1\]

## 為何是「PostgreSQL 索引」

官方強調，整個索引存放於索引關聯本身的頁面之中，因此**自動獲得核心提供的 WAL 記錄、故障恢復與物理複製**；`VACUUM` 會維護它，不需要外部搜尋引擎，亦沒有獨立執行環境要維運。擴充以 C 語言針對原版伺服器標頭編寫，並以 PGXS 建置，工具鏈只需一個 C 編譯器與 `pg_config`。\[1\]

文本以 PostgreSQL 自家的 Snowball 詞典分析，語言按索引設定，因此搜尋 `negligent` 可以找到 `negligence`。排序取前 N 的查詢採用 block-max WAND，令典型的 `LIMIT 10` 搜尋毋須為每份符合文件計分。\[1\]

## 查詢功能

官方列出多項查詢功能：\[1\]

- 多欄索引與 BM25F 計分：支援每欄加成與每欄長度正規化；`k1`、`b` 與各項加成可用 `ALTER INDEX ... SET` 修改，並在下次掃描生效，毋須 `REINDEX`
- 精確短語，以及按詞距排序或無序的近鄰搜尋
- 布林查詢（`must`、`should`、`must_not`），可任意嵌套
- 前綴通配符（如 `judg*`）
- 查詢時對任何子句加成
- 以 `bm25_snippet()` 產生高亮片段，預設作 HTML 轉義

官方指出，簡單搜尋可寫成文字字串，其餘則由 builder 函數組出 jsonb 查詢樹，令使用者輸入永遠以數值形式到達、而非查詢語法。\[1\]

## 授權與測試

pgx-bm25 以 PostgreSQL License 發布，與 PostgreSQL 本身相同條款；官方強調它是獨立項目，不依賴亦不連接任何其他產品或服務，亦沒有另外的商業版本，原始碼、回歸與 TAP 測試套件、基準測試腳本及設計記錄全部放在儲存庫。\[1\]\[2\]

官方指出，索引的磁碟格式帶有相容性承諾：新增式的格式變更毋須 `REINDEX`，而在破壞性變更允許的情況下，`bm25_upgrade()` 可原地遷移索引。CI 會針對 PostgreSQL 17 與 18 建置及測試，包括啟用 assert、UBSan 與 AddressSanitizer 的執行，並以 TAP 測試涵蓋故障恢復與副本一致性；PostgreSQL 19 則針對現行 beta 測試，但尚未列為支援的主要版本。\[1\]

## 參考資料

\[1\] [PostgreSQL 官方新聞 — pgx-bm25 1.0: BM25 ranked full-text search as a native PostgreSQL index（2026 年 10 月 7 日）](https://www.postgresql.org/about/news/pgx-bm25-10-bm25-ranked-full-text-search-as-a-native-postgresql-index-3396/)

\[2\] [GitHub — pgexperts/pgx-bm25 官方儲存庫](https://github.com/pgexperts/pgx-bm25)

### 相關文章：

1. [Linux Forum Asia 2005 之後感](https://sammy.hk/linux-forum-asia-2005-%e4%b9%8b%e5%be%8c%e6%84%9f/ "Linux Forum Asia 2005 之後感")
2. [重新安裝 Serendipity](https://sammy.hk/reinstall-serendipity/ "重新安裝 Serendipity")
3. [近期喜歡上搞 Web Application](https://sammy.hk/interests-to-code-webapp/ "近期喜歡上搞 Web Application")
4. [久違在家中電腦上進行編譯](https://sammy.hk/%e4%b9%85%e9%81%95%e5%9c%a8%e5%ae%b6%e4%b8%ad%e9%9b%bb%e8%85%a6%e4%b8%8a%e9%80%b2%e8%a1%8c%e7%b7%a8%e8%ad%af/ "久違在家中電腦上進行編譯")
