From a3f7d8b9484d14f36e34ce77d5f4b25405bcc01f Mon Sep 17 00:00:00 2001 From: Alex Shpak Date: Wed, 17 Jul 2019 13:42:39 +0200 Subject: Improve search settings --- assets/search.js | 45 +++++++++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 16 deletions(-) (limited to 'assets/search.js') diff --git a/assets/search.js b/assets/search.js index e29f183..edb81e9 100644 --- a/assets/search.js +++ b/assets/search.js @@ -6,14 +6,12 @@ const dummy = document.querySelector("#book-search-dummy"); input.addEventListener("focus", init); + input.addEventListener("keyup", search); function init() { loadScript("{{ "lunr.min.js" | relURL }}") - loadScript("{{ $searchData.RelPermalink }}", function() { - input.disabled = false; - input.addEventListener("keyup", search); - search(); - }); + loadScript("{{ $searchData.RelPermalink }}", search); + input.removeEventListener("focus", init); } @@ -22,19 +20,34 @@ results.removeChild(results.firstChild); } - if (input.value) { - const hits = window.bookSearch.idx.search(`${input.value}*`); - hits.slice(0, 10).forEach(function(hit) { - const page = window.bookSearch.pages[hit.ref]; - const li = dummy.querySelector("li").cloneNode(true), - a = li.querySelector("a"); - - a.href = page.href; - a.textContent = page.title; + if (!input.value || !window.bookSearch) { + return + } - results.appendChild(li); + const terms = lunr.tokenizer(input.value); + const searchHits = window.bookSearch.idx.query(function(query) { + query.term(terms, { + boost: 100, }); - } + query.term(terms, { + boost: 10, + wildcard: lunr.Query.wildcard.LEADING | lunr.Query.wildcard.TRAILING, + }); + query.term(terms, { + editDistance: 2 + }); + }); + + searchHits.slice(0, 10).forEach(function(hit) { + const page = window.bookSearch.pages[hit.ref]; + const li = dummy.querySelector("li").cloneNode(true), + a = li.querySelector("a"); + + a.href = page.href; + a.textContent = page.title; + + results.appendChild(li); + }); } function loadScript(src, callback) { -- cgit v1.2.3