How the Content Ranking System Implements Search Relevance in 30-Seconds-of-Code
The content ranking system computes a normalized relevance score between 0 and 1 by matching keywords in searchable content against weighted scores defined in a YAML configuration file.
The 30-seconds-of-code repository uses a custom content ranking system to determine search relevance for code snippets and collections. This system pre-computes relevance scores during the build process based on keyword frequency and importance, allowing the site to sort content by search relevance without runtime computation overhead.
Keyword-Score Configuration
The ranking algorithm relies on a static YAML file that assigns integer weights to specific keywords. Located at content/rankingEngine.yaml, this configuration maps terms like "algorithm" or "animation" to numeric values that reflect their relative importance in the content taxonomy.
During the build process, the extractor utility loads this YAML data and injects it into the Ranker class:
// src/lib/contentUtils/extractor.js
import Ranker from '#src/lib/contentUtils/ranker.js';
const keywordData = await FileHandler.read(rankingEnginePath);
Ranker.keywordScores = keywordData;
This initialization step ensures that the ranking algorithm has access to the complete keyword weight map before processing any content.
The Ranking Algorithm
The core ranking logic resides in src/lib/contentUtils/ranker.js within the Ranker.rankIndexableContent static method. This function accepts a concatenated string containing a content item's title, tags, language, full text, and excerpt, then returns a normalized floating-point score between 0.0001 and 1.0.
// src/lib/contentUtils/ranker.js
static rankIndexableContent = indexableContent => {
const { keywordScoreLimit, keywordCountLimit } = Ranker.rankerSettings;
let score = 0, count = 0;
for (let k in Ranker.keywordScores) {
if (indexableContent.includes(k)) {
score += Ranker.keywordScores[k];
count++;
}
if (count >= keywordCountLimit || score >= keywordScoreLimit) break;
}
score = Math.min(score, keywordScoreLimit);
return Math.max(0.0001, score / keywordScoreLimit);
};
The algorithm enforces two critical constraints defined in rankerSettings: a keywordScoreLimit of 100 that caps the total accumulated score, and a keywordCountLimit of 20 that restricts how many unique keywords can contribute to the score. After accumulating points, the final score is normalized by dividing by the score limit, ensuring consistent comparability across all content items.
Computing Content Rankings During Build
The ranking computation occurs during the content extraction phase for both snippets and collections. In src/lib/contentUtils/modelWorkers/snippet.js, the system constructs a searchable string by concatenating the snippet's metadata and content, then passes this string to the ranker:
// src/lib/contentUtils/modelWorkers/snippet.js
const ranking = Ranker.rankIndexableContent(
[title, ...tags, language?.long, fullText, shortDescription]
.filter(Boolean)
.join(' ')
.toLowerCase()
);
return {
// ... other snippet properties
ranking,
};
Collections follow an identical pattern in collection.js. The resulting ranking value is stored as a permanent property on the content model, meaning the relevance score is calculated exactly once during the build and never recomputed at runtime.
Persisting and Ordering by Relevance
Both Snippet and Collection models inherit from ContentModel in src/models/contentModel.js, which provides the byRanking static method for ordering records:
// src/models/contentModel.js
static byRanking(records) {
return records.order((a, b) => b.ranking - a.ranking);
}
This method sorts records in descending order of their pre-computed relevance scores. The site uses this helper throughout the application layer, such as in the home page adapter to display the most relevant snippets:
// src/adapters/page/homePage.js
const topSnippets = Snippet.scope('listed', 'published', 'byRanking');
The ranking also serves as a secondary sort key in the recommendation presenter, ensuring that when primary recommendation scores tie, the content with higher overall relevance appears first:
// src/presenters/recommendationPresenter.js
this.recommendationRankings.set(snippet.id, [
recommendationRanking,
snippet.ranking,
snippet,
]);
Summary
- The content ranking system uses a YAML configuration file (
content/rankingEngine.yaml) to define keyword weights that drive relevance scoring. - The
Ranker.rankIndexableContentmethod insrc/lib/contentUtils/ranker.jscomputes normalized scores between 0 and 1 by matching content against weighted keywords, enforcing limits of 100 total score points and 20 matched keywords. - Rankings are calculated during the build process in
src/lib/contentUtils/modelWorkers/snippet.jsandcollection.js, then stored permanently on content models. - The
ContentModel.byRankingmethod insrc/models/contentModel.jsprovides runtime sorting by these pre-computed scores, used by adapters likehomePage.jsand presenters likerecommendationPresenter.js.
Frequently Asked Questions
How does the ranking system handle new keywords not in the YAML file?
Keywords not present in content/rankingEngine.yaml contribute zero points to the relevance score. The ranking algorithm only recognizes and scores keywords explicitly defined in the configuration file, ensuring consistent and controlled relevance weighting across the content library.
Can the relevance scores change after the site is built?
No, relevance scores are immutable after the build process completes. The Ranker.rankIndexableContent function executes during content extraction, and the resulting float value is baked into the static content.json file. To update rankings, you must modify the YAML weights and rebuild the site.
What is the maximum possible relevance score a snippet can achieve?
The maximum normalized relevance score is 1.0, achieved when a content item matches keywords whose combined weights reach the keywordScoreLimit of 100. The algorithm caps the raw score at this limit before dividing by 100 to produce the final normalized value between 0.0001 and 1.0.
How does the system prioritize between primary recommendation scores and the content ranking?
When generating recommendations, the system uses the pre-computed content ranking as a secondary sort key. If two snippets have identical primary recommendation scores (based on language, tags, and token matching), the snippet with the higher ranking value appears first in the results, as implemented in src/presenters/recommendationPresenter.js.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →