diff options
Diffstat (limited to 'assets/search.js')
-rw-r--r-- | assets/search.js | 45 |
1 files changed, 29 insertions, 16 deletions
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) { |