A developer's workspace with code and retrieval diagrams.

Build a ColBERT‑Style Late‑Interaction Retriever in Pure Python

Learn how to construct a fast, vector‑less late‑interaction retriever and inverted index using only standard Python, and why it impresses hiring managers.

October 11, 2026 · 7 min · 1316 words · martinuke0
A close‑up of a search query interface with data streams visualisation

Mastering BM25: How to Tune Search Relevance in Large‑Scale Indexes

A hands‑on guide to adjusting BM25 k1 and b, handling document length normalization, and scaling BM25 for low‑latency search at scale.

October 5, 2026 · 7 min · 1295 words · martinuke0
BM25+ formula visualized on a search interface

Deep Dive into BM25+: Tuning Parameters for Large‑Scale Enterprise Search

BM25+ extends classic BM25 with term frequency saturation and document length normalization. This guide walks you through parameter selection, real-world tuning, and production patterns for enterprise search.

October 1, 2026 · 10 min · 2089 words · martinuke0
A terminal showing BM25 retrieval scores alongside a RAG pipeline diagram

Build a RAG Pipeline with From-Scratch BM25: A Hands-On Portfolio Project

A hands-on guide to building a Retrieval-Augmented Generation pipeline with a from-scratch BM25 scorer. Covers architecture, real Python code, testing, and a senior-level roadmap for extending it into a production-grade system.

September 23, 2026 · 13 min · 2598 words · martinuke0
A visual representation of BM25 relevance scoring curves across different term frequencies

Implementing BM25 Ranking with Lucene: Precision, Tuning, and Production Trade-offs

BM25 is the default ranking function in Lucene and Elasticsearch, but most engineers never tune its parameters. This post unpacks the algorithm’s internals, practical configuration levers, and the production trade-offs that separate adequate search from great search.

September 12, 2026 · 8 min · 1690 words · martinuke0
Feedback