jamesgresql
Same Query, Three Results: Benchmarking ParadeDB and Postgres FTS
What We Think About When We Think About Benchmarking
Rather than taking the usual path of bundling a workload and execution into one neat package, we decided to build a reusable database benchmark runner based on grafana/k6 first.
Search Benchmark Wars (A Conversation with Paul Masurel, Creator of Tantivy)
A Conversation with Paul Masurel, Creator of Tantivy
This interview with Tantivy creator Paul Masurel looks at how wrong I would have been; discussing challenging solved domains, open-source competition done right, and why long-fermented frustration is an underrated driver.
Why is your Mac WiFi Slow?
Best feature for me being was being able to detect intermittent jitter to my gateway. I never managed to catch this with speed-tests alone.
A few takeaway: - Postgres’s native `tsvector/ts_rank` stuff works ok for basic text matching, but it doesn’t account for global term frequency like BM25 does , so rankings can feel “flat” or noisy as soon as you go beyond simple queries (it's also slow). - Using a BM25 index (via extensions like `pg_search`) actually gives you relevance scores similar to what you’d expect out of modern search engines, and you can use stemmers/tokenization directly in SQL. BM25 is the star of this story. - Vector search fills in the semantic gaps (so “database optimization” isn’t limited to exact keywords), but you still don’t want to throw out lexical relevance. The trick is making it additive, not just adding scores together. - RRF (Reciprocal Rank Fusion) is a neat practical tool here. It sidesteps trying to normalize totally different scoring systems by just focusing on rank positions.
If you’re building anything where relevance matters (docs, product search, help articles) having BM25 + vector makes a big difference over vanilla FTS + embeddings alone. It also keeps everything in Postgres, which simplifies consistency/ops compared to an external search cluster.
Hybrid Search in PostgreSQL: The Missing Manual
Elasticsearch Was Never a Database
Elastic style faceted search from PostgreSQL
ParadeDB Makes Faceted Search 14× Faster Inside PostgreSQL
You get the same faceting features you'd expect from a dedicated search engine while maintaining full ACID compliance. Happy to answer technical questions about the implementation!
Teaching Postgres to Facet Like Elasticsearch
However, even though the approach is “old fashioned” it’s still widely used for English. I’m not sure there is a universal approach that semantic search could use that would be both fast and accurate?
At the end of the day people choose a tokenizer that matches their language.
I will update the article to make all this clearer though!
The Missing Manual for Hybrid Search in PostgreSQL
I'm curious, after reading this article how many people can tell me why that title would have been great?
(also I'd love feedback on the interactive components, I think they came out well!)