Install VectorChord-BM25 (vchord_bm25) and pg_tokenizer via Pigsty, Docker, Debian packages, or source.
vchord_bm25 supports PostgreSQL 14, 15, 16, 17, and 18 on Linux (x86_64 and aarch64) and macOS.
Method 1: Pigsty / Native OS Packages (Recommended)
Pigsty provides pre-built native RPM and DEB packages for vchord, vchord_bm25, and pg_tokenizer across EL 8/9/10, Debian 12/13, and Ubuntu 22.04/24.04 for PostgreSQL 14–18.
# Install via Pigsty CLI (automatically resolves PG version and OS distro)pig ext install vchord_bm25
pig ext install pg_tokenizer
Or install directly via apt / dnf once the Pigsty repository is configured:
# Debian / Ubuntu (replace 17 with your PostgreSQL major version)sudo apt-get install postgresql-17-vchord-bm25 postgresql-17-pg-tokenizer
# RHEL / Rocky / AlmaLinux (replace 17 with your PostgreSQL major version)sudo dnf install vchord_bm25_17 pg_tokenizer_17
Method 2: Docker (tensorchord/vchord-suite)
The official tensorchord/vchord-suite Docker image bundles PostgreSQL, VectorChord (vchord), VectorChord-BM25 (vchord_bm25), and pg_tokenizer out of the box:
You can also pull from GitHub Container Registry using ghcr.io/tensorchord/vchord-suite:pg18-latest (or pg17-latest, pg16-latest, pg15-latest, pg14-latest).
# 1. Install Rust toolchain and system dependencies (clang, libclang, pkg-config, PostgreSQL dev headers)curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# 2. Build and install vchord_bm25git clone https://github.com/pgsty/vchord_bm25.git
cd vchord_bm25
cargo install cargo-pgrx --version $(grep -o 'pgrx = "=[^"]*' Cargo.toml | cut -d = -f 3)cargo pgrx init --pg17=$(which pg_config)cargo pgrx install --release --pg-config $(which pg_config)# 3. Build and install pg_tokenizergit clone https://github.com/pgsty/pg_tokenizer.git
cd pg_tokenizer
cargo pgrx install --release --pg-config $(which pg_config)
Tip
Optional Lindera Dictionaries at Compile Time: To embed Lindera CJK morphological dictionaries (ipadic, ipadic-neologd, unidic, ko-dic, cc-cedict) directly into pg_tokenizer.so, pass the --features flag when compiling pg_tokenizer:
When developing or debugging vchord_bm25 or pg_tokenizer locally:
# Initialize pgrx managed PostgreSQL instances (PG 14–18)cargo pgrx init
# Use the `dev-opt` profile to enable optimizations alongside debug symbolsRUST_BACKTRACE=1 cargo pgrx run --profile dev-opt
# Inside the interactive psql session, inspect the backend PID to attach gdb if needed:SELECT pg_backend_pid();
Configure PostgreSQL & Enable Extensions
1. Shared Preload Libraries (Optional / Recommended for pg_tokenizer)
If you use pg_tokenizer and want preloaded vocabulary models initialized at server startup, add pg_tokenizer (and vchord if used) to shared_preload_libraries in postgresql.conf:
Restart PostgreSQL after modifying shared_preload_libraries. (vchord_bm25 itself does not require shared_preload_libraries and can be loaded dynamically per session via CREATE EXTENSION.)
2. Create Extensions and Set search_path
Connect to your target database and enable the extensions:
In v0.1.0–v0.3.0, vchord_bm25 installs its objects into the bm25_catalog schema and pg_tokenizer installs into tokenizer_catalog. Add both schemas to your search_path:
-- Per-session
SETsearch_pathTO"$user",public,bm25_catalog,tokenizer_catalog;-- Or persist for your database / role
ALTERDATABASEpostgresSETsearch_pathTO"$user",public,bm25_catalog,tokenizer_catalog;