> One solution is to ensemble semantic search with keyword search. BM25 is a solid baseline when we expect at least one keyword to match. Nonetheless, it doesn’t do as well on shorter queries where there’s no keyword overlap with the relevant documents—in this case, averaged keyword embeddings may perform better. By combining the best of keyword search and semantic search, we can improve recall for various types of queries.
Oh hey I have a demo of that here: https://findsight.ai
For it I wrote a custom search engine, and KNN index implementation, which ranks and merges results across three stages (labels, full-text, embedding) effectively. To speed up retrieval, OpenAI embeddings are stored instead as SuperBit signatures. Rank merging turned out to be a really hard problem.