flexsearch
Advanced tools
Comparing version 0.2.461 to 0.2.481
/* | ||
FlexSearch v0.2.46 | ||
FlexSearch v0.2.48 | ||
Copyright 2018 Thomas Wilkerling | ||
@@ -7,25 +7,26 @@ Released under the Apache 2.0 Licence | ||
*/ | ||
'use strict';(function(q,B,g){var t;(t=g.define)&&t.amd?t([],function(){return B}):(t=g.modules)?t[q.toLowerCase()]=B:"undefined"!==typeof module?module.exports=B:g[q]=B})("FlexSearch",function M(q){function g(a){"string"===typeof a&&(a=F[a]);a||(a=x);this.id=a.id||N++;this.init(a);t(this,"index",function(){return this.a});t(this,"length",function(){return Object.keys(this.a).length})}function t(a,b,d){Object.defineProperty(a,b,{get:d})}function e(a){return new RegExp(a,"g")}function y(a,b,d){if("undefined"=== | ||
typeof d){for(d=0;d<b.length;d+=2)a=a.replace(b[d],b[d+1]);return a}return a.replace(b,d)}function u(a,b,d,c,f,m,k){if("undefined"===typeof b[d]){var h=f?(9-(k||6))*m+(k||6)*f:m;b[d]=h;h>=k&&(a=a[h+.5|0],a=a[d]||(a[d]=[]),a[a.length]=c)}return h||b[d]}function n(a,b){if(a)for(var d=Object.keys(a),c=0,f=d.length;c<f;c++){var m=d[c],k=a[m];if(k)for(var h=0,e=k.length;h<e;h++)if(k[h]===b){1===e?delete a[m]:k.splice(h,1);break}else"object"===typeof k[h]&&n(k[h],b)}}function G(a){var b=[];if(!a)return b; | ||
for(var d=0,c=0,f=0,m="",k=a.length,h=0;h<k;h++){var e=a[h];"a"===e||"e"===e||"i"===e||"o"===e||"u"===e||"y"===e?d++:c++;" "!==e&&(m+=e);if(" "===e||d>=(8<k?2:1)&&2<=c||2<=d&&c>=(8<k?2:1)||h===k-1)m&&(b[f]&&2<m.length&&f++,b[f]=b[f]?b[f]+m:m," "===e&&f++,m=""),c=d=0}return b}function D(a){for(var b="",d="",c="",f=0;f<a.length;f++){var m=a[f];if(m!==d)if(f&&"h"===m){if(c="a"===c||"e"===c||"i"===c||"o"===c||"u"===c||"y"===c,("a"===d||"e"===d||"i"===d||"o"===d||"u"===d||"y"===d)&&c||" "===d)b+=m}else b+= | ||
m;c=f===a.length-1?"":a[f+1];d=m}return b}function O(a,b){var d={};if(a)for(var c=0;c<a.length;c++){var f=b?b.call(z,a[c]):a[c];d[f]=String.fromCharCode(65E3-a.length+c)}return d}function P(a,b){var d=[];if(a){var c=0,f;for(f in a)if(a.hasOwnProperty(f)){var m=b?b.call(z,f):f;d[c++]=e("(?=.{"+(m.length+3)+",})"+m+"$");d[c++]=b?b.call(z,a[f]):a[f]}}return d}function Q(a,b){a=a.length-b.length;return 0>a?1:0<a?-1:0}function R(a,b){a=a.length-b.length;return 0>a?-1:0<a?1:0}function S(a,b){var d=[],c= | ||
a.length;if(1<c){a.sort(R);for(var f={},m=a[0],e=m.length,h=0;h<e;)f[m[h++]]=1;for(var g,r=0,p=1;p<c;){var n=!1;m=a[p];e=m.length;for(h=0;h<e;)if(f[g=m[h++]]===p){if(p===c-1&&(d[r++]=g,b&&r===b)){n=!1;break}n=!0;f[g]=p+1}if(!n)break;p++}}else if(c&&(d=a[0],b&&d.length>b))return d.slice(0,b);return d}function E(a){a.D||(a.D=H(function(){a.D=null;var b=a.async;b&&(a.async=!1);if(a.f.length){for(var d=I(),c;(c=a.f.shift())||0===c;){var f=a.h[c];switch(f[0]){case C.add:a.add(f[1],f[2]);break;case C.update:a.update(f[1], | ||
f[2]);break;case C.remove:a.remove(f[1])}a.h[c]=null;delete a.h[c];if(100<I()-d)break}a.f.length&&E(a)}b&&(a.async=b)},1,"search-async-"+a.id))}function I(){return"undefined"!==typeof performance?performance.now():(new Date).getTime()}function T(a,b,d,c){a=q("flexsearch","id"+a,function(){var a,b;self.a=function(c){if(c=c.data)if(c.search){var d=b.search(c.content,c.threshold?{limit:c.limit,threshold:c.threshold}:c.limit);self.postMessage({id:a,content:c.content,limit:c.limit,result:d})}else 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.G&&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?c(a.id,a.content,a.result,a.limit):d.debug&&console.log(a)},b);var f=M.toString();d.id=b;a.postMessage(b,{register:f,options:d, | ||
id:b});return a}var x={encode:"icase",mode:"ngram",cache:!1,async:!1,b:!1,threshold:0,depth:0},F={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",mode:"strict",threshold:9,depth:1}},A=[],N=0,C={add:0,update:1,remove:2},J=e("[ -/]"),K={},L={};g.new=function(a){return new this(a)}; | ||
g.create=function(a){return g.new(a)};g.registerMatcher=function(a){for(var b in a)a.hasOwnProperty(b)&&(A[A.length]=e(b),A[A.length]=a[b]);return this};g.registerEncoder=function(a,b){z[a]=b;return this};g.registerLanguage=function(a,b){K[a]=b.filter;L[a]=b.stemmer;return this};g.encode=function(a,b){return z[a].call(z,b)};g.prototype.init=function(a){this.C=[];a||(a=x);var b=a.profile,d=b?F[b]:{};if(b=a.worker)if("undefined"===typeof Worker)a.worker=!1,a.async=!0,this.i=null;else{var c=this;b=parseInt(b, | ||
10)||4;c.s=-1;c.m=0;c.g=[];c.w=null;c.i=Array(b);for(var f=0;f<b;f++)c.i[f]=T(c.id,f,a||x,function(a,b,d,f){c.m!==c.b&&(c.g=c.g.concat(d),c.m++,f&&c.g.length>=f&&(c.m=c.b),c.w&&c.m===c.b&&(c.g.length?c.c="":c.c||(c.c=b),c.cache&&c.j.set(b,c.g),c.w(c.g),c.g=[]))})}this.mode=a.mode||d.mode||this.mode||x.mode;this.async=a.async||this.async||x.async;this.b=a.worker||this.b||x.b;this.threshold=a.threshold||d.threshold||this.threshold||x.threshold;this.depth=a.depth||d.depth||this.depth||x.depth;this.v= | ||
(b=a.encode||d.encode)&&z[b]||("function"===typeof b?b:this.v||!1);this.G=a.debug||this.G;(b=a.matcher)&&this.addMatcher(b);if(b=a.filter)this.B=O(K[b]||b,this.v);if(b=a.stemmer)this.F=P(L[b]||b,this.v);this.l=[{},{},{},{},{},{},{},{},{},{}];this.o={};this.a={};this.h={};this.f=[];this.D=null;this.c="";this.u=!0;this.j=(this.cache=b=a.cache||this.cache||x.cache)?new U(b):!1;return this};g.prototype.encode=function(a){a&&A.length&&(a=y(a,A));a&&this.C.length&&(a=y(a,this.C));a&&this.v&&(a=this.v.call(z, | ||
a));if(a&&this.B){a=a.split(" ");for(var b=0;b<a.length;b++){var d=this.B[a[b]];d&&(a[b]=d)}a=a.join(" ")}a&&this.F&&(a=y(a,this.F));return a};g.prototype.addMatcher=function(a){var b=this.C,d;for(d in a)a.hasOwnProperty(d)&&(b[b.length]=e(d),b[b.length]=a[d]);return this};g.prototype.add=function(a,b,d){if("string"===typeof b&&b&&(a||0===a))if(this.a[a]&&!d)this.update(a,b);else{if(this.b)return++this.s>=this.i.length&&(this.s=0),this.i[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.f[this.f.length]=a),this.h[a]=[C.add,a,b],E(this),this;b=this.encode(b);if(!b.length)return this;d=this.mode;b="function"===typeof d?d(b):"ngram"===d?G(b):b.split(J);for(var c={_ctx:{}},f=this.threshold,e=this.depth,k=this.l,h=b.length,g=0;g<h;g++){var r=b[g];if(r){var p=r.length,n=(h-g)/h;switch(d){case "reverse":case "both":for(var v="",l=p-1;1<=l;l--)v=r[l]+v,u(k,c,v,a,(p-l)/p,n,f);case "forward":v="";for(l=0;l<p;l++)v+=r[l],u(k,c,v,a,1,n,f); | ||
break;case "full":for(l=0;l<p;l++)for(var q=(p-l)/p,w=p;w>l;w--)v=r.substring(l,w),u(k,c,v,a,q,n,f);break;default:if(l=u(k,c,r,a,1,n,f),e&&1<h&&l>=f)for(p=c._ctx[r]||(c._ctx[r]={}),r=this.o[r]||(this.o[r]=[{},{},{},{},{},{},{},{},{},{}]),l=g-e,w=g+e+1,0>l&&(l=0),w>h&&(w=h);l<w;l++)l!==g&&u(r,p,b[l],a,0,10-(l<g?g-l:l-g),f)}}}this.a[a]="1";this.u=!1}return this};g.prototype.update=function(a,b){this.a[a]&&b&&"string"===typeof b&&(this.remove(a),this.add(a,b,!0));return this};g.prototype.remove=function(a){if(this.a[a]){if(this.b){var b= | ||
parseInt(this.a[a],10);this.i[b].postMessage(b,{remove:!0,id:a});delete this.a[a];return this}if(this.async)return this.h[a]||(this.f[this.f.length]=a),this.h[a]=[C.remove,a],E(this),this;for(b=0;10>b;b++)n(this.l[b],a);this.depth&&n(this.o,a);delete this.a[a];this.u=!1}return this};g.prototype.search=function(a,b,d){var c=[];if(a&&"object"===typeof a){d=a.callback||b;b=a.limit;var f=a.threshold;a=a.query}f=(f||this.threshold||0)|0;"function"===typeof b?(d=b,b=1E3):b||(b=1E3);if(this.b){this.w=d; | ||
this.m=0;this.g=[];for(c=0;c<this.b;c++)this.i[c].postMessage(c,{search:!0,limit:b,threshold:f,content:a});return null}if(d){var e=this;H(function(){d(e.search(a,b));e=null},1,"search-"+this.id);return null}if(!a||"string"!==typeof a)return c;var k=a;if(!this.u)this.cache&&(this.c="",this.j.reset()),this.u=!0;else if(this.cache){var h=this.j.get(a);if(h)return h}else if(this.c&&0===a.indexOf(this.c))return c;k=this.encode(k);if(!k.length)return c;h=this.mode;k="function"===typeof h?h(k):"ngram"=== | ||
h?G(k):k.split(J);h=k.length;var g=!0,n=[],p={};if(1<h)if(this.depth){var q=!0,v=k[0];p[v]="1"}else k.sort(Q);var l;if(!q||(l=this.o)[v])for(var t=q?1:0;t<h;t++){var w=k[t];if(w&&!p[w]){for(var x,y=!1,u=[],z=0,A=9;A>=f;A--)if(x=(q?l[v]:this.l)[A][w])u[z++]=x,y=!0;if(y)n[n.length]=1<z?n.concat.apply([],u):u[0];else{g=!1;break}p[w]="1"}v=w}else g=!1;g&&(c=S(n,b));c.length?this.c="":this.c||(this.c=a);this.cache&&this.j.set(a,c);return c};g.prototype.info=function(){if(this.b)for(var a=0;a<this.b;a++)this.i[a].postMessage(a, | ||
{info:!0,id:this.id});else{for(var b,d,c=0,f=0,e=0,g=0;10>g;g++)for(b=Object.keys(this.l[g]),a=0;a<b.length;a++)d=this.l[g][b[a]].length,c+=d+2*b[a].length+4,f+=d,e+=2*b[a].length;b=Object.keys(this.a);d=b.length;for(a=0;a<d;a++)c+=2*b[a].length+2;return{id:this.id,memory:c,items:d,sequences:f,chars:e,status:this.u,cache:this.f.length,matcher:A.length,worker:this.b}}};g.prototype.reset=function(){this.destroy();return this.init()};g.prototype.destroy=function(){this.cache&&(this.j.reset(),this.j= | ||
null);this.B=this.F=this.l=this.o=this.a=this.h=this.f=null;return this};var z={icase:function(a){return a.toLowerCase()},simple:function(){var a=[e("[\u00e0\u00e1\u00e2\u00e3\u00e4\u00e5]"),"a",e("[\u00e8\u00e9\u00ea\u00eb]"),"e",e("[\u00ec\u00ed\u00ee\u00ef]"),"i",e("[\u00f2\u00f3\u00f4\u00f5\u00f6\u0151]"),"o",e("[\u00f9\u00fa\u00fb\u00fc\u0171]"),"u",e("[\u00fd\u0177\u00ff]"),"y",e("\u00f1"),"n",e("\u00e7"),"c",e("\u00df"),"s",e(" & ")," and ",e("[-/]")," ",e("[^a-z0-9 ]"),"",e("\\s\\s+")," "]; | ||
return function(b){b=y(b.toLowerCase(),a);return" "!==b?b:""}}(),advanced:function(){var a=[e("ae"),"a",e("ai"),"ei",e("ay"),"ei",e("ey"),"ei",e("oe"),"o",e("ue"),"u",e("ie"),"i",e("sz"),"s",e("zs"),"s",e("sh"),"s",e("ck"),"k",e("cc"),"k",e("dt"),"t",e("ph"),"f",e("pf"),"f",e("ou"),"o",e("uo"),"u"];return function(b,d){if(!b)return b;b=this.simple(b);2<b.length&&(b=y(b,a));d||1<b.length&&(b=D(b));return b}}(),extra:function(){var a=[e("p"),"b",e("z"),"s",e("[cgq]"),"k",e("n"),"m",e("d"),"t",e("[vw]"), | ||
"f",e("[aeiouy]"),""];return function(b){if(!b)return b;b=this.advanced(b,!0);if(1<b.length){b=b.split(" ");for(var d=0;d<b.length;d++){var c=b[d];1<c.length&&(b[d]=c[0]+y(c.substring(1),a))}b=b.join(" ");b=D(b)}return b}}(),balance:function(){var a=[e("[-/]")," ",e("[^a-z0-9 ]"),"",e("\\s\\s+")," "];return function(b){return D(y(b.toLowerCase(),a))}}()},H=function(){var a={};return function(b,d,c){var e=a[c];e&&clearTimeout(e);return a[c]=setTimeout(b,d)}}(),U=function(){function a(a){this.reset(); | ||
this.A=!0!==a&&a}a.prototype.reset=function(){this.cache={};this.count={};this.index={};this.keys=[]};a.prototype.set=function(a,d){if(this.A&&"undefined"===typeof this.cache[a]){var b=this.keys.length;if(b===this.A){b--;var e=this.keys[b];delete this.cache[e];delete this.count[e];delete this.index[e]}this.index[a]=b;this.keys[b]=a;this.count[a]=-1;this.cache[a]=d;this.get(a)}else this.cache[a]=d};a.prototype.get=function(a){var b=this.cache[a];if(this.A&&b){var c=++this.count[a],e=this.index,g=e[a]; | ||
if(0<g){for(var k=this.keys,h=g;this.count[k[--g]]<=c&&-1!==g;);g++;if(g!==h){for(c=h;c>g;c--)h=k[c-1],k[c]=h,e[h]=c;k[g]=a;e[a]=g}}}return b};return a}();return g}(function(){var q={},B=!("undefined"===typeof Blob||"undefined"===typeof URL||!URL.createObjectURL);return function(g,t,e,y,u){var n=g;g=B?URL.createObjectURL(new Blob(["var SUPPORT_WORKER = true;var SUPPORT_BUILTINS = true;var SUPPORT_DEBUG = true;var SUPPORT_CACHE = true;var SUPPORT_ASYNC = true;("+e.toString()+")()"],{type:"text/javascript"})): | ||
"../"+n+".js";n+="-"+t;q[n]||(q[n]=[]);q[n][u]=new Worker(g);q[n][u].onmessage=y;console.log("Register Worker: "+n+"@"+u);return{postMessage:function(e,g){q[n][e].postMessage(g)}}}}()),this); | ||
'use strict';(function(v,C,f){var w;(w=f.define)&&w.amd?w([],function(){return C}):(w=f.modules)?w[v.toLowerCase()]=C:"undefined"!==typeof module?module.exports=C:f[v]=C})("FlexSearch",function N(v){function f(a){"string"===typeof a&&(a=G[a]);a||(a=x);this.id=a.id||O++;this.init(a);w(this,"index",function(){return this.b});w(this,"length",function(){return Object.keys(this.b).length})}function w(a,b,e){Object.defineProperty(a,b,{get:e})}function d(a){return new RegExp(a,"g")}function y(a,b,e){if("undefined"=== | ||
typeof e){for(e=0;e<b.length;e+=2)a=a.replace(b[e],b[e+1]);return a}return a.replace(b,e)}function z(a,b,e,c,k,t,g){if("undefined"===typeof b[e]){var h=k?(9-(g||6))*t+(g||6)*k:t;b[e]=h;h>=g&&(a=a[h+.5|0],a=a[e]||(a[e]=[]),a[a.length]=c)}return h||b[e]}function q(a,b){if(a)for(var e=Object.keys(a),c=0,k=e.length;c<k;c++){var t=e[c],g=a[t];if(g)for(var h=0,d=g.length;h<d;h++)if(g[h]===b){1===d?delete a[t]:g.splice(h,1);break}else"object"===typeof g[h]&&q(g[h],b)}}function H(a){var b=[];if(!a)return b; | ||
for(var e=0,c=0,k=0,t="",g=a.length,h=0;h<g;h++){var d=a[h];"a"===d||"e"===d||"i"===d||"o"===d||"u"===d||"y"===d?e++:c++;" "!==d&&(t+=d);if(" "===d||e>=(8<g?2:1)&&2<=c||2<=e&&c>=(8<g?2:1)||h===g-1)t&&(b[k]&&2<t.length&&k++,b[k]=b[k]?b[k]+t:t," "===d&&k++,t=""),c=e=0}return b}function E(a){for(var b="",e="",c="",k=0;k<a.length;k++){var d=a[k];if(d!==e)if(k&&"h"===d){if(c="a"===c||"e"===c||"i"===c||"o"===c||"u"===c||"y"===c,("a"===e||"e"===e||"i"===e||"o"===e||"u"===e||"y"===e)&&c||" "===e)b+=d}else b+= | ||
d;c=k===a.length-1?"":a[k+1];e=d}return b}function P(a,b){var e={};if(a)for(var c=0;c<a.length;c++){var k=b?b.call(A,a[c]):a[c];e[k]=String.fromCharCode(65E3-a.length+c)}return e}function Q(a,b){var e=[];if(a){var c=0,k;for(k in a)if(a.hasOwnProperty(k)){var t=b?b.call(A,k):k;e[c++]=d("(?=.{"+(t.length+3)+",})"+t+"$");e[c++]=b?b.call(A,a[k]):a[k]}}return e}function R(a,b){a=a.length-b.length;return 0>a?1:0<a?-1:0}function S(a,b){a=a.length-b.length;return 0>a?-1:0<a?1:0}function T(a,b,e){var c=[], | ||
k=[],d=a.length;if(1<d){a.sort(S);for(var g={},h=a[0],f=h.length,m=0;m<f;)g[h[m++]]=1;for(var p,u=0,n=1;n<d;){var l=!1,q=n===d-1;k=[];h=a[n];f=h.length;for(m=-1;m<f;){var r=g[p=h[++m]];if(r===n){if(q&&(c[u++]=p,b&&u===b))return c;l=!0;g[p]=n+1}else e&&(r=k[r]||(k[r]=[]),r[r.length]=p)}if(!l&&!e)break;n++}if(e&&(b||(b=1E3),u=c.length,f=k.length,u<b&&f))for(n=f-1;0<=n;n--)if(p=k[n])for(m=0;m<p.length;m++)if(c[u++]=p[m],b&&u===b)return c}else d&&(c=a[0],b&&c.length>b&&(c=c.slice(0,b)));return c}function F(a){a.D|| | ||
(a.D=I(function(){a.D=null;var b=a.async;b&&(a.async=!1);if(a.f.length){for(var e=J(),c;(c=a.f.shift())||0===c;){var d=a.h[c];switch(d[0]){case D.add:a.add(d[1],d[2]);break;case D.remove:a.remove(d[1])}a.h[c]=null;delete a.h[c];if(100<J()-e)break}a.f.length&&F(a)}b&&(a.async=b)},1,"search-async-"+a.id))}function J(){return"undefined"!==typeof performance?performance.now():(new Date).getTime()}function U(a,b,e,c){a=v("flexsearch","id"+a,function(){var a,b;self.b=function(c){if(c=c.data)if(c.search){var e= | ||
b.search(c.content,c.threshold?{limit:c.limit,threshold:c.threshold}:c.limit);self.postMessage({id:a,content:c.content,limit:c.limit,result:e})}else 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.F&&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?c(a.id,a.content,a.result,a.limit):e.debug&&console.log(a)},b);var d=N.toString();e.id=b;a.postMessage(b,{register:d,options:e,id:b});return a}var x={encode:"icase",mode:"ngram",w:!1,cache:!1,async:!1,c:!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",mode:"strict",threshold:9,depth:1}},B=[],O=0,D={add:0,update:1,remove:2},K=d("[ -/]"),L={},M={};f.new=function(a){return new this(a)};f.create=function(a){return f.new(a)};f.registerMatcher=function(a){for(var b in a)a.hasOwnProperty(b)&&(B[B.length]=d(b),B[B.length]=a[b]);return this};f.registerEncoder=function(a,b){A[a]=b;return this};f.registerLanguage=function(a,b){L[a]=b.filter;M[a]=b.stemmer;return this};f.encode=function(a,b){return A[a].call(A,b)};f.prototype.init= | ||
function(a){this.C=[];a||(a=x);var b=a.profile,e=b?G[b]:{};if(b=a.worker)if("undefined"===typeof Worker)a.worker=!1,a.async=!0,this.i=null;else{var c=this;b=parseInt(b,10)||4;c.s=-1;c.m=0;c.g=[];c.A=null;c.i=Array(b);for(var d=0;d<b;d++)c.i[d]=U(c.id,d,a||x,function(a,b,e,d){c.m!==c.c&&(c.g=c.g.concat(e),c.m++,d&&c.g.length>=d&&(c.m=c.c),c.A&&c.m===c.c&&("undefined"!==typeof c.a&&(c.g.length?c.a="":c.a||(c.a=b)),c.cache&&c.j.set(b,c.g),c.A(c.g),c.g=[]))})}this.mode=a.mode||e.mode||this.mode||x.mode; | ||
this.async=a.async||this.async||x.async;this.c=a.worker||this.c||x.c;this.threshold=a.threshold||e.threshold||this.threshold||x.threshold;this.depth=a.depth||e.depth||this.depth||x.depth;this.w=a.suggest||this.w||x.w;this.v=(b=a.encode||e.encode)&&A[b]||("function"===typeof b?b:this.v||!1);this.F=a.debug||this.F;(b=a.matcher)&&this.addMatcher(b);if(b=a.filter)this.filter=P(L[b]||b,this.v);if(b=a.stemmer)this.stemmer=Q(M[b]||b,this.v);this.l=[{},{},{},{},{},{},{},{},{},{}];this.o={};this.b={};this.h= | ||
{};this.f=[];this.D=null;this.u=!0;if("forward"===this.mode||"reverse"===this.mode||"both"===this.mode)this.a="";this.j=(this.cache=b=a.cache||this.cache||x.cache)?new V(b):!1;return this};f.prototype.encode=function(a){a&&B.length&&(a=y(a,B));a&&this.C.length&&(a=y(a,this.C));a&&this.v&&(a=this.v.call(A,a));a&&this.stemmer&&(a=y(a,this.stemmer));return a};f.prototype.addMatcher=function(a){var b=this.C,e;for(e in a)a.hasOwnProperty(e)&&(b[b.length]=d(e),b[b.length]=a[e]);return this};f.prototype.add= | ||
function(a,b,e){if("string"===typeof b&&b&&(a||0===a))if(this.b[a]&&!e)this.update(a,b);else{if(this.c)return++this.s>=this.i.length&&(this.s=0),this.i[this.s].postMessage(this.s,{add:!0,id:a,content:b}),this.b[a]=""+this.s,this;if(this.async)return this.h[a]||(this.f[this.f.length]=a),this.h[a]=[D.add,a,b],F(this),this;b=this.encode(b);if(!b.length)return this;e=this.mode;b="function"===typeof e?e(b):"ngram"===e?H(b):b.split(K);for(var c={_ctx:{}},d=this.threshold,t=this.depth,g=this.l,h=b.length, | ||
f=0;f<h;f++){var m=b[f];if(m){var p=m.length,u=(h-f)/h;switch(e){case "reverse":case "both":for(var n="",l=p-1;1<=l;l--)n=m[l]+n,z(g,c,n,a,(p-l)/p,u,d);case "forward":n="";for(l=0;l<p;l++)n+=m[l],z(g,c,n,a,1,u,d);break;case "full":for(l=0;l<p;l++)for(var q=(p-l)/p,r=p;r>l;r--)n=m.substring(l,r),z(g,c,n,a,q,u,d);break;default:if(l=z(g,c,m,a,1,u,d),t&&1<h&&l>=d)for(p=c._ctx[m]||(c._ctx[m]={}),m=this.o[m]||(this.o[m]=[{},{},{},{},{},{},{},{},{},{}]),l=f-t,r=f+t+1,0>l&&(l=0),r>h&&(r=h);l<r;l++)l!==f&& | ||
z(m,p,b[l],a,0,10-(l<f?f-l:l-f),d)}}}this.b[a]="1";this.u=!1}return this};f.prototype.update=function(a,b){this.b[a]&&b&&"string"===typeof b&&(this.remove(a),this.add(a,b,!0));return this};f.prototype.remove=function(a){if(this.b[a]){if(this.c){var b=parseInt(this.b[a],10);this.i[b].postMessage(b,{remove:!0,id:a});delete this.b[a];return this}if(this.async)return this.h[a]||(this.f[this.f.length]=a),this.h[a]=[D.remove,a],F(this),this;for(b=0;10>b;b++)q(this.l[b],a);this.depth&&q(this.o,a);delete this.b[a]; | ||
this.u=!1}return this};f.prototype.search=function(a,b,e){var c=[];if(a&&"object"===typeof a){e=a.callback||b;b=a.limit;var d=a.threshold;a=a.query}d=(d||this.threshold||0)|0;"function"===typeof b?(e=b,b=1E3):b||(b=1E3);if(this.c){this.A=e;this.m=0;this.g=[];for(c=0;c<this.c;c++)this.i[c].postMessage(c,{search:!0,limit:b,threshold:d,content:a});return null}if(e){var f=this;I(function(){e(f.search(a,b));f=null},1,"search-"+this.id);return null}if(!a||"string"!==typeof a)return c;var g=a;if(!this.u)this.cache&& | ||
("undefined"!==typeof this.a&&(this.a=""),this.j.reset()),this.u=!0;else if(this.cache){var h=this.j.get(a);if(h)return h}else if("undefined"!==typeof this.a&&this.a&&0===a.indexOf(this.a))return c;g=this.encode(g);if(!g.length)return c;h=this.mode;g="function"===typeof h?h(g):"ngram"===h?H(g):g.split(K);h=g.length;var q=!0,m=[],p={};if(1<h)if(this.depth){var u=!0,n=g[0];p[n]="1"}else g.sort(R);var l;if(!u||(l=this.o)[n])for(var v=u?1:0;v<h;v++){var r=g[v];if(r&&!p[r]){for(var w,x=!1,y=[],z=0,A=9;A>= | ||
d;A--)if(w=(u?l[n]:this.l)[A][r])y[z++]=w,x=!0;if(x)m[m.length]=1<z?m.concat.apply([],y):y[0];else if(!this.w){q=!1;break}p[r]="1"}n=r}else q=!1;q&&(c=T(m,b,this.w));"undefined"!==typeof this.a&&(c.length?this.a="":this.a||(this.a=a));this.cache&&this.j.set(a,c);return c};f.prototype.info=function(){if(this.c)for(var a=0;a<this.c;a++)this.i[a].postMessage(a,{info:!0,id:this.id});else{for(var b,e,c=0,d=0,f=0,g=0;10>g;g++)for(b=Object.keys(this.l[g]),a=0;a<b.length;a++)e=this.l[g][b[a]].length,c+=e+ | ||
2*b[a].length+4,d+=e,f+=2*b[a].length;b=Object.keys(this.b);e=b.length;for(a=0;a<e;a++)c+=2*b[a].length+2;return{id:this.id,memory:c,items:e,sequences:d,chars:f,status:this.u,cache:this.f.length,matcher:B.length,worker:this.c}}};f.prototype.reset=function(){this.destroy();return this.init()};f.prototype.destroy=function(){this.cache&&(this.j.reset(),this.j=null);this.filter=this.stemmer=this.l=this.o=this.b=this.h=this.f=null;return this};var A={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=y(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,d){if(!b)return b;b=this.simple(b);2<b.length&&(b=y(b,a));d||1<b.length&&(b=E(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 d=0;d<b.length;d++){var c=b[d]; | ||
1<c.length&&(b[d]=c[0]+y(c.substring(1),a))}b=b.join(" ");b=E(b)}return b}}(),balance:function(){var a=[d("[-/]")," ",d("[^a-z0-9 ]"),"",d("\\s\\s+")," "];return function(b){return E(y(b.toLowerCase(),a))}}()},I=function(){var a={};return function(b,d,c){var e=a[c];e&&clearTimeout(e);return a[c]=setTimeout(b,d)}}(),V=function(){function a(a){this.reset();this.B=!0!==a&&a}a.prototype.reset=function(){this.cache={};this.count={};this.index={};this.keys=[]};a.prototype.set=function(a,d){if(this.B&&"undefined"=== | ||
typeof this.cache[a]){var b=this.keys.length;if(b===this.B){b--;var e=this.keys[b];delete this.cache[e];delete this.count[e];delete this.index[e]}this.index[a]=b;this.keys[b]=a;this.count[a]=-1;this.cache[a]=d;this.get(a)}else this.cache[a]=d};a.prototype.get=function(a){var b=this.cache[a];if(this.B&&b){var c=++this.count[a],d=this.index,f=d[a];if(0<f){for(var g=this.keys,h=f;this.count[g[--f]]<=c&&-1!==f;);f++;if(f!==h){for(c=h;c>f;c--)h=g[c-1],g[c]=h,d[h]=c;g[f]=a;d[a]=f}}}return b};return a}(); | ||
return f}(function(){var v={},C=!("undefined"===typeof Blob||"undefined"===typeof URL||!URL.createObjectURL);return function(f,w,d,y,z){var q=f;f=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"})):"../"+q+".js";q+="-"+w;v[q]||(v[q]=[]);v[q][z]=new Worker(f);v[q][z].onmessage=y;console.log("Register Worker: "+q+"@"+z);return{postMessage:function(d, | ||
f){v[q][d].postMessage(f)}}}}()),this); |
@@ -6,3 +6,3 @@ /** @define {boolean} */ | ||
root['FlexSearch'].registerLanguage('de', /** @const */ { | ||
root['FlexSearch']['registerLanguage']('de', /** @const */ { | ||
@@ -12,5 +12,6 @@ /** | ||
* @type {Array<string>} | ||
* @export | ||
*/ | ||
"filter": [ | ||
filter: [ | ||
@@ -150,5 +151,6 @@ "aber", | ||
* @type {Object<string, string>} | ||
* @export | ||
*/ | ||
"stemmer": { | ||
stemmer: { | ||
@@ -155,0 +157,0 @@ "niss": "", |
@@ -6,3 +6,3 @@ /** @define {boolean} */ | ||
root['FlexSearch'].registerLanguage('en', /** @const */ { | ||
root['FlexSearch']['registerLanguage']('en', /** @const */ { | ||
@@ -12,5 +12,6 @@ /** | ||
* @type {Array<string>} | ||
* @export | ||
*/ | ||
"filter": [ | ||
filter: [ | ||
@@ -226,5 +227,6 @@ "a", | ||
* @type {Object<string, string>} | ||
* @export | ||
*/ | ||
"stemmer": { | ||
stemmer: { | ||
@@ -231,0 +233,0 @@ "ational": "ate", |
{ | ||
"name": "flexsearch", | ||
"version": "0.2.461", | ||
"version": "0.2.481", | ||
"description": "Next-Generation full text search library with zero dependencies.", | ||
@@ -30,3 +30,4 @@ "homepage": "https://nextapps-de.github.io/xone/", | ||
"build-custom": "node compile", | ||
"build-all": "npm run build && npm run build-light", | ||
"build-lang": "node compile RELEASE=lang && exit 0", | ||
"build-all": "npm run build && npm run build-light && npm run build-lang", | ||
"test-production": "nyc --reporter=html --reporter=text mocha --timeout=3000 test --exit", | ||
@@ -44,3 +45,6 @@ "test-light": "nyc --reporter=html --reporter=text mocha --timeout=3000 test/ --exit", | ||
"lang/", | ||
"test/" | ||
"test/", | ||
"compile.js", | ||
"README.md", | ||
"LICENSE" | ||
], | ||
@@ -47,0 +51,0 @@ "dependencies": {}, |
@@ -10,4 +10,3 @@ <p align="center"></p> | ||
<a target="_blank" href="https://coveralls.io/github/nextapps-de/flexsearch?branch=master"><img src="https://coveralls.io/repos/github/nextapps-de/flexsearch/badge.svg?branch=master"></a> | ||
<a target="_blank" href="https://github.com/nextapps-de/flexsearch/issues"><img src="https://img.shields.io/github/issues/nextapps-de/xone.svg"></a> | ||
<img src="https://badges.greenkeeper.io/nextapps-de/flexsearch.svg"> | ||
<a target="_blank" href="https://github.com/nextapps-de/flexsearch/issues"><img src="https://img.shields.io/github/issues/nextapps-de/xone.svg"></a><!--<img src="https://badges.greenkeeper.io/nextapps-de/flexsearch.svg">--> | ||
<a target="_blank" href="https://github.com/nextapps-de/flexsearch/blob/master/LICENSE.md"><img src="https://img.shields.io/npm/l/xone.svg"></a> | ||
@@ -17,7 +16,5 @@ </p> | ||
<h3>World's fastest and most memory efficient full text search library with zero dependencies.</h3> | ||
When it comes to raw search speed <a href="https://jsperf.com/compare-search-libraries" target="_blank">FlexSearch outperforms every single searching library out there</a> and also provides flexible search capabilities like multi-word matching, phonetic transformations or partial matching. | ||
It also has the <a href="#memory">most memory-efficient index</a>. | ||
<!-- | ||
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. | ||
--> | ||
It also has the <a href="#memory">most memory-efficient index</a>. Keep in mind that updating and/or 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 or queries on the index in parallel through dedicated balanced threads. | ||
@@ -92,3 +89,2 @@ | ||
<!-- | ||
#### Compare BulkSearch vs. FlexSearch | ||
@@ -116,8 +112,20 @@ | ||
<tr> | ||
<td>Usecase</td> | ||
<td><ul><li>Limited content</li><li>Use when existing items of the index needs to be updated continously (update, remove)</li><li>Supports pagination</li></ul></td> | ||
<td><ul><li>Fastest possible search</li><li>Use when existing items of the index does not need to be updated continously (update, remove)</li><li>Max out memory capabilities</li><li>Enhanced relevance scoring</li></ul></td> | ||
<td>Index Type</td> | ||
<td>Bulk of encoded string data divided into chunks</td> | ||
<td><ol><li>Lexical pre-scored dictionary</li><li>Contextual-based map</li></ol></td> | ||
</tr> | ||
<tr></tr> | ||
<tr> | ||
<td>Strength</td> | ||
<td><ul><li>fast adds / fast updates / fast removals</li></ul></td> | ||
<td><ul><li>fast queries</li><li>memory-efficient index</li></ul></td> | ||
</tr> | ||
<tr></tr> | ||
<tr> | ||
<td>Weaks</td> | ||
<td><ul><li>less powerful contextual search</li><li>less memory efficient (has to be defragmented from time to time)</li></ul></td> | ||
<td><ul><li>updating / deleting extisting items from index is slow</li><li>adding items to the index optimized for super partial matching (mode: "full") is slow</li></ul></td> | ||
</tr> | ||
<tr></tr> | ||
<tr> | ||
<td>Pagination</td> | ||
@@ -127,19 +135,20 @@ <td>Yes</td> | ||
</tr> | ||
<!-- | ||
<tr></tr> | ||
<tr> | ||
<td>Ranked Searching</td> | ||
<td>Query Wildcards</td> | ||
<td>Yes</td> | ||
<td>No</td> | ||
<td>Yes</td> | ||
</tr> | ||
<tr></tr> | ||
<tr> | ||
<td>Contextual Index</td> | ||
<td>No</td> | ||
<td>Ranked Searching</td> | ||
<td>Yes</td> | ||
<td>Yes</td> | ||
</tr> | ||
<tr></tr> | ||
<tr> | ||
<td>WebWorker</td> | ||
<td>No</td> | ||
<td>Contextual Search</td> | ||
<td>Yes</td> | ||
<td>Yes</td> | ||
</tr> | ||
@@ -150,12 +159,18 @@ <tr></tr> | ||
<td>Yes</td> | ||
<td>No</td> | ||
<td>Yes</td> | ||
</tr> | ||
<tr></tr> | ||
<tr> | ||
<td>Wildcards (Query)</td> | ||
<td>Auto-balanced Cache</td> | ||
<td>Yes</td> | ||
<td>No</td> | ||
<td>Yes</td> | ||
</tr> | ||
<tr></tr> | ||
<tr> | ||
<td>WebWorker</td> | ||
<td>Yes</td> | ||
<td>Yes</td> | ||
</tr> | ||
--> | ||
</table> | ||
--> | ||
@@ -210,4 +225,5 @@ <a name="installation"></a> | ||
- <a href="#flexsearch.create">FlexSearch.__create__(\<options\>)</a> | ||
- <a href="#flexsearch.registerMatcher">FlexSearch.__registerMatcher__({_KEY: VALUE_})</a> | ||
- <a href="#flexsearch.registerEncoder">FlexSearch.__registerEncoder__(name, encoder)</a> | ||
- <a href="#flexsearch.addmatcher">FlexSearch.__registerMatcher__({_KEY: VALUE_})</a> | ||
- <a href="#flexsearch.register">FlexSearch.__registerEncoder__(name, encoder)</a> | ||
- <a href="#flexsearch.language">FlexSearch.__registerLanguage__(lang, {stemmer:{}, filter:[]})</a> | ||
- <a href="#flexsearch.encode">FlexSearch.__encode__(name, string)</a> | ||
@@ -218,2 +234,3 @@ | ||
- <a href="#index.search">Index.__search__(string, \<limit\>, \<callback\>)</a> | ||
- <a href="#index.search">Index.__search__(\<options\>)</a> | ||
- <a href="#index.update">Index.__update__(id, string)</a> | ||
@@ -307,12 +324,28 @@ - <a href="#index.remove">Index.__remove__(id)</a> | ||
threshold: 5, // >= initial threshold | ||
depth: 3 // <= initial depth | ||
depth: 3, // <= initial depth | ||
callback: function(results){/* ... */} | ||
}); | ||
``` | ||
Get suggestions of a query: | ||
The same from above could also be written as: | ||
```js | ||
index.search("John", { | ||
limit: 1000, | ||
threshold: 5, | ||
depth: 3 | ||
}, function(results){ | ||
// .... | ||
}); | ||
``` | ||
Get also suggestions for a query: | ||
```js | ||
index.search({ | ||
query: "John", | ||
query: "John Doe", | ||
suggest: true | ||
@@ -322,2 +355,4 @@ }); | ||
When suggestion is enabled all results will be filled up (until limit, default 1000) with similar matches ordered by relevance. | ||
<a name="index.update"></a> | ||
@@ -474,3 +509,3 @@ #### Update item to the index | ||
``` | ||
<a name="flexsearch.stemmer"></a> | ||
<a name="flexsearch.language"></a> | ||
#### Add language-specific stemmer and/or filter | ||
@@ -1150,3 +1185,3 @@ | ||
Default Build: | ||
Full Build: | ||
```bash | ||
@@ -1161,2 +1196,7 @@ npm run build | ||
Build Language Packs: | ||
```bash | ||
npm run build-lang | ||
``` | ||
Custom Build: | ||
@@ -1175,3 +1215,3 @@ ```bash | ||
Supported language flags for stemmer and filter: | ||
Supported language flags (includes stemmer and filter): | ||
@@ -1178,0 +1218,0 @@ - SUPPORT_LANG_EN |
@@ -887,3 +887,3 @@ if(typeof module !== 'undefined'){ | ||
// ------------------------------------------------------------------------ | ||
// Encoding Tests | ||
// Tokenizer Tests | ||
// ------------------------------------------------------------------------ | ||
@@ -995,2 +995,3 @@ | ||
expect(index.search("1 5 3 4")).to.have.members([0]); | ||
expect(index.search("1 3 4 7")).to.have.lengthOf(0); | ||
expect(index.search("one")).to.have.members([1, 2]); | ||
@@ -1004,2 +1005,29 @@ expect(index.search("one three")).to.have.members([1, 2]); | ||
// ------------------------------------------------------------------------ | ||
// Suggestion Tests | ||
// ------------------------------------------------------------------------ | ||
describe('Suggestion', function(){ | ||
it('Should have been suggested properly by relevance', function(){ | ||
var index = new FlexSearch({ | ||
encode: 'advanced', | ||
mode: 'strict', | ||
suggest: true | ||
}); | ||
index.add(0, "1 2 3 2 4 1 5 3"); | ||
index.add(1, "zero one two three four five six seven eight nine ten"); | ||
index.add(2, "four two zero one three ten five seven eight six nine"); | ||
expect(index.search("1 3 4 7")).to.have.members([0]); | ||
expect(index.search("1 3 9 7")).to.have.members([0]); | ||
expect(index.search("one foobar two")).to.have.members([1, 2]); | ||
expect(index.search("zero one foobar two foobar")).to.have.members([1, 2]); | ||
//TODO | ||
//expect(index.search("zero one foobar two foobar")[0]).to.equal(1); | ||
}); | ||
}); | ||
// ------------------------------------------------------------------------ | ||
// Feature Tests | ||
@@ -1035,5 +1063,4 @@ // ------------------------------------------------------------------------ | ||
'8': 'f' | ||
}); | ||
flexsearch_forward.add(0, "12345678"); | ||
}).add(0, "12345678"); | ||
@@ -1159,3 +1186,3 @@ expect(flexsearch_forward.search("12345678")).to.include(0); | ||
return str = '-[' + str.toUpperCase() + ']-'; | ||
return '-[' + str.toUpperCase() + ']-'; | ||
} |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Shell access
Supply chain riskThis module accesses the system shell. Accessing the system shell increases the risk of executing arbitrary code.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
1930974
15
3232
1218
1