synchronous-autocomplete
Advanced tools
Comparing version 2.0.0 to 2.1.0
90
index.js
@@ -6,2 +6,4 @@ 'use strict'; | ||
var internalId = Symbol('internal numeric ID'); | ||
var createAutocomplete = function createAutocomplete(tokens, scores, weights, nrOfTokens, originalIds, tokenize) { | ||
@@ -15,27 +17,8 @@ var byFragment = function byFragment(fragment, completion, fuzzy) { | ||
var _iteratorNormalCompletion = true; | ||
var _didIteratorError = false; | ||
var _iteratorError = undefined; | ||
try { | ||
for (var _iterator = tokens[fragment][Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { | ||
var id = _step.value; | ||
if (!results[id] || !results[id] > relevance) { | ||
results[id] = relevance; | ||
} | ||
var ids = tokens[fragment]; | ||
for (var i = 0; i < ids.length; i++) { | ||
var id = ids[i]; | ||
if (!results[id] || !results[id] > relevance) { | ||
results[id] = relevance; | ||
} | ||
} catch (err) { | ||
_didIteratorError = true; | ||
_iteratorError = err; | ||
} finally { | ||
try { | ||
if (!_iteratorNormalCompletion && _iterator.return) { | ||
_iterator.return(); | ||
} | ||
} finally { | ||
if (_didIteratorError) { | ||
throw _iteratorError; | ||
} | ||
} | ||
} | ||
@@ -58,27 +41,8 @@ } | ||
var _iteratorNormalCompletion2 = true; | ||
var _didIteratorError2 = false; | ||
var _iteratorError2 = undefined; | ||
try { | ||
for (var _iterator2 = tokens[t][Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { | ||
var _id = _step2.value; | ||
if (!results[_id] || !results[_id] > _relevance) { | ||
results[_id] = _relevance; | ||
} | ||
var _ids = tokens[t]; | ||
for (var _i = 0; _i < _ids.length; _i++) { | ||
var _id = _ids[_i]; | ||
if (!results[_id] || !results[_id] > _relevance) { | ||
results[_id] = _relevance; | ||
} | ||
} catch (err) { | ||
_didIteratorError2 = true; | ||
_iteratorError2 = err; | ||
} finally { | ||
try { | ||
if (!_iteratorNormalCompletion2 && _iterator2.return) { | ||
_iterator2.return(); | ||
} | ||
} finally { | ||
if (_didIteratorError2) { | ||
throw _iteratorError2; | ||
} | ||
} | ||
} | ||
@@ -99,25 +63,6 @@ } | ||
var data = Object.create(null); | ||
var _iteratorNormalCompletion3 = true; | ||
var _didIteratorError3 = false; | ||
var _iteratorError3 = undefined; | ||
try { | ||
for (var _iterator3 = tokenize(query)[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { | ||
var fragment = _step3.value; | ||
data[fragment] = byFragment(fragment, completion, fuzzy); | ||
} | ||
} catch (err) { | ||
_didIteratorError3 = true; | ||
_iteratorError3 = err; | ||
} finally { | ||
try { | ||
if (!_iteratorNormalCompletion3 && _iterator3.return) { | ||
_iterator3.return(); | ||
} | ||
} finally { | ||
if (_didIteratorError3) { | ||
throw _iteratorError3; | ||
} | ||
} | ||
var fragments = tokenize(query); | ||
for (var i = 0; i < fragments.length; i++) { | ||
var fragment = fragments[i]; | ||
data[fragment] = byFragment(fragment, completion, fuzzy); | ||
} | ||
@@ -142,2 +87,3 @@ | ||
id = parseInt(id); | ||
var score = relevance * Math.pow(weights[id], 1 / 3); | ||
@@ -150,2 +96,3 @@ results[id] = { | ||
}; | ||
results[id][internalId] = id; | ||
} | ||
@@ -161,2 +108,3 @@ } | ||
autocomplete.byFragment = byFragment; | ||
autocomplete.internalId = internalId; | ||
return autocomplete; | ||
@@ -163,0 +111,0 @@ }; |
{ | ||
"name": "synchronous-autocomplete", | ||
"description": "Fast, simple autocompletion.", | ||
"version": "2.0.0", | ||
"version": "2.1.0", | ||
"main": "index.js", | ||
@@ -6,0 +6,0 @@ "files": [ |
@@ -48,3 +48,3 @@ # synchronous-autocomplete | ||
In order to be as fast and disk-space-efficient as possible, `synchronous-autocomplete` requires five indexes to be prebuilt from the list of items. For our example, they would look like this: | ||
In order to be as fast and disk-space-efficient as possible, `synchronous-autocomplete` requires five indexes to be prebuilt from the list of items. Check [the example code](example.js) for more details on how to build them. For our example, they would look like this: | ||
@@ -87,4 +87,2 @@ ```js | ||
See [the example code](example.js) for more details on how to build them. | ||
Now, we can query our index: | ||
@@ -91,0 +89,0 @@ |
@@ -6,2 +6,4 @@ 'use strict' | ||
const internalId = Symbol('internal numeric ID') | ||
const createAutocomplete = (tokens, scores, weights, nrOfTokens, originalIds, tokenize) => { | ||
@@ -15,3 +17,5 @@ const byFragment = (fragment, completion, fuzzy) => { | ||
for (let id of tokens[fragment]) { | ||
const ids = tokens[fragment] | ||
for (let i = 0; i < ids.length; i++) { | ||
const id = ids[i] | ||
if (!results[id] || !results[id] > relevance) { | ||
@@ -37,3 +41,5 @@ results[id] = relevance | ||
for (let id of tokens[t]) { | ||
const ids = tokens[t] | ||
for (let i = 0; i < ids.length; i++) { | ||
const id = ids[i] | ||
if (!results[id] || !results[id] > relevance) { | ||
@@ -53,3 +59,5 @@ results[id] = relevance | ||
const data = Object.create(null) | ||
for (let fragment of tokenize(query)) { | ||
const fragments = tokenize(query) | ||
for (let i = 0; i < fragments.length; i++) { | ||
const fragment = fragments[i] | ||
data[fragment] = byFragment(fragment, completion, fuzzy) | ||
@@ -75,2 +83,3 @@ } | ||
id = parseInt(id) | ||
const score = relevance * Math.pow(weights[id], 1/3) | ||
@@ -83,2 +92,3 @@ results[id] = { | ||
} | ||
results[id][internalId] = id | ||
} | ||
@@ -93,2 +103,3 @@ } | ||
autocomplete.byFragment = byFragment | ||
autocomplete.internalId = internalId | ||
return autocomplete | ||
@@ -95,0 +106,0 @@ } |
14699
270
134