PIGSTY

pg_search

Full text search for PostgreSQL using BM25

Overview

Attributes

YesNoYesNoYesNoYesparadedb

Packages

EL
PIGSTY
pg_search_$v0.15.18-
17
16
15
14
13
Debian
PIGSTY
postgresql-$v-pg-search0.15.20-
17
16
15
14
13

Comments

pgrx=0.14.1 0.15.19+ has broken libicu on el systems


Availability

PG17PG16PG15PG14PG13
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');