Skip to content
pg_search

pg_search

pg_search : Full text search for PostgreSQL using BM25

Overview

ID Extension Package Version Category License Language
2100
pg_search
pg_search
0.24.0
FTS
AGPL-3.0
Rust
Attribute Has Binary Has Library Need Load Has DDL Relocatable Trusted
--sLd--
No
Yes
Yes
Yes
no
no
Relationships
Schemas paradedb
See Also
pgroonga
pgroonga_database
pg_bestmatch
vchord_bm25
pg_bigm
zhparser
pg_tokenizer
pg_trgm

bm25 am conflicts with pg_textsearch and vchord_bm25

Packages

Type Repo Version PG Major Compatibility Package Pattern Dependencies
EXT
PIGSTY
0.24.0
18
17
16
15
14
pg_search -
RPM
PIGSTY
0.24.0
18
17
16
15
14
pg_search_$v -
DEB
PIGSTY
0.24.0
18
17
16
15
14
postgresql-$v-pg-search -
Linux / PG PG18 PG17 PG16 PG15 PG14
el8.x86_64
PIGSTY 0.24.0
PIGSTY 0.24.0
PIGSTY 0.24.0
PIGSTY 0.24.0
MISS
el8.aarch64
PIGSTY 0.24.0
PIGSTY 0.24.0
PIGSTY 0.24.0
PIGSTY 0.24.0
MISS
el9.x86_64
PIGSTY 0.24.0
PIGSTY 0.24.0
PIGSTY 0.24.0
PIGSTY 0.24.0
MISS
el9.aarch64
PIGSTY 0.24.0
PIGSTY 0.24.0
PIGSTY 0.24.0
PIGSTY 0.24.0
MISS
el10.x86_64
PIGSTY 0.24.0
PIGSTY 0.24.0
PIGSTY 0.24.0
PIGSTY 0.24.0
MISS
el10.aarch64
PIGSTY 0.24.0
PIGSTY 0.24.0
PIGSTY 0.24.0
PIGSTY 0.24.0
MISS
d12.x86_64
PIGSTY 0.24.0
PIGSTY 0.24.0
PIGSTY 0.24.0
PIGSTY 0.24.0
PIGSTY 0.20.7
d12.aarch64
PIGSTY 0.24.0
PIGSTY 0.24.0
PIGSTY 0.24.0
PIGSTY 0.24.0
PIGSTY 0.20.7
d13.x86_64
PIGSTY 0.24.0
PIGSTY 0.24.0
PIGSTY 0.24.0
PIGSTY 0.24.0
PIGSTY 0.20.5
d13.aarch64
PIGSTY 0.24.0
PIGSTY 0.24.0
PIGSTY 0.24.0
PIGSTY 0.24.0
PIGSTY 0.20.5
u22.x86_64
PIGSTY 0.24.0
PIGSTY 0.24.0
PIGSTY 0.24.0
PIGSTY 0.24.0
PIGSTY 0.20.7
u22.aarch64
PIGSTY 0.24.0
PIGSTY 0.24.0
PIGSTY 0.24.0
PIGSTY 0.24.0
PIGSTY 0.20.7
u24.x86_64
PIGSTY 0.24.0
PIGSTY 0.24.0
PIGSTY 0.24.0
PIGSTY 0.24.0
PIGSTY 0.20.7
u24.aarch64
PIGSTY 0.24.0
PIGSTY 0.24.0
PIGSTY 0.24.0
PIGSTY 0.24.0
PIGSTY 0.20.7
u26.x86_64
PIGSTY 0.24.0
PIGSTY 0.24.0
PIGSTY 0.24.0
PIGSTY 0.24.0
MISS
u26.aarch64
PIGSTY 0.24.0
PIGSTY 0.24.0
PIGSTY 0.24.0
PIGSTY 0.24.0
MISS
Package Version OS ORG SIZE File URL
pg_search_18 0.24.0 el8.x86_64 pigsty 70.8 MiB pg_search_18-0.24.0-1PIGSTY.el8.x86_64.rpm
pg_search_18 0.24.0 el8.aarch64 pigsty 68.0 MiB pg_search_18-0.24.0-1PIGSTY.el8.aarch64.rpm
pg_search_18 0.24.0 el9.x86_64 pigsty 69.1 MiB pg_search_18-0.24.0-1PARADEDB.el9.x86_64.rpm
pg_search_18 0.24.0 el9.aarch64 pigsty 68.0 MiB pg_search_18-0.24.0-1PARADEDB.el9.aarch64.rpm
pg_search_18 0.24.0 el10.x86_64 pigsty 69.0 MiB pg_search_18-0.24.0-1PARADEDB.el10.x86_64.rpm
pg_search_18 0.24.0 el10.aarch64 pigsty 68.0 MiB pg_search_18-0.24.0-1PARADEDB.el10.aarch64.rpm
postgresql-18-pg-search 0.24.0 d12.x86_64 pigsty 67.1 MiB postgresql-18-pg-search_0.24.0_amd64.deb
postgresql-18-pg-search 0.24.0 d12.aarch64 pigsty 64.6 MiB postgresql-18-pg-search_0.24.0_arm64.deb
postgresql-18-pg-search 0.24.0 d13.x86_64 pigsty 67.1 MiB postgresql-18-pg-search_0.24.0_amd64.deb
postgresql-18-pg-search 0.24.0 d13.aarch64 pigsty 64.6 MiB postgresql-18-pg-search_0.24.0_arm64.deb
postgresql-18-pg-search 0.24.0 u22.x86_64 pigsty 67.2 MiB postgresql-18-pg-search_0.24.0-1PIGSTY~jammy_amd64.deb
postgresql-18-pg-search 0.24.0 u22.aarch64 pigsty 65.6 MiB postgresql-18-pg-search_0.24.0-1PIGSTY~jammy_arm64.deb
postgresql-18-pg-search 0.24.0 u24.x86_64 pigsty 67.1 MiB postgresql-18-pg-search_0.24.0_amd64.deb
postgresql-18-pg-search 0.24.0 u24.aarch64 pigsty 64.6 MiB postgresql-18-pg-search_0.24.0_arm64.deb
postgresql-18-pg-search 0.24.0 u26.x86_64 pigsty 66.9 MiB postgresql-18-pg-search_0.24.0-2PIGSTY~resolute_amd64.deb
postgresql-18-pg-search 0.24.0 u26.aarch64 pigsty 65.2 MiB postgresql-18-pg-search_0.24.0-2PIGSTY~resolute_arm64.deb

Source

pig build pkg pg_search;		# build rpm/deb

Install

Make sure PGDG and PIGSTY repo available:

pig repo add pgsql -u   # add both repo and update cache

Install this extension with pig:

pig install pg_search;		# install via package name, for the active PG version

pig install pg_search -v 18;   # install for PG 18
pig install pg_search -v 17;   # install for PG 17
pig install pg_search -v 16;   # install for PG 16
pig install pg_search -v 15;   # install for PG 15

Config this extension to shared_preload_libraries:

shared_preload_libraries = 'pg_search';

Create this extension with:

CREATE EXTENSION pg_search;

Usage

Sources: ParadeDB extension install docs, create-index docs, match docs, score docs, highlight docs, v0.24.0 release, pg_search README

pg_search is ParadeDB’s BM25-based search extension for PostgreSQL. The upstream README says support starts at PostgreSQL 15; Pigsty packages 0.24.0 for PostgreSQL 15-18 and builds it with cargo-pgrx 0.18.1.

Enable And Create The Extension

shared_preload_libraries = 'pg_search'
CREATE EXTENSION pg_search;

The self-hosted extension docs require shared_preload_libraries = 'pg_search' before CREATE EXTENSION.

Create A BM25 Index

Current examples use the bm25 access method with a unique key field:

CREATE INDEX search_idx ON mock_items
USING bm25 (id, description, category, rating)
WITH (key_field = 'id');

Only one BM25 index is supported per table. key_field is mandatory, must be unique, and must be the first indexed column; text key fields must be untokenized.

Query Operators And Helpers

The current docs use these query operators:

  • |||: match disjunction, equivalent to term1 OR term2.
  • &&&: match conjunction, equivalent to term1 AND term2.

Examples:

SELECT description, rating
FROM mock_items
WHERE description ||| 'running shoes'
ORDER BY rating
LIMIT 5;

SELECT description, pdb.score(id) AS score
FROM mock_items
WHERE description &&& 'running shoes'
ORDER BY score DESC
LIMIT 5;

SELECT description, pdb.snippet(description) AS snippet, pdb.score(id) AS score
FROM mock_items
WHERE description ||| 'running shoes'
ORDER BY score DESC
LIMIT 5;

Useful result helpers include pdb.score(id), pdb.snippet(field), pdb.snippets(field), and pdb.snippet_positions(field). Highlighting is relatively expensive and is not supported for fuzzy search queries.

Notes

  • The old quickstart URL was removed; use the versioned docs pages above for current |||, &&&, scoring, and highlighting syntax.
  • Release 0.24.0 requires preloading pg_search, upgrades pgrx to 0.18.1, and documents crash-recovery, ltree, and inline-tokenizer work without changing the basic BM25 query examples above.
  • The Pigsty metadata notes that the bm25 access method conflicts with pg_textsearch and vchord_bm25; do not preload competing BM25 access-method extensions in the same cluster without testing the target combination.
Last updated on