Home/Low-level design/Document Search Engine

Document Search Engine

Tokenization, positional indexes, and stale updates

Ownership and transitions

A positional index supports exact phrase matching by aligned token positions. Replacing text must remove old term counts and positions before the new index becomes visible, or stale matches survive. Count overlapping phrase starts; a repeated-token phrase can match at adjacent positions. Ranking sorts score descending then document ID. Index construction costs input length, while phrase verification and ranking depend on candidate matches.

JavaScript boundaries

Use native classes with per-instance state and plain object/array snapshots. Object assignment shares a reference; copy retained inputs and every outward mutable container, including nested arrays. null means absence. Map handles arbitrary string keys safely, including "__proto__"; do not confuse a missing key with zero or an empty string. Domain validation uses RangeError. Numeric inputs must satisfy Number.isSafeInteger, so booleans, fractions, infinities, and NaN are invalid where an integer is required. All documented aggregate results and timestamp-plus-duration sums fit the safe-integer range. Strings use exact case-sensitive equality; lexical order compares JavaScript UTF-16 code units. Calls are serialized and synchronous.

JavaScript
const internal = ["initial"];
const snapshot = [...internal];
snapshot.length = 0;
console.assert(internal.length === 1);

A detached snapshot protects ownership; the service still has to validate and commit a coherent transition.

Put it into practice

Implement the exercise in a full-screen workspace, then run its tests.

Open practice
Next lessonTask Scheduler