pg_search
Full text search for PostgreSQL using BM25
Overview
Attributes
Yes | No | Yes | No | Yes | No | Yes | paradedb |
Packages
EL | PIGSTY | pg_search_$v | 0.15.18 | - | 17 16 15 14 13 |
Debian | PIGSTY | postgresql-$v-pg-search | 0.15.20 | - | 17 16 15 14 13 |
Comments
pgrx=0.14.1 0.15.19+ has broken libicu on el systems
Availability
PG17 | PG16 | PG15 | PG14 | PG13 | |
---|---|---|---|---|---|
el8.x86_64 | 0.15.18 | 0.15.18 | 0.15.18 | 0.15.18 | ✗ |
el8.aarch64 | 0.15.18 | 0.15.18 | 0.15.18 | 0.15.18 | ✗ |
el9.x86_64 | 0.15.18 | 0.15.18 | 0.15.18 | 0.15.18 | ✗ |
el9.aarch64 | 0.15.18 | 0.15.18 | 0.15.18 | 0.15.18 | ✗ |
d12.x86_64 | 0.15.20 | 0.15.20 | 0.15.20 | 0.15.20 | ✗ |
d12.aarch64 | 0.15.20 | 0.15.20 | 0.15.20 | 0.15.20 | ✗ |
u22.x86_64 | 0.15.20 | 0.15.20 | 0.15.20 | 0.15.20 | ✗ |
u22.aarch64 | 0.15.20 | 0.15.20 | 0.15.20 | 0.15.20 | ✗ |
u24.x86_64 | 0.15.20 | 0.15.20 | 0.15.20 | 0.15.20 | ✗ |
u24.aarch64 | 0.15.20 | 0.15.20 | 0.15.20 | 0.15.20 | ✗ |
CONTRIB
PGDG
PIGSTY
Download
To add the required PGDG / PIGSTY upstream repository, use:
pig repo add pgdg -u # add PGDG repo and update cache (leave existing repos)
pig repo add pigsty -u # add PIGSTY repo and update cache (leave existing repos)
pig repo add pgsql -u # add PGDG + Pigsty repo and update cache (leave existing repos)
pig repo set all -u # set repo to all = NODE + PGSQL + INFRA (remove existing repos)
./node.yml -t node_repo -e node_repo_modules=node,pgsql # -l <cluster>
Or download the latest packages directly:
Install
Install this extension with:
pig ext install pg_search; # install by extension name, for the current active PG version
pig ext install pg_search -v 17; # install for PG 17
pig ext install pg_search -v 16; # install for PG 16
pig ext install pg_search -v 15; # install for PG 15
pig ext install pg_search -v 14; # install for PG 14
dnf install pg_search_17;
dnf install pg_search_16;
dnf install pg_search_15;
dnf install pg_search_14;
apt install postgresql-17-pg-search;
apt install postgresql-16-pg-search;
apt install postgresql-15-pg-search;
apt install postgresql-14-pg-search;
./pgsql.yml -t pg_ext -e '{"pg_extensions": ["pg_search"]}' # -l <cls>
Create this extension with:
CREATE EXTENSION pg_search;
Usage
https://docs.paradedb.com/documentation/getting-started/quickstart
CREATE EXTENSION pg_search;
ALTER SYSTEM SET paradedb.pg_search_telemetry TO 'off';
CALL paradedb.create_bm25_test_table(
schema_name => 'public',
table_name => 'mock_items'
);
SELECT description, rating, category FROM mock_items LIMIT 3;
CALL paradedb.create_bm25(
index_name => 'search_idx',
schema_name => 'public',
table_name => 'mock_items',
key_field => 'id',
text_fields => paradedb.field('description', tokenizer => paradedb.tokenizer('en_stem')) ||
paradedb.field('category'),
numeric_fields => paradedb.field('rating')
);
SELECT description, rating, category
FROM search_idx.search('(description:keyboard OR category:electronics) AND rating:>2',limit_rows => 5);
CALL paradedb.create_bm25(
index_name => 'ngrams_idx',
schema_name => 'public',
table_name => 'mock_items',
key_field => 'id',
text_fields => paradedb.field('description', tokenizer => paradedb.tokenizer('ngram', min_gram => 4, max_gram => 4, prefix_only => false)) ||
paradedb.field('category')
);
SELECT description, rating, category
FROM ngrams_idx.search('description:blue');