Skip to content

Commit

Permalink
chore(docs): revert removal of custom search scoring (#2019)
Browse files Browse the repository at this point in the history
Signed-off-by: Lala Sabathil <aiko@aitsys.dev>
Co-authored-by: Lala Sabathil <lala@pycord.dev>
Co-authored-by: plun1331 <49261529+plun1331@users.noreply.github.com>
  • Loading branch information
3 people authored Apr 17, 2023
1 parent eb4fd12 commit f5e780a
Show file tree
Hide file tree
Showing 2 changed files with 83 additions and 1 deletion.
82 changes: 82 additions & 0 deletions docs/_static/js/scorer.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
"use-strict";

let queryBeingDone = null;
let pattern = null;

const escapedRegex = /[-\/\\^$*+?.()|[\]{}]/g;
function escapeRegex(e) {
return e.replace(escapedRegex, "\\$&");
}

// for some reason Sphinx shows some entries twice
// if something has been scored already I'd rather sort it to the bottom
const beenScored = new Set();

function __score(haystack, regex) {
let match = regex.exec(haystack);
if (match == null) {
return Number.MAX_VALUE;
}
let subLength = match[0].length;
let start = match.index;
return (subLength * 1000 + start) / 1000.0;
}

// unused for now
function __cleanNamespaces(query) {
return query.replace(/(discord\.(ext\.)?)?(.+)/, "$3");
}

Scorer = {
// Implement the following function to further tweak the score for each result
// The function takes a result array [filename, title, anchor, descr, score]
// and returns the new score.
score: (result) => {
// only inflate the score of things that are actual API reference things
const [, title, , , score] = result;

if (pattern !== null && title.startsWith("discord.")) {
let _score = __score(title, pattern);
if (_score === Number.MAX_VALUE) {
return score;
}
if (beenScored.has(title)) {
return 0;
}
beenScored.add(title);
let newScore = 100 + queryBeingDone.length - _score;
// console.log(`${title}: ${score} -> ${newScore} (${_score})`);
return newScore;
}
return score;
},

// query matches the full name of an object
objNameMatch: 15,
// or matches in the last dotted part of the object name
objPartialMatch: 11,
// Additive scores depending on the priority of the object
objPrio: {
0: 15, // used to be importantResults
1: 7, // used to be objectResults
2: -5, // used to be unimportantResults
},
// Used when the priority is not in the mapping.
objPrioDefault: 0,

// query found in title
title: 15,
partialTitle: 7,
// query found in terms
term: 5,
partialTerm: 2,
};

document.addEventListener("DOMContentLoaded", () => {
const params = new URLSearchParams(window.location.search);
queryBeingDone = params.get("q");
if (queryBeingDone) {
let pattern = Array.from(queryBeingDone).map(escapeRegex).join(".*?");
pattern = new RegExp(pattern, "i");
}
});
2 changes: 1 addition & 1 deletion docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -380,7 +380,7 @@ def write_new():

# The name of a javascript file (relative to the configuration directory) that
# implements a search results scorer. If empty, the default will be used.
# html_search_scorer = "_static/scorer.js"
html_search_scorer = "_static/js/scorer.js"

# html_js_files = ["custom.js", "settings.js", "copy.js", "sidebar.js"]

Expand Down

0 comments on commit f5e780a

Please sign in to comment.