Every keyword search engine has to answer the same question millions of times a second: given a query, which of billions of documents deserve to be shown first? BM25 is the classical answer — a probabilistic ranking function that balances how often a query term appears in a document against how rare that term is across the whole corpus, while penalizing documents that only look relevant because they are unusually long. This simulator renders a synthetic 18-document corpus in 3D, one bar per document, and recomputes every document's BM25 score live as you pick query terms and drag the k1 (term-frequency saturation) and b (length-normalization) constants — the same two knobs that Elasticsearch, Lucene and Solr expose to real search engineers.