mirror of
https://github.com/Brandon-Rozek/website-theme.git
synced 2024-11-25 09:36:32 -05:00
Implement Bigram search #5
This commit is contained in:
parent
8a669f1947
commit
f75c5a1e2b
1 changed files with 46 additions and 1 deletions
|
@ -2,6 +2,49 @@ var lunrIndex
|
||||||
var lunrResult
|
var lunrResult
|
||||||
var pagesIndex
|
var pagesIndex
|
||||||
|
|
||||||
|
var bigramTokeniser = function (obj, metadata) {
|
||||||
|
if (obj == null || obj == undefined) {
|
||||||
|
return []
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Array.isArray(obj)) {
|
||||||
|
return obj.map(function (t) {
|
||||||
|
return new lunr.Token(
|
||||||
|
lunr.utils.asString(t).toLowerCase(),
|
||||||
|
lunr.utils.clone(metadata)
|
||||||
|
)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
var str = obj.toString().trim().toLowerCase(),
|
||||||
|
tokens = []
|
||||||
|
|
||||||
|
for(var i = 0; i <= str.length - 2; i++) {
|
||||||
|
var tokenMetadata = lunr.utils.clone(metadata) || {}
|
||||||
|
tokenMetadata["position"] = [i, i + 2]
|
||||||
|
tokenMetadata["index"] = tokens.length
|
||||||
|
tokens.push(
|
||||||
|
new lunr.Token (
|
||||||
|
str.slice(i, i + 2),
|
||||||
|
tokenMetadata
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
return tokens
|
||||||
|
}
|
||||||
|
|
||||||
|
var queryNgramSeparator = function (query) {
|
||||||
|
var str = query.toString().trim().toLowerCase(),
|
||||||
|
tokens = []
|
||||||
|
|
||||||
|
for(var i = 0; i <= str.length - 2; i++) {
|
||||||
|
tokens.push(str.slice(i, i + 2))
|
||||||
|
}
|
||||||
|
|
||||||
|
return tokens.join(' ')
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Preparation for using lunr.js
|
* Preparation for using lunr.js
|
||||||
*/
|
*/
|
||||||
|
@ -9,6 +52,8 @@ function initLunr () {
|
||||||
$.getJSON('index.json').done(function (index) {
|
$.getJSON('index.json').done(function (index) {
|
||||||
pagesIndex = index
|
pagesIndex = index
|
||||||
lunrIndex = lunr(function () {
|
lunrIndex = lunr(function () {
|
||||||
|
this.tokenizer = bigramTokeniser
|
||||||
|
this.pipeline.reset()
|
||||||
this.ref('ref')
|
this.ref('ref')
|
||||||
this.field('title', { boost: 10 })
|
this.field('title', { boost: 10 })
|
||||||
this.field('body')
|
this.field('body')
|
||||||
|
@ -29,7 +74,7 @@ function initLunr () {
|
||||||
* @return {Object[]} Array of search results
|
* @return {Object[]} Array of search results
|
||||||
*/
|
*/
|
||||||
function search (query) {
|
function search (query) {
|
||||||
lunrResult = lunrIndex.search(query)
|
lunrResult = lunrIndex.search(queryNgramSeparator(query))
|
||||||
return lunrResult.map(function (result) {
|
return lunrResult.map(function (result) {
|
||||||
return pagesIndex.filter(function (page) {
|
return pagesIndex.filter(function (page) {
|
||||||
return page.ref === result.ref
|
return page.ref === result.ref
|
||||||
|
|
Loading…
Reference in a new issue