pg_fts
Full-text search with BM25 and BM25F ranking
pg_fts : Full-text search with BM25 and BM25F ranking
Overview
| ID | Extension | Package | Version | Category | License | Language |
|---|---|---|---|---|---|---|
| 2220 | pg_fts | pg_fts | 0.2.0 |
FTS | PostgreSQL | C |
| Attribute | Has Binary | Has Library | Need Load | Has DDL | Relocatable | Trusted |
|---|---|---|---|---|---|---|
| --s-dtr | No | Yes | No | Yes | yes | yes |
| Relationships | |
|---|---|
| See Also | pg_search pg_textsearch pg_bestmatch vchord_bm25 pg_rrf pgroonga psql_bm25s pgcontext vectorize |
Requires PostgreSQL 17 or newer; the control file marks the extension trusted and relocatable; RPM builds also provide an llvmjit subpackage.
Packages
| Type | Repo | Version | PG Major Compatibility | Package Pattern | Dependencies |
|---|---|---|---|---|---|
| EXT | PIGSTY | 0.2.0 |
18 17 16 15 14 | pg_fts |
- |
| RPM | PIGSTY | 0.2.0 |
18 17 16 15 14 | pg_fts_$v |
- |
| DEB | PIGSTY | 0.2.0 |
18 17 16 15 14 | postgresql-$v-pg-fts |
- |
| Linux / PG | PG18 | PG17 | PG16 | PG15 | PG14 |
|---|---|---|---|---|---|
| el8.x86_64 | PIGSTY 0.2.0 | PIGSTY 0.2.0 | N/A | N/A | N/A |
| el8.aarch64 | PIGSTY 0.2.0 | PIGSTY 0.2.0 | N/A | N/A | N/A |
| el9.x86_64 | PIGSTY 0.2.0 | PIGSTY 0.2.0 | N/A | N/A | N/A |
| el9.aarch64 | PIGSTY 0.2.0 | PIGSTY 0.2.0 | N/A | N/A | N/A |
| el10.x86_64 | PIGSTY 0.2.0 | PIGSTY 0.2.0 | N/A | N/A | N/A |
| el10.aarch64 | PIGSTY 0.2.0 | PIGSTY 0.2.0 | N/A | N/A | N/A |
| d12.x86_64 | PIGSTY 0.2.0 | PIGSTY 0.2.0 | N/A | N/A | N/A |
| d12.aarch64 | PIGSTY 0.2.0 | PIGSTY 0.2.0 | N/A | N/A | N/A |
| d13.x86_64 | PIGSTY 0.2.0 | PIGSTY 0.2.0 | N/A | N/A | N/A |
| d13.aarch64 | PIGSTY 0.2.0 | PIGSTY 0.2.0 | N/A | N/A | N/A |
| u22.x86_64 | PIGSTY 0.2.0 | PIGSTY 0.2.0 | N/A | N/A | N/A |
| u22.aarch64 | PIGSTY 0.2.0 | PIGSTY 0.2.0 | N/A | N/A | N/A |
| u24.x86_64 | PIGSTY 0.2.0 | PIGSTY 0.2.0 | N/A | N/A | N/A |
| u24.aarch64 | PIGSTY 0.2.0 | PIGSTY 0.2.0 | N/A | N/A | N/A |
| u26.x86_64 | PIGSTY 0.2.0 | PIGSTY 0.2.0 | N/A | N/A | N/A |
| u26.aarch64 | PIGSTY 0.2.0 | PIGSTY 0.2.0 | N/A | N/A | N/A |
Source
codeberg.org/gregburd/pg_fts
pg_fts-0.2.0.tar.gz
Install
Make sure PGDG and PIGSTY repo available:
Install this extension with pig:
Create this extension with:
Usage
Sources:
pg_fts provides BM25/BM25F full-text ranking through dedicated ftsdoc and ftsquery types and an fts inverted-index access method. It supports boolean, phrase, NEAR, prefix, fuzzy, and regular-expression terms while keeping corpus statistics in the index for relevance scoring. Version 0.2.0 requires PostgreSQL 17 or newer.
Create and Query an Index
Use the same text-search configuration for documents and ordinary query terms:
@@@ matches, while ascending <=> distance orders rows by descending relevance and can drive an index ordering scan for top-k queries.
Query Language and API Index
to_ftsdoc([regconfig,] text)andto_ftsquery([regconfig,] text): analyze documents and parse queries.quick brown,quick & brown,quick | brown, and!slow: implicit/explicit AND, OR, and NOT."quick brown",NEAR(...),term*,term~2, and/regular-expression/: phrase, proximity, prefix, fuzzy, and regex terms.fts_bm25,fts_bm25_opts, andfts_bm25f: explicit BM25 scoring variants and multi-field scoring.fts_index_stats(index)andfts_index_df(index, query): index-maintained document count, average length, vocabulary size, and term frequencies.fts_highlightandfts_snippet: present matching text.fts_search(index, query, k)andfts_count(index, query): index-native top-k and MVCC-aware count operations.tsquery_to_ftsquery(tsquery): migration helper; it does not makepg_ftsa transparent replacement fortsvector/GIN.
Maintenance and Version Caveats
- Inserts enter an immediately matchable pending list, but ranked
<=>andfts_searchresults cover merged segments. Runfts_merge()when newly inserted documents must participate in ranking immediately. fts_vacuum()compacts segments and truncates reclaimable index pages; ordinaryVACUUMalso participates in pending-list and tombstone maintenance.- Version
0.2.0renamed the access method frombm25tofts. Indexes created by0.1.0withUSING bm25must be recreated. - If the library reports an on-disk format mismatch, follow its
REINDEXhint rather than attempting to read the index with a different format version. - The access method is non-covering and does not provide parallel scans in this release. Provision the extension and index separately on logical-replication subscribers; indexes themselves are not logically replicated.