“"iterative scans are more of a bandaid for filtering than a solution" — tacoooooooo on Hacker News (https://news.ycombinator.com/item?id=45798479)”
You know that feeling when your search stack keeps exact matches in one system, meaning-based matches in another system, and live inventory in a third path that your app glues together at the end. You pay for that design every time a price changes, an item goes out of stock, or a query needs both keyword precision and intent matching. You fetch too much, filter too late, and debug drift between systems that should agree but do not. If your catalog changes all day, your search architecture starts fighting your data instead of serving it.
Think of two store clerks who used to work at different counters: one clerk matches exact words, and the other guesses intent. Instacart first runs those clerks separately with Postgres for text search and FAISS for vector search, then merges the answers in the app, but later moves both jobs into Postgres with pgvector. That shift lets the database join live inventory, pricing, discounts, and ML features before it returns results, so you stop overfetching items that you throw away later. Instacart also routes queries to retailer shards, which keeps index size under control and keeps mutable catalog data close to the search path.
If you run search on a catalog where price, stock, and ranking data change all day, this article speaks to you. You should read it if your team already runs Postgres and you are tired of merging search results outside the database. It is not for you if you have a greenfield app, a mostly read-only corpus, or a small team that would rather buy hosted search than tune filtered ANN in Postgres.
Yes, you should study this if your data already lives in Postgres and your catalog changes constantly, because Instacart reports production gains that matter and the trade-offs are clear. You should not copy it blindly, because both the article and community threads say the fit breaks down when index size grows too far or when your team cannot handle planner-level tuning. Treat it as a production-proven pattern for a narrow class of search problems, not as a default answer for all hybrid search.
Deep-dive insight, Easy and Pro modes, plus action playbooks — the full breakdown is one tap away.