{"slug": "pg-textsearch", "name": "pg_textsearch", "category": "databases", "category_name": "Databases", "description": "", "recommenders": 3, "commenters": 5, "warners": 0, "score": 3.048, "rising": -0.98, "first": "2026-02-05", "latest": "2026-09-19", "why": "we have been using pg_textsearch in production for a few weeks now, and it's been fairly stable and super speedy", "why_is_quote": true, "has_verdict": false, "sentiment": {"recommend": 3, "neutral": 1, "compare": 1, "warn": 0}, "spark": [0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0], "listed": true, "loved": [], "caveat": "", "short_quote": "we have been using pg_textsearch in production for a few weeks now, and it's been fairly stable and super speedy", "kind": "", "icon": true, "domain": null, "github_repo": "github.com/timescale/pg_textsearch", "official_url": "https://github.com/timescale/pg_textsearch", "pricing": "", "aliases": ["pg_textsearch"], "verdict": null, "praise": [{"label": "", "summary": "", "quotes": [{"id": 761559056, "item_id": 47597441, "url": "https://news.ycombinator.com/item?id=47597441", "by": "kev009", "date": "2026-03-31", "version": null, "stance": "recommend", "quote": "been shipping it for a while", "excerpt": "The \"term positions\" caveat seems like a major limitation for human oriented searches of logs or products or whatever. I don't see it mentioned in what's next, will you address it in some future release or is it out of scope for your intended use cases? P.S. been shipping it for a while https://www.freshports.org/databases/pg_textsearch/ :)", "context": "", "use_case": "BM25 search in Postgres", "switched_from": "", "story": "Show HN: How This Graybeard Built the Fastest and Freest Postgres BM25 Search"}, {"id": 761536096, "item_id": 47596006, "url": "https://news.ycombinator.com/item?id=47596006", "by": "diwank", "date": "2026-03-31", "version": null, "stance": "recommend", "quote": "we have been using pg_textsearch in production for a few weeks now, and it's been fairly stable and super speedy", "excerpt": "we have been using pg_textsearch in production for a few weeks now, and it's been fairly stable and super speedy. we used to use paradedb (aka pg_search -- it's quite annoying that the two or so similarly named), but paradedb was extremely unstable, led to serious data corruption a bunch of times. in fact, before switching to pg_textsearch, we just switched over to plain trigram search coz paradedb was tanking our db", "context": "", "use_case": "Postgres full-text search in production", "switched_from": "ParadeDB", "story": "Show HN: How This Graybeard Built the Fastest and Freest Postgres BM25 Search"}, {"id": 750418689, "item_id": 46901168, "url": "https://news.ycombinator.com/item?id=46901168", "by": "cpursley", "date": "2026-02-05", "version": null, "stance": "recommend", "quote": "with the recent example of pg_textsearch (BM25)", "excerpt": "In 2026, Postgres and it's ecosystem just keep getting better with the recent example of pg_textsearch (BM25). A few years ago a gist of mine blew up on hacker news (gist: https://gist.github.com/cpursley/c8fb81fe8a7e5df038158bdfe0f06dbb; thread: https://news.ycombinator.com/item?id=39273954). Thought I'd turn the philosophy into a website with an easy to search directory of tools and extensions.", "context": "", "use_case": "", "switched_from": "", "story": "In 2026, Postgres Is (Still) Enough"}]}], "caveats": [], "who": [], "tags": [], "use_cases": ["bm25 search in postgres", "postgres full-text search", "postgres full-text search in production", "bm25 search index"], "compared": [{"slug": "paradedb", "name": "ParadeDB", "co": 3, "switched_from": 1, "switched_to": 0}, {"slug": "postgresql", "name": "PostgreSQL", "co": 3, "switched_from": 0, "switched_to": 0}, {"slug": "claude-code", "name": "Claude Code", "co": 2, "switched_from": 0, "switched_to": 0}, {"slug": "pgvector", "name": "pgvector", "co": 2, "switched_from": 0, "switched_to": 0}], "makers": [{"id": 801459392, "item_id": 50091212, "url": "https://news.ycombinator.com/item?id=50091212", "by": "thenoahhein", "date": "2026-10-14", "version": null, "stance": "recommend", "quote": "We have an alternative full-text search extension as well, pg_textsearch that's completely open source", "excerpt": "(Tiger data employee fwiw) We have an alternative full-text search extension as well, pg_textsearch that's completely open source that supports hybrid re-ranking Here's a blog on it (i linked to the section on hybrid search, there's a code snippet for you in there) https://www.tigerdata.com/blog/introducing-pg_textsearch-true-bm25-ranking-hybrid-retrieval-postgres#hybrid-search-combining-vectors-and-keywords We're bi", "context": "", "use_case": "full-text search in Postgres", "switched_from": "", "story": "Pg_vectorsearch: An index that is faster than pgvector's IVFFlat and HNSW"}, {"id": 774683728, "item_id": 48417733, "url": "https://news.ycombinator.com/item?id=48417733", "by": "tjgreen", "date": "2026-06-05", "version": null, "stance": "recommend", "quote": "you can use https://github.com/timescale/pg_textsearch on Azure HorizonDB", "excerpt": "ParadeDB is AGPL so not generally available on the hyperscalars. However, you can use https://github.com/timescale/pg_textsearch on Azure HorizonDB (and likely soon Flex). Disclosure: I'm the pg_textsearch maintainer and now at Azure. I didn't quite follow your comment about vector support, are you asking for something beyond what pgvector + diskann provide (both available on Azure)?", "context": "pg_textsearch maintainer, now at Azure", "use_case": "Text search in PostgreSQL", "switched_from": "", "story": "pg_durable: Microsoft open sources in-database durable execution"}, {"id": 761498400, "item_id": 47593650, "url": "https://news.ycombinator.com/item?id=47593650", "by": "tjgreen", "date": "2026-03-31", "version": null, "stance": "recommend", "quote": "we've got pretty robust partitioned table support in the extension", "excerpt": "Partitions would be one option, and we've got pretty robust partitioned table support in the extension. (Timescaledb uses partitioning for hypertables, so we had to front-load that support). Expression indexes would be another option, not yet done but there is a community PR in flight: https://github.com/timescale/pg_textsearch/pull/154", "context": "", "use_case": "BM25 full-text search in Postgres", "switched_from": "", "story": "Show HN: How This Graybeard Built the Fastest and Freest Postgres BM25 Search"}, {"id": 761437712, "item_id": 47589857, "url": "https://news.ycombinator.com/item?id=47589857", "by": "tjgreen", "date": "2026-03-31", "version": null, "stance": "recommend", "quote": "pg_textsearch v1.0 is freely available via open source (Postgres license)", "excerpt": "Last summer we faced a conundrum at my company, Tiger Data, a Postgres cloud vendor whose main business is in timeseries data. We were trying to grow our business towards emerging AI-centric workloads and wanted to provide a state-of-the-art hybrid search stack in Postgres. We'd already built pgvectorscale in house with the goal of scaling semantic search beyond pgvector's main memory limitations. We just needed a sc", "context": "database internals engineer at Tiger Data, 25 years", "use_case": "BM25 full-text search in Postgres", "switched_from": "", "story": "Show HN: How This Graybeard Built the Fastest and Freest Postgres BM25 Search"}, {"id": 743018993, "item_id": 46438687, "url": "https://news.ycombinator.com/item?id=46438687", "by": "jascha_eng", "date": "2025-12-30", "version": null, "stance": "recommend", "quote": "We have docs on how to do hybrid search here", "excerpt": "We have docs on how to do hybrid search here: https://www.tigerdata.com/docs/use-timescale/latest/extensions/pg-textsearch#build-hybrid-search-with-semantic-and-keyword-search Essentially you combine the pgvector score and the bm25 score to hopefully get better results.", "context": "", "use_case": "BM25 keyword search in Postgres", "switched_from": "", "story": "Postgres extension complements pgvector for performance and scale"}, {"id": 742991200, "item_id": 46436950, "url": "https://news.ycombinator.com/item?id=46436950", "by": "jascha_eng", "date": "2025-12-30", "version": null, "stance": "recommend", "quote": "these two extensions make postgres a really capable hybrid search engine", "excerpt": "Combined with our other search extension for full text search these two extensions make postgres a really capable hybrid search engine: https://github.com/timescale/pg_textsearch", "context": "", "use_case": "", "switched_from": "", "story": "Postgres extension complements pgvector for performance and scale"}], "threads": [{"url": "https://news.ycombinator.com/item?id=47589856", "title": "Show HN: How This Graybeard Built the Fastest and Freest Postgres BM25 Search", "mentions": 5}, {"url": "https://news.ycombinator.com/item?id=46379765", "title": "Postgres extension complements pgvector for performance and scale", "mentions": 2}, {"url": "https://news.ycombinator.com/item?id=50086165", "title": "Pg_vectorsearch: An index that is faster than pgvector's IVFFlat and HNSW", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=49766611", "title": "Tin: full-text search for Postgres", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=48414367", "title": "pg_durable: Microsoft open sources in-database durable execution", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=46901167", "title": "In 2026, Postgres Is (Still) Enough", "mentions": 1}], "sentiment_by_month": {"2025-11": {}, "2025-12": {}, "2026-01": {}, "2026-02": {"recommend": 1}, "2026-03": {"recommend": 2, "neutral": 1}, "2026-04": {}, "2026-05": {}, "2026-06": {}, "2026-07": {}, "2026-08": {}, "2026-09": {"compare": 1}, "2026-10": {}}, "versions": [], "version_unnamed": 0, "family_ref": null, "runs_on": null, "lines": [], "quotes": [{"id": 796278273, "item_id": 49767392, "url": "https://news.ycombinator.com/item?id=49767392", "by": "andrenotgiant", "date": "2026-09-19", "version": null, "stance": "compare", "quote": "Timescale has pg_textsearch", "excerpt": "I think what we're seeing with every database company providing new full-text search capabilities is an example of AI coding productivity showing up in the real world. It started with paradeDB and pg_search https://www.paradedb.com/blog/introducing-search Timescale has pg_textsearch https://github.com/timescale/pg_textsearch Neon and Databricks have Lakebase Search https://docs.databricks.com/aws/en/oltp/projects/lak", "context": "", "use_case": "Postgres full-text search", "switched_from": "", "story": "Tin: full-text search for Postgres"}, {"id": 761559056, "item_id": 47597441, "url": "https://news.ycombinator.com/item?id=47597441", "by": "kev009", "date": "2026-03-31", "version": null, "stance": "recommend", "quote": "been shipping it for a while", "excerpt": "The \"term positions\" caveat seems like a major limitation for human oriented searches of logs or products or whatever. I don't see it mentioned in what's next, will you address it in some future release or is it out of scope for your intended use cases? P.S. been shipping it for a while https://www.freshports.org/databases/pg_textsearch/ :)", "context": "", "use_case": "BM25 search in Postgres", "switched_from": "", "story": "Show HN: How This Graybeard Built the Fastest and Freest Postgres BM25 Search"}, {"id": 761551424, "item_id": 47596964, "url": "https://news.ycombinator.com/item?id=47596964", "by": "esafak", "date": "2026-03-31", "version": null, "stance": "neutral", "quote": "https://timescale.github.io/pg_textsearch/benchmarks/comparison.html", "excerpt": "interesting documents: https://timescale.github.io/pg_textsearch/benchmarks/comparison.html https://github.com/timescale/pg_textsearch/blob/main/ROADMAP.md", "context": "", "use_case": "BM25 search in Postgres", "switched_from": "", "story": "Show HN: How This Graybeard Built the Fastest and Freest Postgres BM25 Search"}, {"id": 761536096, "item_id": 47596006, "url": "https://news.ycombinator.com/item?id=47596006", "by": "diwank", "date": "2026-03-31", "version": null, "stance": "recommend", "quote": "we have been using pg_textsearch in production for a few weeks now, and it's been fairly stable and super speedy", "excerpt": "we have been using pg_textsearch in production for a few weeks now, and it's been fairly stable and super speedy. we used to use paradedb (aka pg_search -- it's quite annoying that the two or so similarly named), but paradedb was extremely unstable, led to serious data corruption a bunch of times. in fact, before switching to pg_textsearch, we just switched over to plain trigram search coz paradedb was tanking our db", "context": "", "use_case": "Postgres full-text search in production", "switched_from": "ParadeDB", "story": "Show HN: How This Graybeard Built the Fastest and Freest Postgres BM25 Search"}, {"id": 750418689, "item_id": 46901168, "url": "https://news.ycombinator.com/item?id=46901168", "by": "cpursley", "date": "2026-02-05", "version": null, "stance": "recommend", "quote": "with the recent example of pg_textsearch (BM25)", "excerpt": "In 2026, Postgres and it's ecosystem just keep getting better with the recent example of pg_textsearch (BM25). A few years ago a gist of mine blew up on hacker news (gist: https://gist.github.com/cpursley/c8fb81fe8a7e5df038158bdfe0f06dbb; thread: https://news.ycombinator.com/item?id=39273954). Thought I'd turn the philosophy into a website with an easy to search directory of tools and extensions.", "context": "", "use_case": "", "switched_from": "", "story": "In 2026, Postgres Is (Still) Enough"}, {"id": 745042912, "item_id": 46565182, "url": "https://news.ycombinator.com/item?id=46565182", "by": "jascha_eng", "date": "2026-01-10", "version": null, "stance": "neutral", "quote": "BM25 index for postgres, mostly written by a single (very smart) guy and Claude Code.", "excerpt": "https://github.com/timescale/pg_textsearch BM25 index for postgres, mostly written by a single (very smart) guy and Claude Code.", "context": "", "use_case": "BM25 search index", "switched_from": "", "story": "AI Zealotry"}]}