From 6cb5144c095bd80cfa3035bc375122e5e9158346 Mon Sep 17 00:00:00 2001 From: zadam Date: Sat, 18 Jun 2022 14:45:41 +0200 Subject: [PATCH] add score to note title matches as opposed to note path, #2927 --- src/services/search/search_result.js | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/services/search/search_result.js b/src/services/search/search_result.js index 8a399a1fb..0d85d8a8f 100644 --- a/src/services/search/search_result.js +++ b/src/services/search/search_result.js @@ -1,6 +1,7 @@ "use strict"; const beccaService = require('../../becca/becca_service'); +const becca = require('../../becca/becca'); class SearchResult { constructor(notePathArray) { @@ -21,18 +22,24 @@ class SearchResult { // matches in attributes don't get extra points and thus are implicitly valued less than note path matches - const chunks = this.notePathTitle.toLowerCase().split(" "); + this.addScoreForStrings(tokens, this.notePathTitle, 1); + + // add one more time for note title alone (already contained in the notePathTitle), + // thus preferring notes with matches on its own note title as opposed to ancestors or descendants + this.addScoreForStrings(tokens, becca.notes[this.noteId].title, 1.5); + } + + addScoreForStrings(tokens, str, factor) { + const chunks = str.toLowerCase().split(" "); for (const chunk of chunks) { for (const token of tokens) { if (chunk === token) { - this.score += 4 * token.length; - } - else if (chunk.startsWith(token)) { - this.score += 2 * token.length; - } - else if (chunk.includes(token)) { - this.score += token.length; + this.score += 4 * token.length * factor; + } else if (chunk.startsWith(token)) { + this.score += 2 * token.length * factor; + } else if (chunk.includes(token)) { + this.score += token.length * factor; } } }