ITPub博客

首页 > 数据库 > PostgreSQL > pgx-bm25 1.0:作为原生 PostgreSQL(开源关系型数据库) 索引的 BM25 排序全文搜索

pgx-bm25 1.0:作为原生 PostgreSQL(开源关系型数据库) 索引的 BM25 排序全文搜索

PostgreSQL 作者:ITPUB社群 时间:1970-01-01 08:33:46 0 删除 编辑

pgx-bm25 1.0:作为原生 PostgreSQL 索引的 BM25 排序全文搜索

PGX Inc. 发布了 pgx-bm25 1.0 版本,这是一个扩展,将 Okapi BM25 排序全文搜索作为原生索引访问方法添加到 PostgreSQL。它支持 PostgreSQL 17 和 18,并以 bm25_native 安装。

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 &@@ 'quick fox'
LIMIT  10;

@@@ 选择匹配的行,&@@ 按相关性排序。查询作为有序索引扫描运行;没有 Sort 节点。

它是一个 PostgreSQL 索引

整个索引位于索引关系自身的页面中,因此它从核心获得 WAL 日志记录、崩溃恢复和物理复制。VACUUM 维护它。没有外部搜索引擎,也没有单独的运行时需要操作。该扩展使用 C 语言针对标准服务器头文件编写,并使用 PGXS 构建;C 编译器和 pg_config 就是整个工具链。

文本使用 PostgreSQL 自带的 Snowball 词典进行分析,语言按索引设置,因此搜索 negligent 会找到 negligence。排序的 top-N 查询使用 block-max WAND,因此典型的 LIMIT 10 搜索不必对每个匹配文档评分。

查询功能

  • 支持 BM25F 评分的多列索引:按字段提升和按字段长度归一化。k1、b 和提升可以通过 ALTER INDEX ... SET 更改,并在下一次扫描时生效,无需 REINDEX。

  • 精确短语,以及按标记距离的邻近搜索,有序或无序。

  • 布尔查询(must、should、must_not),可按需嵌套。

  • 前缀通配符(judg*)。

  • 查询时对任何子句的提升。

  • 使用 bm25_snippet() 的高亮片段,默认 HTML 转义。

简单搜索可以写成文本字符串。其他所有内容由生成 jsonb 查询树的构建函数组成,因此用户输入始终作为值到达,而从不作为查询语法:

CREATE INDEX docs_bm25 ON docs
  USING bm25_native (title, summary, body) INCLUDE (id) WITH (key_field = 'id');

SELECT id, bm25_score_key(id) AS score
FROM   docs
WHERE  title @@@ bm25_boolean(
                   must     => ARRAY[ bm25_term('body', 'tort') ],
                   must_not => ARRAY[ bm25_term('body', 'battery') ])
ORDER  BY title &@@ bm25_boolean(
                   must     => ARRAY[ bm25_term('body', 'tort') ],
                   must_not => ARRAY[ bm25_term('body', 'battery') ])
LIMIT  10;

许可证

pgx-bm25 在 PostgreSQL License 下发布,条款与 PostgreSQL 本身相同。它是一个独立项目:不依赖、也不连接任何其他产品或服务,并且没有单独的商业版本。源代码、回归测试和 TAP 测试套件、基准测试脚本以及设计记录(架构指南和设计决策日志)都在仓库中。

升级与测试

磁盘格式带有兼容性契约:增量格式变更不需要 REINDEX,而在破坏性变更允许的情况下,bm25_upgrade() 会就地迁移索引。CI 针对 PostgreSQL 17 和 18 进行构建和测试,包括启用断言、UBSan 和 AddressSanitizer 的运行,以及针对崩溃恢复和副本一致性的 TAP 测试。PostgreSQL 19 针对当前 beta 版本进行测试,但尚不是受支持的主版本。

获取方式

make    
sudo make install

源代码、文档和问题跟踪器:https://github.com/pgexperts/pgx-bm25


转载声明:本文为转载整理,原文版权归原作者及原站点所有。

原文来源:PostgreSQL Blog

原创地址:https://www.postgresql.org/about/news/pgx-bm25-10-bm25-ranked-full-text-search-as-a-native-postgresql-index-3396/

原文作者:PGX, Inc.;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2022-11-21

  • 博文量
    1148
  • 访问量
    548125