Hybrid search with pgvector got worse until I added BM25
The hybrid query most tutorials show, Postgres full-text search fused with pgvector, scored worse on two public benchmarks than vector search alone. With a real BM25 index as the keyword half, the same fusion gave the best result I measured, in under 3 ms a query. Here are the numbers for seven ways to search, and the query shapes that made the fused one 15 times slower until I found them.