psql_bm25s
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
psql_bm25s | 0.4.13 | FTS | Apache-2.0 | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 2210 | psql_bm25s | 否 | 是 | 否 | 是 | 否 | 否 | - |
| 相关扩展 | pg_search pgroonga pg_textsearch pg_fts vchord_bm25 pg_bestmatch pg_tokenizer pg_rrf pgcontext vectorize |
|---|
Supports PostgreSQL 17-18; optional shared_preload_libraries arena is not required for normal use.
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 0.4.13 | 1817161514 | psql_bm25s | - |
| RPM | PIGSTY | 0.4.13 | 1817161514 | psql_bm25s_$v | - |
| DEB | PIGSTY | 0.4.13 | 1817161514 | postgresql-$v-psql-bm25s | - |
| OS / PG | PG18 | PG17 | PG16 | PG15 | PG14 |
|---|---|---|---|---|---|
| el8.x86_64 | PIGSTY 0.4.13 el8.x86_64.pg18 : psql_bm25s_18 psql_bm25s_18-0.4.13-1PIGSTY.el8.x86_64.rpm
| PIGSTY 0.4.13 el8.x86_64.pg17 : psql_bm25s_17 psql_bm25s_17-0.4.13-1PIGSTY.el8.x86_64.rpm
| N/A | N/A | N/A |
| el8.aarch64 | PIGSTY 0.4.13 el8.aarch64.pg18 : psql_bm25s_18 psql_bm25s_18-0.4.13-1PIGSTY.el8.aarch64.rpm
| PIGSTY 0.4.13 el8.aarch64.pg17 : psql_bm25s_17 psql_bm25s_17-0.4.13-1PIGSTY.el8.aarch64.rpm
| N/A | N/A | N/A |
| el9.x86_64 | PIGSTY 0.4.13 el9.x86_64.pg18 : psql_bm25s_18 psql_bm25s_18-0.4.13-1PIGSTY.el9.x86_64.rpm
| PIGSTY 0.4.13 el9.x86_64.pg17 : psql_bm25s_17 psql_bm25s_17-0.4.13-1PIGSTY.el9.x86_64.rpm
| N/A | N/A | N/A |
| el9.aarch64 | PIGSTY 0.4.13 el9.aarch64.pg18 : psql_bm25s_18 psql_bm25s_18-0.4.13-1PIGSTY.el9.aarch64.rpm
| PIGSTY 0.4.13 el9.aarch64.pg17 : psql_bm25s_17 psql_bm25s_17-0.4.13-1PIGSTY.el9.aarch64.rpm
| N/A | N/A | N/A |
| el10.x86_64 | PIGSTY 0.4.13 el10.x86_64.pg18 : psql_bm25s_18 psql_bm25s_18-0.4.13-1PIGSTY.el10.x86_64.rpm
| PIGSTY 0.4.13 el10.x86_64.pg17 : psql_bm25s_17 psql_bm25s_17-0.4.13-1PIGSTY.el10.x86_64.rpm
| N/A | N/A | N/A |
| el10.aarch64 | PIGSTY 0.4.13 el10.aarch64.pg18 : psql_bm25s_18 psql_bm25s_18-0.4.13-1PIGSTY.el10.aarch64.rpm
| PIGSTY 0.4.13 el10.aarch64.pg17 : psql_bm25s_17 psql_bm25s_17-0.4.13-1PIGSTY.el10.aarch64.rpm
| N/A | N/A | N/A |
| d12.x86_64 | PIGSTY 0.4.13 d12.x86_64.pg18 : postgresql-18-psql-bm25s postgresql-18-psql-bm25s_0.4.13-1PIGSTY~bookworm_amd64.deb
| PIGSTY 0.4.13 d12.x86_64.pg17 : postgresql-17-psql-bm25s postgresql-17-psql-bm25s_0.4.13-1PIGSTY~bookworm_amd64.deb
| N/A | N/A | N/A |
| d12.aarch64 | PIGSTY 0.4.13 d12.aarch64.pg18 : postgresql-18-psql-bm25s postgresql-18-psql-bm25s_0.4.13-1PIGSTY~bookworm_arm64.deb
| PIGSTY 0.4.13 d12.aarch64.pg17 : postgresql-17-psql-bm25s postgresql-17-psql-bm25s_0.4.13-1PIGSTY~bookworm_arm64.deb
| N/A | N/A | N/A |
| d13.x86_64 | PIGSTY 0.4.13 d13.x86_64.pg18 : postgresql-18-psql-bm25s postgresql-18-psql-bm25s_0.4.13-1PIGSTY~trixie_amd64.deb
| PIGSTY 0.4.13 d13.x86_64.pg17 : postgresql-17-psql-bm25s postgresql-17-psql-bm25s_0.4.13-1PIGSTY~trixie_amd64.deb
| N/A | N/A | N/A |
| d13.aarch64 | PIGSTY 0.4.13 d13.aarch64.pg18 : postgresql-18-psql-bm25s postgresql-18-psql-bm25s_0.4.13-1PIGSTY~trixie_arm64.deb
| PIGSTY 0.4.13 d13.aarch64.pg17 : postgresql-17-psql-bm25s postgresql-17-psql-bm25s_0.4.13-1PIGSTY~trixie_arm64.deb
| N/A | N/A | N/A |
| u22.x86_64 | PIGSTY 0.4.13 u22.x86_64.pg18 : postgresql-18-psql-bm25s postgresql-18-psql-bm25s_0.4.13-1PIGSTY~jammy_amd64.deb
| PIGSTY 0.4.13 u22.x86_64.pg17 : postgresql-17-psql-bm25s postgresql-17-psql-bm25s_0.4.13-1PIGSTY~jammy_amd64.deb
| N/A | N/A | N/A |
| u22.aarch64 | PIGSTY 0.4.13 u22.aarch64.pg18 : postgresql-18-psql-bm25s postgresql-18-psql-bm25s_0.4.13-1PIGSTY~jammy_arm64.deb
| PIGSTY 0.4.13 u22.aarch64.pg17 : postgresql-17-psql-bm25s postgresql-17-psql-bm25s_0.4.13-1PIGSTY~jammy_arm64.deb
| N/A | N/A | N/A |
| u24.x86_64 | PIGSTY 0.4.13 u24.x86_64.pg18 : postgresql-18-psql-bm25s postgresql-18-psql-bm25s_0.4.13-1PIGSTY~noble_amd64.deb
| PIGSTY 0.4.13 u24.x86_64.pg17 : postgresql-17-psql-bm25s postgresql-17-psql-bm25s_0.4.13-1PIGSTY~noble_amd64.deb
| N/A | N/A | N/A |
| u24.aarch64 | PIGSTY 0.4.13 u24.aarch64.pg18 : postgresql-18-psql-bm25s postgresql-18-psql-bm25s_0.4.13-1PIGSTY~noble_arm64.deb
| PIGSTY 0.4.13 u24.aarch64.pg17 : postgresql-17-psql-bm25s postgresql-17-psql-bm25s_0.4.13-1PIGSTY~noble_arm64.deb
| N/A | N/A | N/A |
| u26.x86_64 | PIGSTY 0.4.13 u26.x86_64.pg18 : postgresql-18-psql-bm25s postgresql-18-psql-bm25s_0.4.13-1PIGSTY~resolute_amd64.deb
| PIGSTY 0.4.13 u26.x86_64.pg17 : postgresql-17-psql-bm25s postgresql-17-psql-bm25s_0.4.13-1PIGSTY~resolute_amd64.deb
| N/A | N/A | N/A |
| u26.aarch64 | PIGSTY 0.4.13 u26.aarch64.pg18 : postgresql-18-psql-bm25s postgresql-18-psql-bm25s_0.4.13-1PIGSTY~resolute_arm64.deb
| PIGSTY 0.4.13 u26.aarch64.pg17 : postgresql-17-psql-bm25s postgresql-17-psql-bm25s_0.4.13-1PIGSTY~resolute_arm64.deb
| N/A | N/A | N/A |
构建
您可以使用 pig build 命令构建 psql_bm25s 扩展的 RPM / DEB 包:
安装
您可以直接安装 psql_bm25s 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
使用 pig 或者是 apt/yum/dnf 安装扩展:
创建扩展:
用法
来源:README v0.4.13, API reference, query semantics, input types, index parameters, index policy
psql_bm25s 是 PostgreSQL 原生索引访问方法,用于 BM25 系列的词法检索。它通过基于语料库统计信息的排序、精确的 top-k 检索 API,以及适用于可变表的 PostgreSQL 存储和维护行为,保持明确的 BM25 语义。
本目录为 PostgreSQL 17 和 18 打包版本 0.4.13。
基本搜索
不带 WITH (...) 选项时,索引使用 Lucene 风格的 BM25 和 IDF 默认值,并采用 realtime 一致性策略。
索引输入
psql_bm25s 支持五种可作为索引输入的源列类型:
text和varchar:直接索引普通标量文本列。text[]和varchar[]:用于应用自行维护的词元流。int4[]:用于应用在外部管理词元 ID 的场景。
标量 text 和 varchar 列会在索引边界进行分词。预分词数组可以避免对标量重复分词;当应用已经拥有分词结果时,应优先使用这种输入形式。
检索 API
规范的精确 BM25 API 是:
psql_bm25s_query_tokens(regclass, text[], k, weight_mask):用于文本词元索引。psql_bm25s_query_ids(regclass, int4[], k, weight_mask):用于词元 ID 索引。
主要的 SQL 便捷 API 是:
psql_bm25s_query(regclass, query_text, k, weight_mask, ...)psql_bm25s_prepared_query(regclass, query_text, ...)psql_bm25s_query_prepared(prepared_query, k, weight_mask)
这些行集 API 返回包含 ctid、doc_id 和 score 的 psql_bm25s_result_hit 行。当查询同时需要行数据和查询时分数时,可用 ctid 将命中结果连接回应用表。
操作符
操作符接口适用于 SQL 原生过滤和排序:
tokens @@ 'query text'是布尔文档匹配谓词。tokens @@@ psql_bm25s_prepared_query(...)是与索引绑定的预备谓词。ORDER BY tokens <=> psql_bm25s_order_tokens(...) ASC LIMIT k是有序检索形式。
@@ 不是排序 API。只有当 PostgreSQL 选择真正的 psql_bm25s 索引扫描时,<=> 才与真实的 BM25 排序一致;需要最明确的精确 top-k 契约时,请使用行集检索 API。
索引选项
评分相关的索引选项包括:
method和idf_method,默认lucene;支持robertson、lucene、atire、bm25l和bm25+。k1,默认1.5。b,默认0.75。delta,默认0.5,由 BM25L 和 BM25+ 使用。
标量文本处理相关的索引选项包括:
text_lowercase,默认true。text_stopwords,默认NULL。text_stem_english,默认false。text_fold_diacritics,默认false。
多字段与混合搜索
对于独立的标题、摘要和正文索引,可使用后期融合辅助函数,让每个字段先生成当前查询范围内的命中结果,再组合分数:
向量/BM25 混合搜索也是一个后期融合层。BM25 和向量索引各自产生候选结果,psql_bm25s_hybrid_fuse_candidates(...) 默认使用 rrf 将其组合。核心扩展不要求安装 pgvector、VectorChord 或任何向量类型。
维护与缓存
公开的维护开关是 consistency 索引选项:
realtime:默认值,使已提交写入立即可搜索。eventual:优先降低前台读写延迟,允许 BM25 结果在维护收敛期间短期陈旧。manual:将刷新交给显式操作或调度器控制。
运维辅助函数包括:
psql_bm25s_index_details(regclass)psql_bm25s_index_policy_recommend(regclass, profile)psql_bm25s_index_refresh(regclass)psql_bm25s_index_maintain(regclass)psql_bm25s_index_try_maintain(regclass)psql_bm25s_index_maintain_due(max_indexes)
大型不可变索引载荷可以使用共享代际缓存。零配置 DSM 缓存不要求设置 shared_preload_libraries。对于大型连接池部署,可通过 shared_preload_libraries = 'psql_bm25s' 和 psql_bm25s.shared_generation_cache_size 启用可选的预加载共享内存区,但正常使用不需要该内存区。
相关全局 GUC 包括:
psql_bm25s.maintenance_worker_limitpsql_bm25s.preload_timer_interval_mspsql_bm25s.maintenance_timer_interval_mspsql_bm25s.maintenance_rebuild_memory_budget
注意事项
- 该扩展创建后不可迁移模式;如有需要,请在
CREATE EXTENSION时选择非public模式。 eventual和manual一致性策略会有意牺牲即时新鲜度,以换取更低的前台成本或显式刷新控制。- 逻辑复制遵循 PostgreSQL 行为:表行会复制,但索引关系不会作为逻辑数据对象复制,因此应在订阅端创建或重建索引。
- 可选的预加载共享缓存需要修改 PostgreSQL 配置并重启,因为共享内存区在服务器启动时分配。
这个页面对您有帮助吗?
感谢反馈,我们会据此改进这篇文档。
哪里没有解决?(可选)