flexsearch
Advanced tools
Comparing version 0.2.31 to 0.2.32
/* | ||
FlexSearch v0.2.3 | ||
FlexSearch v0.2.32 | ||
Copyright 2017-2018 Thomas Wilkerling | ||
@@ -7,24 +7,25 @@ Released under the Apache 2.0 Licence | ||
*/ | ||
'use strict';(function(n,C,f){var p;(p=f.define)&&p.amd?p([],function(){return C}):(p=f.modules)?p[n.toLowerCase()]=C:"undefined"!==typeof module?module.exports=C:f[n]=C})("FlexSearch",function K(n){function f(a){a||(a=u);this.id=a.id||L++;this.init(a);p(this,"index",function(){return this.a});p(this,"length",function(){return Object.keys(this.a).length})}function p(a,b,c){Object.defineProperty(a,b,{get:c})}function d(a){return new RegExp(a,"g")}function v(a,b,c){if("undefined"===typeof c){for(c= | ||
0;c<b.length;c+=2)a=a.replace(b[c],b[c+1]);return a}return a.replace(b,c)}function w(a,b,c,e,h,g){if("undefined"===typeof b[c]){var k=h.indexOf(c);k=3/h.length*(h.length-k)+6/(k-h.lastIndexOf(" ",k))+.5|0;b[c]=k;k>g&&(a=a[k],a=a[c]||(a[c]=[]),a[a.length]=e)}return k||b[c]}function x(a){var b=[];if(!a)return b;for(var c=0,e=0,h=0,g="",k=a.length,B=0;B<k;B++){var d=a[B];"a"===d||"e"===d||"i"===d||"o"===d||"u"===d||"y"===d?c++:e++;" "!==d&&(g+=d);if(" "===d||1<c&&1<e||2<c||2<e||B===k-1)g&&(b[h]&&2<g.length&& | ||
h++,b[h]=b[h]?b[h]+g:g," "===d&&h++,g=""),e=c=0}return b}function F(a){for(var b="",c="",e="",h=0;h<a.length;h++){var g=a[h];if(g!==c)if(h&&"h"===g){if(e="a"===e||"e"===e||"i"===e||"o"===e||"u"===e||"y"===e,("a"===c||"e"===c||"i"===c||"o"===c||"u"===c||"y"===c)&&e||" "===c)b+=g}else b+=g;e=h===a.length-1?"":a[h+1];c=g}return b}function M(a,b){var c={};if(G)for(var e=0;e<a.length;e++){var h=b?b.call(y,a[e]):a[e];c[h]=String.fromCharCode(65E3-a.length+e)}return c}function N(a,b){var c=[];if(a){var e= | ||
0,h;for(h in a)if(a.hasOwnProperty(h)){var g=b?b.call(y,h):h;c[e++]=d("(?=.{"+(g.length+3)+",})"+g+"$");c[e++]=b?b.call(y,a[h]):a[h]}}return c}function O(a,b){a=a.length-b.length;return 0>a?1:0<a?-1:0}function P(a,b){a=a.length-b.length;return 0>a?-1:0<a?1:0}function Q(a,b){var c=[],e=a.length;if(1<e){a.sort(P);for(var h={},g=a[0],d=g.length,B=0;B<d;)h[g[B++]]=1;for(var f,q=0,m=1;m<e;){var r=!1;g=a[m];d=g.length;for(B=0;B<d;)if(h[f=g[B++]]===m){if(m===e-1&&(c[q++]=f,b&&q===b)){r=!1;break}r=!0;h[f]= | ||
m+1}if(!r)break;m++}}else e&&(c=a[0],b&&c&&c.length>b&&(c=c.slice(0,b)));return c}function E(a){a.B||(a.B=H(function(){a.B=null;var b=a.async;b&&(a.async=!1);if(a.c.length){for(var c=I(),e;(e=a.c.shift())||0===e;){var d=a.h[e];switch(d[0]){case D.add:a.add(d[1],d[2]);break;case D.update:a.update(d[1],d[2]);break;case D.remove:a.remove(d[1])}a.h[e]=null;delete a.h[e];if(100<I()-c)break}a.c.length&&E(a)}b&&(a.async=b)},1,"search-async-"+a.id))}function I(){return"undefined"!==typeof performance?performance.now(): | ||
(new Date).getTime()}function R(a,b,c,e){a=n("flexsearch","id"+a,function(){var a,b;self.a=function(c){if(c=c.data)c.search?self.postMessage({result:b.search(c.content,c.threshold?{limit:c.limit,threshold:c.threshold}:c.limit),id:a,content:c.content,limit:c.limit}):c.add?b.add(c.id,c.content):c.update?b.update(c.id,c.content):c.remove?b.remove(c.id):c.reset?b.reset():c.info?(c=b.info(),c.worker=a,b.C&&console.log(c)):c.register&&(a=c.id,c.options.cache=!1,c.options.async=!0,c.options.worker=!1,b= | ||
(new Function(c.register.substring(c.register.indexOf("{")+1,c.register.lastIndexOf("}"))))(),b=new b(c.options))}},function(a){(a=a.data)&&a.result?e(a.id,a.content,a.result,a.limit):c.debug&&console.log(a)},b);var d=K.toString();c.id=b;a.postMessage(b,{register:d,options:c,id:b});return a}var u={type:"integer",mode:"forward",cache:!1,async:!1,b:!1,threshold:0,depth:0,encode:"icase"},z=[],L=0,D={add:0,update:1,remove:2},J=d("[ -/]"),S="a about above after again against all also am an and any are aren't as at be because been before being below both but by can cannot can't come could couldn't did didn't do does doesn't doing dont down during each even few first for from further get go had hadn't has hasn't have haven't having he hed her here here's hers herself hes him himself his how how's i id if ill im in into is isn't it it's itself i've just know let's like make me more most mustn't my myself new no nor not now of off on once only or other ought our our's ourselves out over own same say see shan't she she'd shell shes should shouldn't so some such than that that's the their theirs them themselves then there there's these they they'd they'll they're they've this those through time to too until up us very want was wasn't way we wed well were weren't we've what what's when when's where where's which while who whom who's why why's will with won't would wouldn't you you'd you'll your you're your's yourself yourselves you've".split(" "), | ||
G={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log",icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:"",al:"",ance:"",ence:"",er:"",ic:"",able:"",ible:"",ant:"",ement:"",ment:"",ent:"",ou:"",ism:"",ate:"",iti:"",ous:"",ive:"",ize:""};f.new=function(a){return new this(a)};f.create=function(a){return f.new(a)}; | ||
f.addMatcher=function(a){for(var b in a)a.hasOwnProperty(b)&&(z[z.length]=d(b),z[z.length]=a[b]);return this};f.register=function(a,b){y[a]=b;return this};f.encode=function(a,b){return y[a].call(y,b)};f.prototype.init=function(a){this.m=[];if(a){if(a.worker)if("undefined"===typeof Worker)a.worker=!1,a.async=!0,this.j=null;else{var b=this,c=parseInt(a.worker,10)||4;b.s=-1;b.o=0;b.i=[];b.w=null;b.j=Array(c);for(var e=0;e<c;e++)b.j[e]=R(b.id,e,a||u,function(a,c,e,d){b.o!==b.b&&(b.i=b.i.concat(e),b.o++, | ||
d&&b.i.length>=d&&(b.o=b.b),b.w&&b.o===b.b&&(b.i.length?b.f="":b.f||(b.f=c),b.cache&&b.l.set(c,b.i),b.w(b.i),b.i=[]))})}this.mode=a.mode||this.mode||u.mode;this.cache=a.cache||this.cache||u.cache;this.async=a.async||this.async||u.async;this.b=a.worker||this.b||u.b;this.threshold=a.threshold||this.threshold||u.threshold;this.depth=a.depth||this.depth||u.depth;this.v=a.encode&&y[a.encode]||("function"===typeof a.encode?a.encode:this.v||!1);this.C=a.debug||this.C;a.matcher&&this.addMatcher(a.matcher); | ||
a.filter&&(this.A=M(!0===a.filter?S:a.filter,this.v));a.stemmer&&(this.D=N(!0===a.stemmer?G:a.stemmer,this.v))}this.g=[{},{},{},{},{},{},{},{},{},{},{}];this.a={};this.h={};this.c=[];this.B=null;this.f="";this.u=!0;this.l=this.cache?new T(3E4,50,!0):!1;return this};f.prototype.encode=function(a){a&&z.length&&(a=v(a,z));a&&this.m.length&&(a=v(a,this.m));a&&this.v&&(a=this.v.call(y,a));if(a&&this.A){a=a.split(" ");for(var b=0;b<a.length;b++){var c=a[b];this.A[c]&&(a[b]=this.A[c])}a=a.join(" ")}a&&this.D&& | ||
(a=v(a,this.D));return a};f.prototype.addMatcher=function(a){for(var b in a)a.hasOwnProperty(b)&&(this.m[this.m.length]=d(b),this.m[this.m.length]=a[b]);return this};f.prototype.add=function(a,b){if("string"===typeof b&&b&&(a||0===a))if(this.a[a])this.update(a,b);else{if(this.b)return++this.s>=this.j.length&&(this.s=0),this.j[this.s].postMessage(this.s,{add:!0,id:a,content:b}),this.a[a]=""+this.s,this;if(this.async)return this.h[a]||(this.c[this.c.length]=a),this.h[a]=[D.add,a,b],E(this),this;b=this.encode(b); | ||
if(!b.length)return this;for(var c=this.mode,e="function"===typeof c?c(b):"ngram"===c?x(b):b.split(J),d={_ctx:{}},g=this.threshold,k=this.depth,f=this.g,n=e.length,q=0;q<n;q++){var m=e[q];if(m){var r=m.length;switch(c){case "reverse":case "both":for(var t="",l=r-1;1<=l;l--)t=m[l]+t,w(f,d,t,a,b,g);case "forward":t="";for(l=0;l<r;l++)t+=m[l],w(f,d,t,a,b,g);break;case "full":for(l=0;l<r;l++)for(var A=r;A>l;A--)t=m.substring(l,A),w(f,d,t,a,b,g);break;default:if(l=w(f,d,m,a,b,g),k&&1<n&&l>g)for(l=f[10], | ||
r=d._ctx[m]||(d._ctx[m]={}),m=l[m]||(l[m]=[{},{},{},{},{},{},{},{},{},{}]),l=q-k,A=q+k,0>l&&(l=0),A>n-1&&(A=n-1);l<=A;l++)l!==q&&w(m,r,e[l],a,b,g)}}}this.a[a]="1";this.u=!1}return this};f.prototype.update=function(a,b){if("string"===typeof b&&(a||0===a)&&this.a[a]){if(this.b){var c=parseInt(this.a[a],10);this.j[c].postMessage(c,{update:!0,id:a,content:b});return this}if(this.async)return this.h[a]||(this.c[this.c.length]=a),this.h[a]=[D.update,a,b],E(this),this;this.remove(a);b&&this.add(a,b)}return this}; | ||
f.prototype.remove=function(a){if(this.a[a]){if(this.b){var b=parseInt(this.a[a],10);this.j[b].postMessage(b,{remove:!0,id:a});delete this.a[a];return this}if(this.async)return this.h[a]||(this.c[this.c.length]=a),this.h[a]=[D.remove,a],E(this),this;for(b=0;10>b;b++)for(var c=Object.keys(this.g[b]),d=0;d<c.length;d++){var h=c[d],g=this.g[b];if((g=g&&g[h])&&g.length)for(var k=0;k<g.length;k++)if(g[k]===a){g.splice(k,1);break}g.length||delete this.g[b][h]}delete this.a[a];this.u=!1}return this};f.prototype.search= | ||
function(a,b,c){var d=[];if(a&&"object"===typeof a){c=a.callback||b;b=a.limit;var h=a.threshold;a=a.query}h||(h=0);"function"===typeof b?(c=b,b=1E3):b||(b=1E3);if(this.b){this.w=c;this.o=0;this.i=[];for(d=0;d<this.b;d++)this.j[d].postMessage(d,{search:!0,limit:b,threshold:h,content:a});return null}if(c){var g=this;H(function(){c(g.search(a,b));g=null},1,"search-"+this.id);return null}if(!a||"string"!==typeof a)return d;var k=a;if(!this.u)this.cache&&(this.f="",this.l.reset()),this.u=!0;else if(this.cache){var f= | ||
this.l.get(a);if(f)return f}else if(this.f&&0===a.indexOf(this.f))return d;k=this.encode(k);if(!k.length)return d;f=this.mode;k="function"===typeof f?f(k):"ngram"===f?x(k):k.split(J);f=k.length;var n=!0,q=[],m={};if(1<f)if(this.depth){var r=!0,t=k[0];m[t]="1"}else k.sort(O);var l;if(!r||(l=this.g[10])[t])for(var A=r?1:0;A<f;A++){var p=k[A];if(p&&!m[p]){for(var v,w=!1,u=[],y=0,z=9;z>=h;z--)if(v=(r?l[t]:this.g)[z][p])u[y++]=v,w=!0;if(w)q[q.length]=1<y?q.concat.apply([],u):u[0];else{n=!1;break}m[p]= | ||
"1"}t=p}else n=!1;n&&(d=Q(q,b));d.length?this.f="":this.f||(this.f=a);this.cache&&this.l.set(a,d);return d};f.prototype.info=function(){if(this.b)for(var a=0;a<this.b;a++)this.j[a].postMessage(a,{info:!0,id:this.id});else{for(var b,c,d=0,f=0,g=0,k=0;10>k;k++)for(b=Object.keys(this.g[k]),a=0;a<b.length;a++)c=this.g[k][b[a]].length,d+=c+2*b[a].length+4,f+=c,g+=2*b[a].length;b=Object.keys(this.a);c=b.length;for(a=0;a<c;a++)d+=2*b[a].length+2;return{id:this.id,memory:d,items:c,sequences:f,chars:g,status:this.u, | ||
cache:this.c.length,matcher:z.length,worker:this.b}}};f.prototype.reset=function(){this.destroy();return this.init()};f.prototype.destroy=function(){this.cache&&this.l.reset();this.g=this.a=this.l=null;return this};var y={icase:function(a){return a.toLowerCase()},simple:function(){var a=[d("[\u00e0\u00e1\u00e2\u00e3\u00e4\u00e5]"),"a",d("[\u00e8\u00e9\u00ea\u00eb]"),"e",d("[\u00ec\u00ed\u00ee\u00ef]"),"i",d("[\u00f2\u00f3\u00f4\u00f5\u00f6\u0151]"),"o",d("[\u00f9\u00fa\u00fb\u00fc\u0171]"),"u",d("[\u00fd\u0177\u00ff]"), | ||
"y",d("\u00f1"),"n",d("\u00e7"),"c",d("\u00df"),"s",d(" & ")," and ",d("[-/]")," ",d("[^a-z0-9 ]"),"",d("\\s\\s+")," "];return function(b){b=v(b.toLowerCase(),a);return" "!==b?b:""}}(),advanced:function(){var a=[d("ae"),"a",d("ai"),"ei",d("ay"),"ei",d("ey"),"ei",d("oe"),"o",d("ue"),"u",d("ie"),"i",d("sz"),"s",d("zs"),"s",d("sh"),"s",d("ck"),"k",d("cc"),"k",d("dt"),"t",d("ph"),"f",d("pf"),"f",d("ou"),"o",d("uo"),"u"];return function(b,c){if(!b)return b;b=this.simple(b);2<b.length&&(b=v(b,a));c||1< | ||
b.length&&(b=F(b));return b}}(),extra:function(){var a=[d("p"),"b",d("z"),"s",d("[cgq]"),"k",d("n"),"m",d("d"),"t",d("[vw]"),"f",d("[aeiouy]"),""];return function(b){if(!b)return b;b=this.advanced(b,!0);if(1<b.length){b=b.split(" ");for(var c=0;c<b.length;c++){var d=b[c];1<d.length&&(b[c]=d[0]+v(d.substring(1),a))}b=b.join(" ");b=F(b)}return b}}(),balanced:function(){var a=[d("[-/]")," ",d("[^a-z0-9 ]"),"",d("\\s\\s+")," ",d("[aeiouy]"),""];return function(b){return F(v(b.toLowerCase(),a))}}()},H= | ||
function(){var a={};return function(b,c,d){var e=a[d];e&&clearTimeout(e);return a[d]=setTimeout(b,c)}}(),T=function(){function a(){this.cache={}}a.prototype.reset=function(){this.cache={}};a.prototype.set=function(a,c){this.cache[a]=c};a.prototype.get=function(a){return this.cache[a]};return a}();return f}(function(){var n={},C=!("undefined"===typeof Blob||"undefined"===typeof URL||!URL.createObjectURL);return function(f,p,d,v,w){var x=f;f=C?URL.createObjectURL(new Blob(["("+d.toString()+")()"],{type:"text/javascript"})): | ||
"../"+x+".js";x+="-"+p;n[x]||(n[x]=[]);n[x][w]=new Worker(f);n[x][w].onmessage=v;console.log("Register Worker: "+x+"@"+w);return{postMessage:function(d,f){n[x][d].postMessage(f)}}}}()),this); | ||
'use strict';(function(n,C,g){var p;(p=g.define)&&p.amd?p([],function(){return C}):(p=g.modules)?p[n.toLowerCase()]=C:"undefined"!==typeof module?module.exports=C:g[n]=C})("FlexSearch",function L(n){function g(a){"string"===typeof a?a=G[a]||v:a||(a=v);this.id=a.id||M++;this.init(a);p(this,"index",function(){return this.a});p(this,"length",function(){return Object.keys(this.a).length})}function p(a,b,c){Object.defineProperty(a,b,{get:c})}function d(a){return new RegExp(a,"g")}function w(a,b,c){if("undefined"=== | ||
typeof c){for(c=0;c<b.length;c+=2)a=a.replace(b[c],b[c+1]);return a}return a.replace(b,c)}function t(a,b,c,e,f,k){if("undefined"===typeof b[c]){var h=f.indexOf(c);h=3/f.length*(f.length-h)+6/(h-f.lastIndexOf(" ",h))+.5|0;b[c]=h;h>=k&&(a=a[h],a=a[c]||(a[c]=[]),a[a.length]=e)}return h||b[c]}function x(a){var b=[];if(!a)return b;for(var c=0,e=0,f=0,k="",h=a.length,B=0;B<h;B++){var d=a[B];"a"===d||"e"===d||"i"===d||"o"===d||"u"===d||"y"===d?c++:e++;" "!==d&&(k+=d);if(" "===d||1<c&&1<e||2<c||2<e||B=== | ||
h-1)k&&(b[f]&&2<k.length&&f++,b[f]=b[f]?b[f]+k:k," "===d&&f++,k=""),e=c=0}return b}function F(a){for(var b="",c="",e="",f=0;f<a.length;f++){var k=a[f];if(k!==c)if(f&&"h"===k){if(e="a"===e||"e"===e||"i"===e||"o"===e||"u"===e||"y"===e,("a"===c||"e"===c||"i"===c||"o"===c||"u"===c||"y"===c)&&e||" "===c)b+=k}else b+=k;e=f===a.length-1?"":a[f+1];c=k}return b}function N(a,b){var c={};if(H)for(var e=0;e<a.length;e++){var f=b?b.call(y,a[e]):a[e];c[f]=String.fromCharCode(65E3-a.length+e)}return c}function O(a, | ||
b){var c=[];if(a){var e=0,f;for(f in a)if(a.hasOwnProperty(f)){var k=b?b.call(y,f):f;c[e++]=d("(?=.{"+(k.length+3)+",})"+k+"$");c[e++]=b?b.call(y,a[f]):a[f]}}return c}function P(a,b){a=a.length-b.length;return 0>a?1:0<a?-1:0}function Q(a,b){a=a.length-b.length;return 0>a?-1:0<a?1:0}function R(a,b){var c=[],e=a.length;if(1<e){a.sort(Q);for(var f={},k=a[0],d=k.length,B=0;B<d;)f[k[B++]]=1;for(var g,q=0,m=1;m<e;){var r=!1;k=a[m];d=k.length;for(B=0;B<d;)if(f[g=k[B++]]===m){if(m===e-1&&(c[q++]=g,b&&q=== | ||
b)){r=!1;break}r=!0;f[g]=m+1}if(!r)break;m++}}else e&&(c=a[0],b&&c&&c.length>b&&(c=c.slice(0,b)));return c}function E(a){a.B||(a.B=I(function(){a.B=null;var b=a.async;b&&(a.async=!1);if(a.c.length){for(var c=J(),e;(e=a.c.shift())||0===e;){var f=a.h[e];switch(f[0]){case D.add:a.add(f[1],f[2]);break;case D.update:a.update(f[1],f[2]);break;case D.remove:a.remove(f[1])}a.h[e]=null;delete a.h[e];if(100<J()-c)break}a.c.length&&E(a)}b&&(a.async=b)},1,"search-async-"+a.id))}function J(){return"undefined"!== | ||
typeof performance?performance.now():(new Date).getTime()}function S(a,b,c,e){a=n("flexsearch","id"+a,function(){var a,b;self.a=function(c){if(c=c.data)c.search?self.postMessage({result:b.search(c.content,c.threshold?{limit:c.limit,threshold:c.threshold}:c.limit),id:a,content:c.content,limit:c.limit}):c.add?b.add(c.id,c.content):c.update?b.update(c.id,c.content):c.remove?b.remove(c.id):c.reset?b.reset():c.info?(c=b.info(),c.worker=a,b.C&&console.log(c)):c.register&&(a=c.id,c.options.cache=!1,c.options.async= | ||
!0,c.options.worker=!1,b=(new Function(c.register.substring(c.register.indexOf("{")+1,c.register.lastIndexOf("}"))))(),b=new b(c.options))}},function(a){(a=a.data)&&a.result?e(a.id,a.content,a.result,a.limit):c.debug&&console.log(a)},b);var f=L.toString();c.id=b;a.postMessage(b,{register:f,options:c,id:b});return a}var v={encode:"icase",mode:"forward",cache:!1,async:!1,b:!1,threshold:0,depth:0},G={memory:{encode:"extra",mode:"strict",threshold:7},speed:{encode:"icase",mode:"strict",threshold:7,depth:2}, | ||
match:{encode:"extra",mode:"full"},score:{encode:"extra",mode:"strict",threshold:5,depth:4},balance:{encode:"balance",mode:"ngram",threshold:6,depth:3},fastest:{encode:"icase",threshold:9,depth:1}},z=[],M=0,D={add:0,update:1,remove:2},K=d("[ -/]"),T="a about above after again against all also am an and any are aren't as at be because been before being below both but by can cannot can't come could couldn't did didn't do does doesn't doing dont down during each even few first for from further get go had hadn't has hasn't have haven't having he hed her here here's hers herself hes him himself his how how's i id if ill im in into is isn't it it's itself i've just know let's like make me more most mustn't my myself new no nor not now of off on once only or other ought our our's ourselves out over own same say see shan't she she'd shell shes should shouldn't so some such than that that's the their theirs them themselves then there there's these they they'd they'll they're they've this those through time to too until up us very want was wasn't way we wed well were weren't we've what what's when when's where where's which while who whom who's why why's will with won't would wouldn't you you'd you'll your you're your's yourself yourselves you've".split(" "), | ||
H={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log",icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:"",al:"",ance:"",ence:"",er:"",ic:"",able:"",ible:"",ant:"",ement:"",ment:"",ent:"",ou:"",ism:"",ate:"",iti:"",ous:"",ive:"",ize:""};g.new=function(a){return new this(a)};g.create=function(a){return g.new(a)}; | ||
g.addMatcher=function(a){for(var b in a)a.hasOwnProperty(b)&&(z[z.length]=d(b),z[z.length]=a[b]);return this};g.register=function(a,b){y[a]=b;return this};g.encode=function(a,b){return y[a].call(y,b)};g.prototype.init=function(a){this.m=[];if(a){var b;if(b=a.worker)if("undefined"===typeof Worker)a.worker=!1,a.async=!0,this.j=null;else{var c=this;b=parseInt(b,10)||4;c.s=-1;c.o=0;c.i=[];c.w=null;c.j=Array(b);for(var e=0;e<b;e++)c.j[e]=S(c.id,e,a||v,function(a,b,e,f){c.o!==c.b&&(c.i=c.i.concat(e),c.o++, | ||
f&&c.i.length>=f&&(c.o=c.b),c.w&&c.o===c.b&&(c.i.length?c.f="":c.f||(c.f=b),c.cache&&c.l.set(b,c.i),c.w(c.i),c.i=[]))})}if(b=a.profile)if(b=G[b])for(var f in b)b.hasOwnProperty(f)&&"undefined"===typeof a[f]&&(a[f]=b[f]);this.mode=a.mode||this.mode||v.mode;this.cache=a.cache||this.cache||v.cache;this.async=a.async||this.async||v.async;this.b=a.worker||this.b||v.b;this.threshold=a.threshold||this.threshold||v.threshold;this.depth=a.depth||this.depth||v.depth;this.v=(b=a.encode)&&y[b]||("function"=== | ||
typeof b?b:this.v||!1);this.C=a.debug||this.C;(b=a.matcher)&&this.addMatcher(b);if(b=a.filter)this.A=N(!0===b?T:b,this.v);if(b=a.stemmer)this.D=O(!0===b?H:b,this.v)}this.g=[{},{},{},{},{},{},{},{},{},{},{}];this.a={};this.h={};this.c=[];this.B=null;this.f="";this.u=!0;this.l=this.cache?new U(3E4,50,!0):!1;return this};g.prototype.encode=function(a){a&&z.length&&(a=w(a,z));a&&this.m.length&&(a=w(a,this.m));a&&this.v&&(a=this.v.call(y,a));if(a&&this.A){a=a.split(" ");for(var b=0;b<a.length;b++){var c= | ||
a[b];this.A[c]&&(a[b]=this.A[c])}a=a.join(" ")}a&&this.D&&(a=w(a,this.D));return a};g.prototype.addMatcher=function(a){for(var b in a)a.hasOwnProperty(b)&&(this.m[this.m.length]=d(b),this.m[this.m.length]=a[b]);return this};g.prototype.add=function(a,b){if("string"===typeof b&&b&&(a||0===a))if(this.a[a])this.update(a,b);else{if(this.b)return++this.s>=this.j.length&&(this.s=0),this.j[this.s].postMessage(this.s,{add:!0,id:a,content:b}),this.a[a]=""+this.s,this;if(this.async)return this.h[a]||(this.c[this.c.length]= | ||
a),this.h[a]=[D.add,a,b],E(this),this;b=this.encode(b);if(!b.length)return this;for(var c=this.mode,e="function"===typeof c?c(b):"ngram"===c?x(b):b.split(K),f={_ctx:{}},d=this.threshold,h=this.depth,g=this.g,n=e.length,q=0;q<n;q++){var m=e[q];if(m){var r=m.length;switch(c){case "reverse":case "both":for(var u="",l=r-1;1<=l;l--)u=m[l]+u,t(g,f,u,a,b,d);case "forward":u="";for(l=0;l<r;l++)u+=m[l],t(g,f,u,a,b,d);break;case "full":for(l=0;l<r;l++)for(var A=r;A>l;A--)u=m.substring(l,A),t(g,f,u,a,b,d);break; | ||
default:if(l=t(g,f,m,a,b,d),h&&1<n&&l>=d)for(l=g[10],r=f._ctx[m]||(f._ctx[m]={}),m=l[m]||(l[m]=[{},{},{},{},{},{},{},{},{},{}]),l=q-h,A=q+h,0>l&&(l=0),A>n-1&&(A=n-1);l<=A;l++)l!==q&&t(m,r,e[l],a,b,d)}}}this.a[a]="1";this.u=!1}return this};g.prototype.update=function(a,b){if("string"===typeof b&&(a||0===a)&&this.a[a]){if(this.b){var c=parseInt(this.a[a],10);this.j[c].postMessage(c,{update:!0,id:a,content:b});return this}if(this.async)return this.h[a]||(this.c[this.c.length]=a),this.h[a]=[D.update, | ||
a,b],E(this),this;this.remove(a);b&&this.add(a,b)}return this};g.prototype.remove=function(a){if(this.a[a]){if(this.b){var b=parseInt(this.a[a],10);this.j[b].postMessage(b,{remove:!0,id:a});delete this.a[a];return this}if(this.async)return this.h[a]||(this.c[this.c.length]=a),this.h[a]=[D.remove,a],E(this),this;for(b=0;10>b;b++)for(var c=Object.keys(this.g[b]),e=0;e<c.length;e++){var d=c[e],k=this.g[b];if((k=k&&k[d])&&k.length)for(var h=0;h<k.length;h++)if(k[h]===a){k.splice(h,1);break}k.length|| | ||
delete this.g[b][d]}delete this.a[a];this.u=!1}return this};g.prototype.search=function(a,b,c){var e=[];if(a&&"object"===typeof a){c=a.callback||b;b=a.limit;var d=a.threshold;a=a.query}d||(d=0);"function"===typeof b?(c=b,b=1E3):b||(b=1E3);if(this.b){this.w=c;this.o=0;this.i=[];for(e=0;e<this.b;e++)this.j[e].postMessage(e,{search:!0,limit:b,threshold:d,content:a});return null}if(c){var k=this;I(function(){c(k.search(a,b));k=null},1,"search-"+this.id);return null}if(!a||"string"!==typeof a)return e; | ||
var h=a;if(!this.u)this.cache&&(this.f="",this.l.reset()),this.u=!0;else if(this.cache){var g=this.l.get(a);if(g)return g}else if(this.f&&0===a.indexOf(this.f))return e;h=this.encode(h);if(!h.length)return e;g=this.mode;h="function"===typeof g?g(h):"ngram"===g?x(h):h.split(K);g=h.length;var n=!0,q=[],m={};if(1<g)if(this.depth){var r=!0,u=h[0];m[u]="1"}else h.sort(P);var l;if(!r||(l=this.g[10])[u])for(var A=r?1:0;A<g;A++){var p=h[A];if(p&&!m[p]){for(var v,w=!1,t=[],y=0,z=9;z>=d;z--)if(v=(r?l[u]:this.g)[z][p])t[y++]= | ||
v,w=!0;if(w)q[q.length]=1<y?q.concat.apply([],t):t[0];else{n=!1;break}m[p]="1"}u=p}else n=!1;n&&(e=R(q,b));e.length?this.f="":this.f||(this.f=a);this.cache&&this.l.set(a,e);return e};g.prototype.info=function(){if(this.b)for(var a=0;a<this.b;a++)this.j[a].postMessage(a,{info:!0,id:this.id});else{for(var b,c,d=0,f=0,g=0,h=0;10>h;h++)for(b=Object.keys(this.g[h]),a=0;a<b.length;a++)c=this.g[h][b[a]].length,d+=c+2*b[a].length+4,f+=c,g+=2*b[a].length;b=Object.keys(this.a);c=b.length;for(a=0;a<c;a++)d+= | ||
2*b[a].length+2;return{id:this.id,memory:d,items:c,sequences:f,chars:g,status:this.u,cache:this.c.length,matcher:z.length,worker:this.b}}};g.prototype.reset=function(){this.destroy();return this.init()};g.prototype.destroy=function(){this.cache&&this.l.reset();this.g=this.a=this.l=null;return this};var y={icase:function(a){return a.toLowerCase()},simple:function(){var a=[d("[\u00e0\u00e1\u00e2\u00e3\u00e4\u00e5]"),"a",d("[\u00e8\u00e9\u00ea\u00eb]"),"e",d("[\u00ec\u00ed\u00ee\u00ef]"),"i",d("[\u00f2\u00f3\u00f4\u00f5\u00f6\u0151]"), | ||
"o",d("[\u00f9\u00fa\u00fb\u00fc\u0171]"),"u",d("[\u00fd\u0177\u00ff]"),"y",d("\u00f1"),"n",d("\u00e7"),"c",d("\u00df"),"s",d(" & ")," and ",d("[-/]")," ",d("[^a-z0-9 ]"),"",d("\\s\\s+")," "];return function(b){b=w(b.toLowerCase(),a);return" "!==b?b:""}}(),advanced:function(){var a=[d("ae"),"a",d("ai"),"ei",d("ay"),"ei",d("ey"),"ei",d("oe"),"o",d("ue"),"u",d("ie"),"i",d("sz"),"s",d("zs"),"s",d("sh"),"s",d("ck"),"k",d("cc"),"k",d("dt"),"t",d("ph"),"f",d("pf"),"f",d("ou"),"o",d("uo"),"u"];return function(b, | ||
c){if(!b)return b;b=this.simple(b);2<b.length&&(b=w(b,a));c||1<b.length&&(b=F(b));return b}}(),extra:function(){var a=[d("p"),"b",d("z"),"s",d("[cgq]"),"k",d("n"),"m",d("d"),"t",d("[vw]"),"f",d("[aeiouy]"),""];return function(b){if(!b)return b;b=this.advanced(b,!0);if(1<b.length){b=b.split(" ");for(var c=0;c<b.length;c++){var d=b[c];1<d.length&&(b[c]=d[0]+w(d.substring(1),a))}b=b.join(" ");b=F(b)}return b}}(),balance:function(){var a=[d("[-/]")," ",d("[^a-z0-9 ]"),"",d("\\s\\s+")," ",d("[aeiouy]"), | ||
""];return function(b){return F(w(b.toLowerCase(),a))}}()},I=function(){var a={};return function(b,c,d){var e=a[d];e&&clearTimeout(e);return a[d]=setTimeout(b,c)}}(),U=function(){function a(){this.cache={}}a.prototype.reset=function(){this.cache={}};a.prototype.set=function(a,c){this.cache[a]=c};a.prototype.get=function(a){return this.cache[a]};return a}();return g}(function(){var n={},C=!("undefined"===typeof Blob||"undefined"===typeof URL||!URL.createObjectURL);return function(g,p,d,w,t){var x= | ||
g;g=C?URL.createObjectURL(new Blob(["var SUPPORT_WORKER = true;var SUPPORT_BUILTINS = true;var SUPPORT_DEBUG = true;var SUPPORT_CACHE = true;var SUPPORT_ASYNC = true;("+d.toString()+")()"],{type:"text/javascript"})):"../"+x+".js";x+="-"+p;n[x]||(n[x]=[]);n[x][t]=new Worker(g);n[x][t].onmessage=w;console.log("Register Worker: "+x+"@"+t);return{postMessage:function(d,g){n[x][d].postMessage(g)}}}}()),this); |
{ | ||
"name": "flexsearch", | ||
"version": "0.2.31", | ||
"version": "0.2.32", | ||
"description": "World's fastest and most memory efficient full text search library.", | ||
@@ -5,0 +5,0 @@ "keywords": [], |
@@ -19,10 +19,9 @@ <p align="center"> | ||
It also has the __most memory-efficient index__. Keep in mind that updating / removing existing items from the index has a significant cost. When your index needs to be updated continuously then <a href="bulksearch/" target="_blank">BulkSearch</a> may be a better choice. | ||
FlexSearch also provides you a non-blocking asynchronous processing model as well as web workers to perform any updates on the index as well as queries through dedicated threads. | ||
FlexSearch also provides you a non-blocking asynchronous processing model as well as web workers to perform any updates or queries on the index in parallel through dedicated balanced threads. | ||
<a href="#installation">Installation Guide</a>  •  <a href="#api">API Reference</a>  •  <a href="#examples">Example Options</a>  •  <a href="#builds">Custom Builds</a> | ||
<a href="#installation">Installation Guide</a>  •  <a href="#api">API Reference</a>  •  <a href="#profiles">Example Options</a>  •  <a href="#builds">Custom Builds</a> | ||
Comparison: | ||
- <a href="https://jsperf.com/compare-search-libraries" target="_blank">Library Benchmarks</a> | ||
- <a href="https://jsperf.com/flexsearch" target="_blank">BulkSearch vs. FlexSearch Benchmark</a> | ||
- <a href="https://rawgit.com/nextapps-de/flexsearch/master/test/matching.html" target="_blank">Relevance Scoring</a> | ||
- <a href="https://rawgit.com/nextapps-de/flexsearch/master/test/matching.html" target="_blank">Library Relevance Scoring</a> | ||
@@ -46,3 +45,3 @@ Supported Platforms: | ||
<li>Relevance-based Scoring</li> | ||
<li><a href="contextual">Contextual Indexes</a></li> | ||
<li><a href="#contextual">Contextual Indexes</a></li> | ||
<li>Limit Results</li> | ||
@@ -54,3 +53,3 @@ <li>Supports Caching</li> | ||
This features are not available in the 50% smaller <a href="flexsearch.light.js">light version</a>: | ||
These features are not available in the 50% smaller <a href="flexsearch.light.js">light version</a>: | ||
@@ -222,2 +221,8 @@ - WebWorker | ||
##### Create a new index and choosing one of the built-in profiles | ||
```js | ||
var index = new FlexSearch("speed"); | ||
``` | ||
##### Create a new index with custom options | ||
@@ -230,2 +235,3 @@ | ||
profile: "balance", | ||
encode: "icase", | ||
@@ -238,3 +244,4 @@ mode: "ngram", | ||
__Read more:__ <a href="#phonetic">Phonetic Search</a>, <a href="#compare">Phonetic Comparison</a>, <a href="#memory">Improve Memory Usage</a> | ||
<a href="#options">Read more about custom options</a> | ||
<a name="index.add"></a> | ||
@@ -497,3 +504,3 @@ #### Add items to an index | ||
FlexSearch ist highly customizable. Make use of the the right options can really improve your results as well as memory economy or query time. | ||
FlexSearch ist highly customizable. Make use of the the <a href="#profiles">right options</a> can really improve your results as well as memory economy or query time. | ||
@@ -508,4 +515,19 @@ <table> | ||
<tr> | ||
<td align="top">mode<br><br><br><br><br></td> | ||
<td align="top">profile<br><br><br><br><br><br></td> | ||
<td vertical="top" vertical-align="top"> | ||
"memory"<br> | ||
"speed"<br> | ||
"match"<br> | ||
"score"<br> | ||
"balance"<br> | ||
"fastest" | ||
</td> | ||
<td vertical-align="top"> | ||
The <a href="#profiles">configuration profile</a>.<br> | ||
</td> | ||
</tr> | ||
<tr></tr> | ||
<tr> | ||
<td align="top">mode<br><br><br><br><br><br></td> | ||
<td vertical="top" vertical-align="top"> | ||
"strict"<br> | ||
@@ -883,7 +905,8 @@ "foward"<br> | ||
<a name="examples"></a> | ||
## Example Options | ||
<a name="profiles"></a> | ||
## Built-in Profiles | ||
Memory-optimized: | ||
You can pass a built-in profile during creation/initialization. They have these following settings: | ||
Memory-optimized profile: __"memory"__ | ||
```js | ||
@@ -893,7 +916,7 @@ { | ||
mode: "strict", | ||
threshold: 5 | ||
threshold: 7 | ||
} | ||
``` | ||
Speed-optimized: | ||
Speed-optimized profile: __"speed"__ | ||
@@ -904,3 +927,3 @@ ```js | ||
mode: "strict", | ||
threshold: 5, | ||
threshold: 7, | ||
depth: 2 | ||
@@ -910,3 +933,3 @@ } | ||
Matching-tolerant: | ||
Matching-tolerant profile: __"match"__ | ||
@@ -920,3 +943,3 @@ ```js | ||
Well-balanced: | ||
Relevance-optimized profile: __"score"__ | ||
@@ -926,4 +949,15 @@ ```js | ||
encode: "extra", | ||
mode: "strict", | ||
threshold: 5, | ||
depth: 4 | ||
} | ||
``` | ||
Most-balanced profile: __"balanced"__ | ||
```js | ||
{ | ||
encode: "balanced", | ||
mode: "ngram", | ||
threshold: 4, | ||
threshold: 6, | ||
depth: 3 | ||
@@ -933,2 +967,16 @@ } | ||
Absolute fastest profile: __"fastest"__ | ||
```js | ||
{ | ||
encode: "icase", | ||
threshold: 9, | ||
depth: 1 | ||
} | ||
``` | ||
Compare these options above: | ||
- <a href="https://jsperf.com/compare-flexsearch-options" target="_blank">Benchmarks</a> | ||
- <a href="https://rawgit.com/nextapps-de/flexsearch/master/test/matching-flexsearch.html" target="_blank">Relevance Scoring</a> | ||
<a name="builds"></a> | ||
@@ -935,0 +983,0 @@ ## Custom Builds |
@@ -356,7 +356,8 @@ if(typeof module !== 'undefined'){ | ||
expect(flexsearch_reverse.search("yyy").length).to.equal(1); | ||
expect(flexsearch_reverse.search("zzz").length).to.equal(0); | ||
expect(flexsearch_reverse.search("zzz").length).to.equal(1); | ||
expect(flexsearch_reverse.search({query: "xxx", threshold: 2}).length).to.equal(1); | ||
expect(flexsearch_reverse.search({query: "xxx", threshold: 5}).length).to.equal(0); | ||
expect(flexsearch_reverse.search({query: "yyy", threshold: 2}).length).to.equal(0); | ||
expect(flexsearch_reverse.search({query: "zzz", threshold: 0}).length).to.equal(0); | ||
expect(flexsearch_reverse.search({query: "zzz", threshold: 1}).length).to.equal(0); | ||
expect(flexsearch_reverse.search({query: "zzz", threshold: 0}).length).to.equal(1); | ||
}); | ||
@@ -580,3 +581,3 @@ }); | ||
encode: false, | ||
encode: 'icase', | ||
mode: 'strict', | ||
@@ -599,7 +600,9 @@ async: true, | ||
flexsearch_worker.search("foo", function(result){ | ||
expect(result).to.have.length(0); | ||
}); | ||
setTimeout(function(){ | ||
expect(flexsearch_worker.length).to.equal(3); | ||
expect(flexsearch_worker.index).to.have.keys([0, 1, 2]); | ||
done(); | ||
@@ -649,3 +652,3 @@ | ||
expect(result).to.include(1); | ||
expect(result).to.have.members([1]); | ||
}); | ||
@@ -727,3 +730,3 @@ | ||
expect(results).to.include(2); | ||
expect(results).to.have.members([2]); | ||
}); | ||
@@ -735,3 +738,3 @@ | ||
}, 25); | ||
}, 50); | ||
}); | ||
@@ -738,0 +741,0 @@ }); |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
1319280
9
2768
1004