Contents
pg_sift 1.0.0: the first release, an exact BM25 full-text index access method (USING sift) for PostgreSQL 18.
Highlights
- Search:
@@>queries withAND,OR,NOT, phrases, prefix, wildcard, regex and fuzzy terms; exact BM25 scores and top-k withORDER BY sift.score(ctid) DESC LIMIT k, andcount(*)straight from the index. - Fast and small: two-level bitmap postings by heap ctid with block-max pruning. On 218k Wikipedia articles the default index is 48 MiB against pg_search’s 183 MiB;
AND/ORrun 2.35x / 1.84x and joins 3.7x faster. Phrases andcount(*)are behind (0.74x / 0.70x) with the default index; the optionalphrase_index = pairswins them (3.6x / 3.2x) at a 267 MiB index. - Plain PostgreSQL: case and accent folding, stemming, expression indexes, parallel
CREATE INDEX,VACUUM,REINDEX CONCURRENTLY,pg_dump, same-majorpg_upgrade, crash-safe and physical-replica safe (generic WAL), noshared_preload_libraries.
Compatibility
- PostgreSQL 18 only; x86-64; build from source with
make USE_PGXS=1(no packages for this release). - Known limits: no multicolumn, unique or non-text indexes, no index-only scans,
sift.score()through a partitioned parent is not supported (fixed in 1.1.0).
Benchmarks (shared, loaded host; reproduce with bench/bench all). Every change: CHANGELOG.md.