The BM25-vs-dense split for exact identifiers like error codes and SKUs is the detail most retrieval tutorials skip, and it is exactly where pure vector search quietly fails. One thing I would add on the HNSW section: the recall you get in practice is very sensitive to efSearch and M, so the same index can look great in eval and miss neighbors in production if those are left at defaults. Did you find IVF worth keeping around once HNSW was in place, or did it only matter for the on-disk memory case?