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
|
Source
pig build pkg pg_search; # build rpm/debInstall
Make sure PGDG and PIGSTY repo available:
pig repo add pgsql -u # add both repo and update cacheInstall 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 15Config 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 toterm1 OR term2.&&&: match conjunction, equivalent toterm1 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.0requires preloadingpg_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
bm25access method conflicts withpg_textsearchandvchord_bm25; do not preload competing BM25 access-method extensions in the same cluster without testing the target combination.