diff options
author | Alex Shpak <alex-shpak@users.noreply.github.com> | 2019-07-17 13:42:39 +0200 |
---|---|---|
committer | Alex Shpak <alex-shpak@users.noreply.github.com> | 2019-08-06 11:33:42 +0200 |
commit | a3f7d8b9484d14f36e34ce77d5f4b25405bcc01f (patch) | |
tree | 7fd85b6decc8204efa26c961bdaebe87071a08ee /assets/search.js | |
parent | c78c67ffeda5948d701566fb21fffbd8cccdbfb2 (diff) |
Improve search settings
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) { |