#text-search #full-text-search #postgresql #search-algorithms #extension #ranking #bm25

pg_bm25

使用BM25算法在PostgreSQL中进行全文搜索

5个版本 (破坏性更新)

0.4.0 2023年9月12日
0.3.0 2023年9月12日
0.2.0 2023年9月12日
0.1.0 2023年9月11日
0.0.0 2023年9月11日

#8 in #ranking

Elastic-2.0

82KB
2K SLoC


Testing codecov

概述

pg_bm25 是一个PostgreSQL扩展,它通过使用Okapi BM25算法(全文搜索的最先进排名函数)来实现全文搜索。它使用 pgrx 在Rust中构建,并支持PostgreSQL 11及以上版本。

开发

先决条件

在开发扩展之前,请确保您已安装Rust(版本>1.70),最好通过 rustup 安装(我们观察到在macOS上通过Homebrew安装Rust存在问题)。

然后,安装并初始化 pgrx

cargo install --locked cargo-pgrx
cargo pgrx init

运行扩展

首先,启动 pgrx

cargo pgrx run

这将启动到Postgres的交互式连接。在Postgres内部,通过运行以下命令创建扩展:

CREATE EXTENSION pg_bm25;

您可以通过以下方式验证扩展函数是否已安装:

\df

现在,您已可以访问所有扩展函数。

索引表

默认情况下, pg_bm25 扩展创建了一个名为 paradedb.mock_items 的表,您可以使用它进行快速实验。

要索引表,请使用以下SQL命令:

CREATE TABLE mock_items AS SELECT * FROM paradedb.mock_items;
CREATE INDEX idx_mock_items ON mock_items USING bm25 ((mock_items.*));

索引完成后,您可以在它上运行各种搜索函数。

执行搜索

在已索引的表上执行搜索查询

SELECT *
FROM mock_items
WHERE mock_items @@@ 'description:keyboard OR category:electronics OR rating>2';

修改扩展

如果您对扩展代码进行了更改,请按照以下步骤更新它:

  1. 重新编译扩展
cargo pgrx run
  1. 重新创建扩展以加载最新更改
DROP EXTENSION pg_bm25;
CREATE EXTENSION pg_bm25;

测试

要运行单元测试套件,请使用以下命令:

cargo pgrx test

这将运行 /src 中定义的所有单元测试。要添加新的单元测试,只需在相关文件中添加测试即可,使用 #[cfg(test)] 属性。

要运行集成测试套件,首先使用以下命令在您的系统上安装扩展:

cargo pgrx install

每次您对扩展进行更改并希望其在集成测试套件中反映出来时,都需要运行此命令。然后,使用以下命令运行测试:

./test/runtests.sh

这将创建一个临时数据库,使用在fixtures.sql中定义的SQL命令初始化它,并在/test/sql中对其运行测试。要添加新的测试,只需将新的.sql文件添加到/test/sql,并添加相应的.out文件到/test/expected以存储预期的输出,测试套件将自动识别。

打包

扩展作为构建过程的一部分被打包到我们的Docker镜像中。如果您想本地打包扩展,可以通过运行以下命令来实现:

cargo pgrx package [--test]

依赖项

~43MB
~825K SLoC