mirror of
https://github.com/nextapps-de/flexsearch.git
synced 2025-09-25 12:58:59 +02:00
1 line
1.8 KiB
JavaScript
1 line
1.8 KiB
JavaScript
import Resolver from"./resolver.js";import{create_object,concat,sort_by_length_up,get_max_len}from"./common.js";import{SearchResults,IntermediateSearchResults}from"./type.js";export function intersect(a,b,c,d,e,f,g){const h=a.length;let i,j,k=[];i=create_object();for(let l,m,n,o,p=0;p<b;p++)for(let b=0;b<h;b++)if(n=a[b],p<n.length&&(l=n[p]))for(let a=0;a<l.length;a++){if(m=l[a],(j=i[m])?i[m]++:(j=0,i[m]=1),o=k[j]||(k[j]=[]),!g){let a=p+(b||!e?0:f||0);o=o[a]||(o[a]=[])}if(o.push(m),g&&c&&j===h-1&&o.length-d===c)return d?o.slice(d):o}const l=k.length;if(l)if(!e){if(l<h)return[];if(k=k[l-1],c||d)if(g)(k.length>c||d)&&(k=k.slice(d,c+d));else{const a=[];for(let b,e=0;e<k.length;e++)if(b=k[e],b){if(d&&b.length>d){d-=b.length;continue}if((c&&b.length>c||d)&&(b=b.slice(d,c+d),c-=b.length,d&&(d-=b.length)),a.push(b),!c)break}k=a}}else k=1<k.length?union(k,c,d,g,f):(k=k[0])&&c&&k.length>c||d?k.slice(d,c+d):k;return k}export function union(a,b,c,d,e){const f=[],g=create_object();let h,l,m,n=a.length;if(!d)for(let d,j=n-1,i=0;0<=j;j--){d=a[j];for(let a=0;a<d.length;a++)if(h=d[a],m=h&&h.length,m)for(let d=0;d<m;d++)if(l=h[d],!g[l])if(g[l]=1,c)c--;else{let c=0|(a+(j<n-1?e||0:0))/(j+1),d=f[c]||(f[c]=[]);if(d.push(l),++i===b)return f}}else for(let d=n-1;0<=d;d--)if(h=a[d],m=h&&h.length,m)for(let a=0;a<m;a++)if(l=h[a],!g[l])if(g[l]=1,c)c--;else if(f.push(l),f.length===b)return f;return f}export function intersect_union(a,b,c,d,e){const f=create_object(),g=[];for(let g,h=0;h<b.length;h++){g=b[h];for(let a=0;a<g.length;a++)f[g[a]]=1}if(e){for(let b,e=0;e<a.length;e++)if(b=a[e],f[b]){if(d){d--;continue}if(g.push(b),f[b]=0,c&&0==--c)break}}else{a=a.result||a;for(let b,c,d=0;d<a.length;d++){b=a[d];for(let a=0;a<b.length;a++)if(c=b[a],f[c]){const a=g[d]||(g[d]=[]);a.push(c),f[c]=0}}}return g} |