cry-search 2.1.0 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/common/numeric/matchMany.d.ts +9 -11
- package/dist/common/numeric/matchMany.d.ts.map +1 -1
- package/dist/index.cjs +78 -66
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +78 -66
- package/dist/vet/index.cjs +133 -67
- package/dist/vet/index.d.cts +1 -1
- package/dist/vet/index.d.ts +1 -1
- package/dist/vet/index.d.ts.map +1 -1
- package/dist/vet/index.js +133 -67
- package/dist/vet/uparjanje.d.ts +15 -0
- package/dist/vet/uparjanje.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -89,23 +89,21 @@ export interface PreparedCollection<T extends SearchableObject> {
|
|
|
89
89
|
data: SearchableData<T>;
|
|
90
90
|
metadata: NumericSearchMetadata;
|
|
91
91
|
}
|
|
92
|
+
/**
|
|
93
|
+
* Masovno uparjanje v enem kosu (sinhrono, brez I/O). Enaki rezultati kot
|
|
94
|
+
* `matchMany`; uporabno tam, kjer klicoči API ni async (npr. predpomnilnik
|
|
95
|
+
* gatewaya) ali iteracija po kosih ni potrebna.
|
|
96
|
+
*/
|
|
97
|
+
export declare function matchManySync<T extends SearchableObject, TQuery>(prepared: PreparedCollection<T>, queries: readonly TQuery[], options: MatchManyOptions<T, TQuery>): MatchManyRezultat<T>[];
|
|
92
98
|
/**
|
|
93
99
|
* Masovno uparjanje: indeks ene strani, elementi druge strani kot poizvedbe.
|
|
94
100
|
*
|
|
95
101
|
* Vrne async iterator, ki teče po kosih (`kos`, privzeto 50), tako da rezultat
|
|
96
|
-
* velikega uparjanja (npr. 40k × 25k) ne gre v celoti v pomnilnik. Za vsak
|
|
97
|
-
*
|
|
102
|
+
* velikega uparjanja (npr. 40k × 25k) ne gre v celoti v pomnilnik. Za vsak element
|
|
103
|
+
* vrne največ `limit` kandidatov, urejenih padajoče po oceni.
|
|
98
104
|
*
|
|
99
|
-
* Uporablja isto iskalno logiko kot `searchAndRank
|
|
100
|
-
* z AND-ujemanjem + ocena po `metadata.unsorted`), zato so rezultati skladni z
|
|
105
|
+
* Uporablja isto iskalno logiko kot `searchAndRank`, zato so rezultati skladni z
|
|
101
106
|
* navadnim iskanjem. Domenski modul lahko oceno in sprejem zamenja z `rank`/`accept`.
|
|
102
|
-
*
|
|
103
|
-
* @example
|
|
104
|
-
* ```typescript
|
|
105
|
-
* for await (const kos of matchMany(prepared, levi, { queryOf: (a) => a.naziv })) {
|
|
106
|
-
* console.log(kos.id, kos.kandidati[0]?.item.naziv);
|
|
107
|
-
* }
|
|
108
|
-
* ```
|
|
109
107
|
*/
|
|
110
108
|
export declare function matchMany<T extends SearchableObject, TQuery>(prepared: PreparedCollection<T>, queries: readonly TQuery[], options: MatchManyOptions<T, TQuery>): AsyncGenerator<MatchManyRezultat<T>[], void, void>;
|
|
111
109
|
//# sourceMappingURL=matchMany.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matchMany.d.ts","sourceRoot":"","sources":["../../../src/common/numeric/matchMany.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"matchMany.d.ts","sourceRoot":"","sources":["../../../src/common/numeric/matchMany.ts"],"names":[],"mappings":"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"}
|
package/dist/index.cjs
CHANGED
|
@@ -70,6 +70,7 @@ __export(exports_src, {
|
|
|
70
70
|
isDeletedOrBlocked: () => isDeletedOrBlocked,
|
|
71
71
|
itemClasses: () => itemClasses,
|
|
72
72
|
matchMany: () => matchMany,
|
|
73
|
+
matchManySync: () => matchManySync,
|
|
73
74
|
matchPreparedTokenInSortedList: () => matchPreparedTokenInSortedList,
|
|
74
75
|
matchTokenInSortedListNumeric: () => matchTokenInSortedListNumeric,
|
|
75
76
|
normalizeDates: () => normalizeDates,
|
|
@@ -1761,76 +1762,87 @@ function naSezname(classes) {
|
|
|
1761
1762
|
}
|
|
1762
1763
|
return Object.keys(out).length ? out : undefined;
|
|
1763
1764
|
}
|
|
1764
|
-
|
|
1765
|
-
const { queryOf, idOf, limit = 3, minScore = 0,
|
|
1765
|
+
function matchOne(prepared, query, indeks, options, porabljeni) {
|
|
1766
|
+
const { queryOf, idOf, limit = 3, minScore = 0, rank, accept, opts } = options;
|
|
1766
1767
|
const retrievalLimit = options.retrievalLimit ?? Math.max(20, limit * 4);
|
|
1767
1768
|
const primaryTextOf = options.primaryTextOf ?? ((item) => item["naziv"]);
|
|
1768
|
-
const
|
|
1769
|
-
|
|
1770
|
-
|
|
1771
|
-
|
|
1772
|
-
|
|
1773
|
-
|
|
1774
|
-
|
|
1775
|
-
const
|
|
1776
|
-
|
|
1777
|
-
|
|
1778
|
-
|
|
1779
|
-
|
|
1780
|
-
|
|
1781
|
-
|
|
1782
|
-
|
|
1783
|
-
|
|
1784
|
-
|
|
1785
|
-
const
|
|
1786
|
-
|
|
1787
|
-
|
|
1788
|
-
|
|
1789
|
-
|
|
1790
|
-
|
|
1791
|
-
|
|
1792
|
-
|
|
1793
|
-
|
|
1794
|
-
|
|
1795
|
-
|
|
1796
|
-
|
|
1797
|
-
|
|
1798
|
-
continue;
|
|
1799
|
-
if (porabljeni?.has(zadetek.id))
|
|
1800
|
-
continue;
|
|
1801
|
-
najdeni.push({ id: zadetek.id, item: zadetek.item, score: ocena, ...classes ? { classes } : {} });
|
|
1802
|
-
}
|
|
1803
|
-
najdeni.sort((a, b) => {
|
|
1804
|
-
if (b.score !== a.score)
|
|
1805
|
-
return b.score - a.score;
|
|
1806
|
-
return (primaryTextOf(a.item) ?? "").localeCompare(primaryTextOf(b.item) ?? "");
|
|
1807
|
-
});
|
|
1808
|
-
if (najdeni.length > limit)
|
|
1809
|
-
najdeni.length = limit;
|
|
1810
|
-
return { kandidati: najdeni, zadetkov: zadetki.length };
|
|
1811
|
-
};
|
|
1812
|
-
let { kandidati, zadetkov } = poisciKandidate(text, queryClasses);
|
|
1813
|
-
const poskusiAlternative = kandidati.length === 0 && (options.alternativneLeCeNiZadetkov ? zadetkov === 0 : true);
|
|
1814
|
-
if (poskusiAlternative && options.alternativnePoizvedbe) {
|
|
1815
|
-
for (const alternativa of options.alternativnePoizvedbe(query)) {
|
|
1816
|
-
const altBesedilo = typeof alternativa === "string" ? alternativa : alternativa.text;
|
|
1817
|
-
if (!altBesedilo?.trim() || altBesedilo === text)
|
|
1818
|
-
continue;
|
|
1819
|
-
const altRazredi = typeof alternativa === "string" ? undefined : naSezname(alternativa.classes);
|
|
1820
|
-
({ kandidati } = poisciKandidate(altBesedilo, altRazredi));
|
|
1821
|
-
if (kandidati.length)
|
|
1822
|
-
break;
|
|
1823
|
-
}
|
|
1824
|
-
}
|
|
1825
|
-
if (porabljeni) {
|
|
1826
|
-
for (const kandidat of kandidati)
|
|
1827
|
-
porabljeni.add(kandidat.id);
|
|
1769
|
+
const vhod = queryOf(query);
|
|
1770
|
+
const text = typeof vhod === "string" ? vhod : vhod.text;
|
|
1771
|
+
const queryClasses = typeof vhod === "string" ? undefined : naSezname(vhod.classes);
|
|
1772
|
+
const id = idOf ? idOf(query, indeks) : String(query["_id"] ?? query["id"] ?? indeks);
|
|
1773
|
+
const poisciKandidate = (besedilo, razredi) => {
|
|
1774
|
+
if (!besedilo.trim())
|
|
1775
|
+
return { kandidati: [], zadetkov: 0 };
|
|
1776
|
+
const zadetki = searchAndRankNumeric(besedilo, prepared.data, prepared.metadata, {
|
|
1777
|
+
primaryTextFn: primaryTextOf,
|
|
1778
|
+
...options.exactKeysOf ? { exactKeysFn: options.exactKeysOf } : {},
|
|
1779
|
+
...opts ? { opts } : {},
|
|
1780
|
+
limit: retrievalLimit
|
|
1781
|
+
});
|
|
1782
|
+
const poizvedbaZaDomeno = { text: besedilo, ...razredi ? { classes: razredi } : {} };
|
|
1783
|
+
const najdeni = [];
|
|
1784
|
+
for (const zadetek of zadetki) {
|
|
1785
|
+
const classes = itemClasses(prepared.metadata, zadetek.id);
|
|
1786
|
+
const kandidat = {
|
|
1787
|
+
id: zadetek.id,
|
|
1788
|
+
item: zadetek.item,
|
|
1789
|
+
...classes ? { classes } : {}
|
|
1790
|
+
};
|
|
1791
|
+
if (accept && !accept(kandidat, poizvedbaZaDomeno))
|
|
1792
|
+
continue;
|
|
1793
|
+
const ocena = rank ? rank(kandidat, poizvedbaZaDomeno) : zadetek.score;
|
|
1794
|
+
if (ocena < minScore)
|
|
1795
|
+
continue;
|
|
1796
|
+
if (porabljeni?.has(zadetek.id))
|
|
1797
|
+
continue;
|
|
1798
|
+
najdeni.push({ id: zadetek.id, item: zadetek.item, score: ocena, ...classes ? { classes } : {} });
|
|
1828
1799
|
}
|
|
1829
|
-
|
|
1830
|
-
|
|
1831
|
-
|
|
1832
|
-
|
|
1800
|
+
najdeni.sort((a, b) => {
|
|
1801
|
+
if (b.score !== a.score)
|
|
1802
|
+
return b.score - a.score;
|
|
1803
|
+
return (primaryTextOf(a.item) ?? "").localeCompare(primaryTextOf(b.item) ?? "");
|
|
1833
1804
|
});
|
|
1805
|
+
if (najdeni.length > limit)
|
|
1806
|
+
najdeni.length = limit;
|
|
1807
|
+
return { kandidati: najdeni, zadetkov: zadetki.length };
|
|
1808
|
+
};
|
|
1809
|
+
let { kandidati, zadetkov } = poisciKandidate(text, queryClasses);
|
|
1810
|
+
const poskusiAlternative = kandidati.length === 0 && (options.alternativneLeCeNiZadetkov ? zadetkov === 0 : true);
|
|
1811
|
+
if (poskusiAlternative && options.alternativnePoizvedbe) {
|
|
1812
|
+
for (const alternativa of options.alternativnePoizvedbe(query)) {
|
|
1813
|
+
const altBesedilo = typeof alternativa === "string" ? alternativa : alternativa.text;
|
|
1814
|
+
if (!altBesedilo?.trim() || altBesedilo === text)
|
|
1815
|
+
continue;
|
|
1816
|
+
const altRazredi = typeof alternativa === "string" ? undefined : naSezname(alternativa.classes);
|
|
1817
|
+
({ kandidati } = poisciKandidate(altBesedilo, altRazredi));
|
|
1818
|
+
if (kandidati.length)
|
|
1819
|
+
break;
|
|
1820
|
+
}
|
|
1821
|
+
}
|
|
1822
|
+
if (porabljeni) {
|
|
1823
|
+
for (const kandidat of kandidati)
|
|
1824
|
+
porabljeni.add(kandidat.id);
|
|
1825
|
+
}
|
|
1826
|
+
return {
|
|
1827
|
+
id,
|
|
1828
|
+
...queryClasses ? { queryClasses } : {},
|
|
1829
|
+
kandidati
|
|
1830
|
+
};
|
|
1831
|
+
}
|
|
1832
|
+
function matchManySync(prepared, queries, options) {
|
|
1833
|
+
const porabljeni = options.samoEnolicno ? new Set : undefined;
|
|
1834
|
+
const izhod = new Array(queries.length);
|
|
1835
|
+
for (let indeks = 0;indeks < queries.length; indeks++) {
|
|
1836
|
+
izhod[indeks] = matchOne(prepared, queries[indeks], indeks, options, porabljeni);
|
|
1837
|
+
}
|
|
1838
|
+
return izhod;
|
|
1839
|
+
}
|
|
1840
|
+
async function* matchMany(prepared, queries, options) {
|
|
1841
|
+
const kos = options.kos ?? 50;
|
|
1842
|
+
const porabljeni = options.samoEnolicno ? new Set : undefined;
|
|
1843
|
+
let kosZbirka = [];
|
|
1844
|
+
for (let indeks = 0;indeks < queries.length; indeks++) {
|
|
1845
|
+
kosZbirka.push(matchOne(prepared, queries[indeks], indeks, options, porabljeni));
|
|
1834
1846
|
if (kosZbirka.length >= kos) {
|
|
1835
1847
|
yield kosZbirka;
|
|
1836
1848
|
kosZbirka = [];
|
package/dist/index.d.cts
CHANGED
|
@@ -24,7 +24,7 @@ export { findInLinkedArraysNumeric, findInLinkedArraysSimpleNumeric, } from './c
|
|
|
24
24
|
export { AugmentedMetadata } from './common/numeric/AugmentedMetadata';
|
|
25
25
|
export { syncSearchArrayMetadataNumeric as syncSearchArrayMetadata, syncSearchArrayMetadataNumericWithPrevious as syncSearchArrayMetadataWithPrevious, } from './common/numeric/syncSearchArrayMetadata';
|
|
26
26
|
export { normalizeQueryWithOpts } from './common/numeric/prepareQueryVariants';
|
|
27
|
-
export { matchMany, type MatchManyKandidat, type MatchManyOptions, type MatchManyRezultat, type PreparedCollection, } from './common/numeric/matchMany';
|
|
27
|
+
export { matchMany, matchManySync, type MatchManyKandidat, type MatchManyOptions, type MatchManyRezultat, type PreparedCollection, } from './common/numeric/matchMany';
|
|
28
28
|
export { upsertPrimaryItemNumeric as upsertPrimaryItem, removePrimaryItemNumeric as removePrimaryItem, upsertLinkedItemNumeric as upsertLinkedItem, removeLinkedItemNumeric as removeLinkedItem, syncLinkedItemsForPrimaryNumeric as syncLinkedItemsForPrimary, } from './common/numeric/updateSearchLinkedMetadata';
|
|
29
29
|
export { matchTokenInSortedListNumeric, allTokensMatchNumeric, binarySearchUint32, prepareQueryTokens, matchPreparedTokenInSortedList, allPreparedTokensMatch, type PreparedQueryToken, } from './utils/matchTokenNumeric';
|
|
30
30
|
export { searchAndRankNumeric as searchAndRank, searchAndRankNumeric, scoreOne, scoreOrderAndPresence, scoreBag, orderedTokenize, type ScoredResult, type SearchAndRankOptions, type OrderAndPresenceWeights, } from './common/numeric/searchAndRank';
|
package/dist/index.d.ts
CHANGED
|
@@ -24,7 +24,7 @@ export { findInLinkedArraysNumeric, findInLinkedArraysSimpleNumeric, } from './c
|
|
|
24
24
|
export { AugmentedMetadata } from './common/numeric/AugmentedMetadata';
|
|
25
25
|
export { syncSearchArrayMetadataNumeric as syncSearchArrayMetadata, syncSearchArrayMetadataNumericWithPrevious as syncSearchArrayMetadataWithPrevious, } from './common/numeric/syncSearchArrayMetadata';
|
|
26
26
|
export { normalizeQueryWithOpts } from './common/numeric/prepareQueryVariants';
|
|
27
|
-
export { matchMany, type MatchManyKandidat, type MatchManyOptions, type MatchManyRezultat, type PreparedCollection, } from './common/numeric/matchMany';
|
|
27
|
+
export { matchMany, matchManySync, type MatchManyKandidat, type MatchManyOptions, type MatchManyRezultat, type PreparedCollection, } from './common/numeric/matchMany';
|
|
28
28
|
export { upsertPrimaryItemNumeric as upsertPrimaryItem, removePrimaryItemNumeric as removePrimaryItem, upsertLinkedItemNumeric as upsertLinkedItem, removeLinkedItemNumeric as removeLinkedItem, syncLinkedItemsForPrimaryNumeric as syncLinkedItemsForPrimary, } from './common/numeric/updateSearchLinkedMetadata';
|
|
29
29
|
export { matchTokenInSortedListNumeric, allTokensMatchNumeric, binarySearchUint32, prepareQueryTokens, matchPreparedTokenInSortedList, allPreparedTokensMatch, type PreparedQueryToken, } from './utils/matchTokenNumeric';
|
|
30
30
|
export { searchAndRankNumeric as searchAndRank, searchAndRankNumeric, scoreOne, scoreOrderAndPresence, scoreBag, orderedTokenize, type ScoredResult, type SearchAndRankOptions, type OrderAndPresenceWeights, } from './common/numeric/searchAndRank';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1650,76 +1650,87 @@ function naSezname(classes) {
|
|
|
1650
1650
|
}
|
|
1651
1651
|
return Object.keys(out).length ? out : undefined;
|
|
1652
1652
|
}
|
|
1653
|
-
|
|
1654
|
-
const { queryOf, idOf, limit = 3, minScore = 0,
|
|
1653
|
+
function matchOne(prepared, query, indeks, options, porabljeni) {
|
|
1654
|
+
const { queryOf, idOf, limit = 3, minScore = 0, rank, accept, opts } = options;
|
|
1655
1655
|
const retrievalLimit = options.retrievalLimit ?? Math.max(20, limit * 4);
|
|
1656
1656
|
const primaryTextOf = options.primaryTextOf ?? ((item) => item["naziv"]);
|
|
1657
|
-
const
|
|
1658
|
-
|
|
1659
|
-
|
|
1660
|
-
|
|
1661
|
-
|
|
1662
|
-
|
|
1663
|
-
|
|
1664
|
-
const
|
|
1665
|
-
|
|
1666
|
-
|
|
1667
|
-
|
|
1668
|
-
|
|
1669
|
-
|
|
1670
|
-
|
|
1671
|
-
|
|
1672
|
-
|
|
1673
|
-
|
|
1674
|
-
const
|
|
1675
|
-
|
|
1676
|
-
|
|
1677
|
-
|
|
1678
|
-
|
|
1679
|
-
|
|
1680
|
-
|
|
1681
|
-
|
|
1682
|
-
|
|
1683
|
-
|
|
1684
|
-
|
|
1685
|
-
|
|
1686
|
-
|
|
1687
|
-
continue;
|
|
1688
|
-
if (porabljeni?.has(zadetek.id))
|
|
1689
|
-
continue;
|
|
1690
|
-
najdeni.push({ id: zadetek.id, item: zadetek.item, score: ocena, ...classes ? { classes } : {} });
|
|
1691
|
-
}
|
|
1692
|
-
najdeni.sort((a, b) => {
|
|
1693
|
-
if (b.score !== a.score)
|
|
1694
|
-
return b.score - a.score;
|
|
1695
|
-
return (primaryTextOf(a.item) ?? "").localeCompare(primaryTextOf(b.item) ?? "");
|
|
1696
|
-
});
|
|
1697
|
-
if (najdeni.length > limit)
|
|
1698
|
-
najdeni.length = limit;
|
|
1699
|
-
return { kandidati: najdeni, zadetkov: zadetki.length };
|
|
1700
|
-
};
|
|
1701
|
-
let { kandidati, zadetkov } = poisciKandidate(text, queryClasses);
|
|
1702
|
-
const poskusiAlternative = kandidati.length === 0 && (options.alternativneLeCeNiZadetkov ? zadetkov === 0 : true);
|
|
1703
|
-
if (poskusiAlternative && options.alternativnePoizvedbe) {
|
|
1704
|
-
for (const alternativa of options.alternativnePoizvedbe(query)) {
|
|
1705
|
-
const altBesedilo = typeof alternativa === "string" ? alternativa : alternativa.text;
|
|
1706
|
-
if (!altBesedilo?.trim() || altBesedilo === text)
|
|
1707
|
-
continue;
|
|
1708
|
-
const altRazredi = typeof alternativa === "string" ? undefined : naSezname(alternativa.classes);
|
|
1709
|
-
({ kandidati } = poisciKandidate(altBesedilo, altRazredi));
|
|
1710
|
-
if (kandidati.length)
|
|
1711
|
-
break;
|
|
1712
|
-
}
|
|
1713
|
-
}
|
|
1714
|
-
if (porabljeni) {
|
|
1715
|
-
for (const kandidat of kandidati)
|
|
1716
|
-
porabljeni.add(kandidat.id);
|
|
1657
|
+
const vhod = queryOf(query);
|
|
1658
|
+
const text = typeof vhod === "string" ? vhod : vhod.text;
|
|
1659
|
+
const queryClasses = typeof vhod === "string" ? undefined : naSezname(vhod.classes);
|
|
1660
|
+
const id = idOf ? idOf(query, indeks) : String(query["_id"] ?? query["id"] ?? indeks);
|
|
1661
|
+
const poisciKandidate = (besedilo, razredi) => {
|
|
1662
|
+
if (!besedilo.trim())
|
|
1663
|
+
return { kandidati: [], zadetkov: 0 };
|
|
1664
|
+
const zadetki = searchAndRankNumeric(besedilo, prepared.data, prepared.metadata, {
|
|
1665
|
+
primaryTextFn: primaryTextOf,
|
|
1666
|
+
...options.exactKeysOf ? { exactKeysFn: options.exactKeysOf } : {},
|
|
1667
|
+
...opts ? { opts } : {},
|
|
1668
|
+
limit: retrievalLimit
|
|
1669
|
+
});
|
|
1670
|
+
const poizvedbaZaDomeno = { text: besedilo, ...razredi ? { classes: razredi } : {} };
|
|
1671
|
+
const najdeni = [];
|
|
1672
|
+
for (const zadetek of zadetki) {
|
|
1673
|
+
const classes = itemClasses(prepared.metadata, zadetek.id);
|
|
1674
|
+
const kandidat = {
|
|
1675
|
+
id: zadetek.id,
|
|
1676
|
+
item: zadetek.item,
|
|
1677
|
+
...classes ? { classes } : {}
|
|
1678
|
+
};
|
|
1679
|
+
if (accept && !accept(kandidat, poizvedbaZaDomeno))
|
|
1680
|
+
continue;
|
|
1681
|
+
const ocena = rank ? rank(kandidat, poizvedbaZaDomeno) : zadetek.score;
|
|
1682
|
+
if (ocena < minScore)
|
|
1683
|
+
continue;
|
|
1684
|
+
if (porabljeni?.has(zadetek.id))
|
|
1685
|
+
continue;
|
|
1686
|
+
najdeni.push({ id: zadetek.id, item: zadetek.item, score: ocena, ...classes ? { classes } : {} });
|
|
1717
1687
|
}
|
|
1718
|
-
|
|
1719
|
-
|
|
1720
|
-
|
|
1721
|
-
|
|
1688
|
+
najdeni.sort((a, b) => {
|
|
1689
|
+
if (b.score !== a.score)
|
|
1690
|
+
return b.score - a.score;
|
|
1691
|
+
return (primaryTextOf(a.item) ?? "").localeCompare(primaryTextOf(b.item) ?? "");
|
|
1722
1692
|
});
|
|
1693
|
+
if (najdeni.length > limit)
|
|
1694
|
+
najdeni.length = limit;
|
|
1695
|
+
return { kandidati: najdeni, zadetkov: zadetki.length };
|
|
1696
|
+
};
|
|
1697
|
+
let { kandidati, zadetkov } = poisciKandidate(text, queryClasses);
|
|
1698
|
+
const poskusiAlternative = kandidati.length === 0 && (options.alternativneLeCeNiZadetkov ? zadetkov === 0 : true);
|
|
1699
|
+
if (poskusiAlternative && options.alternativnePoizvedbe) {
|
|
1700
|
+
for (const alternativa of options.alternativnePoizvedbe(query)) {
|
|
1701
|
+
const altBesedilo = typeof alternativa === "string" ? alternativa : alternativa.text;
|
|
1702
|
+
if (!altBesedilo?.trim() || altBesedilo === text)
|
|
1703
|
+
continue;
|
|
1704
|
+
const altRazredi = typeof alternativa === "string" ? undefined : naSezname(alternativa.classes);
|
|
1705
|
+
({ kandidati } = poisciKandidate(altBesedilo, altRazredi));
|
|
1706
|
+
if (kandidati.length)
|
|
1707
|
+
break;
|
|
1708
|
+
}
|
|
1709
|
+
}
|
|
1710
|
+
if (porabljeni) {
|
|
1711
|
+
for (const kandidat of kandidati)
|
|
1712
|
+
porabljeni.add(kandidat.id);
|
|
1713
|
+
}
|
|
1714
|
+
return {
|
|
1715
|
+
id,
|
|
1716
|
+
...queryClasses ? { queryClasses } : {},
|
|
1717
|
+
kandidati
|
|
1718
|
+
};
|
|
1719
|
+
}
|
|
1720
|
+
function matchManySync(prepared, queries, options) {
|
|
1721
|
+
const porabljeni = options.samoEnolicno ? new Set : undefined;
|
|
1722
|
+
const izhod = new Array(queries.length);
|
|
1723
|
+
for (let indeks = 0;indeks < queries.length; indeks++) {
|
|
1724
|
+
izhod[indeks] = matchOne(prepared, queries[indeks], indeks, options, porabljeni);
|
|
1725
|
+
}
|
|
1726
|
+
return izhod;
|
|
1727
|
+
}
|
|
1728
|
+
async function* matchMany(prepared, queries, options) {
|
|
1729
|
+
const kos = options.kos ?? 50;
|
|
1730
|
+
const porabljeni = options.samoEnolicno ? new Set : undefined;
|
|
1731
|
+
let kosZbirka = [];
|
|
1732
|
+
for (let indeks = 0;indeks < queries.length; indeks++) {
|
|
1733
|
+
kosZbirka.push(matchOne(prepared, queries[indeks], indeks, options, porabljeni));
|
|
1723
1734
|
if (kosZbirka.length >= kos) {
|
|
1724
1735
|
yield kosZbirka;
|
|
1725
1736
|
kosZbirka = [];
|
|
@@ -2352,6 +2363,7 @@ export {
|
|
|
2352
2363
|
isDeletedOrBlocked,
|
|
2353
2364
|
itemClasses,
|
|
2354
2365
|
matchMany,
|
|
2366
|
+
matchManySync,
|
|
2355
2367
|
matchPreparedTokenInSortedList,
|
|
2356
2368
|
matchTokenInSortedListNumeric,
|
|
2357
2369
|
normalizeDates,
|
package/dist/vet/index.cjs
CHANGED
|
@@ -53,6 +53,7 @@ __export(exports_vet, {
|
|
|
53
53
|
pripraviVetIndeks: () => pripraviVetIndeks,
|
|
54
54
|
upariArtikle: () => upariArtikle,
|
|
55
55
|
upariVse: () => upariVse,
|
|
56
|
+
upariVseSync: () => upariVseSync,
|
|
56
57
|
vetArtikelSpec: () => vetArtikelSpec,
|
|
57
58
|
vetQueryOpts: () => vetQueryOpts,
|
|
58
59
|
vrstaNormalizator: () => vrstaNormalizator,
|
|
@@ -2284,76 +2285,87 @@ function naSezname(classes) {
|
|
|
2284
2285
|
}
|
|
2285
2286
|
return Object.keys(out).length ? out : undefined;
|
|
2286
2287
|
}
|
|
2287
|
-
|
|
2288
|
-
const { queryOf, idOf, limit = 3, minScore = 0,
|
|
2288
|
+
function matchOne(prepared, query, indeks, options, porabljeni) {
|
|
2289
|
+
const { queryOf, idOf, limit = 3, minScore = 0, rank, accept, opts } = options;
|
|
2289
2290
|
const retrievalLimit = options.retrievalLimit ?? Math.max(20, limit * 4);
|
|
2290
2291
|
const primaryTextOf = options.primaryTextOf ?? ((item) => item["naziv"]);
|
|
2291
|
-
const
|
|
2292
|
-
|
|
2293
|
-
|
|
2294
|
-
|
|
2295
|
-
|
|
2296
|
-
|
|
2297
|
-
|
|
2298
|
-
const
|
|
2299
|
-
|
|
2300
|
-
|
|
2301
|
-
|
|
2302
|
-
|
|
2303
|
-
|
|
2304
|
-
|
|
2305
|
-
|
|
2306
|
-
|
|
2307
|
-
|
|
2308
|
-
const
|
|
2309
|
-
|
|
2310
|
-
|
|
2311
|
-
|
|
2312
|
-
|
|
2313
|
-
|
|
2314
|
-
|
|
2315
|
-
|
|
2316
|
-
|
|
2317
|
-
|
|
2318
|
-
|
|
2319
|
-
|
|
2320
|
-
|
|
2321
|
-
continue;
|
|
2322
|
-
if (porabljeni?.has(zadetek.id))
|
|
2323
|
-
continue;
|
|
2324
|
-
najdeni.push({ id: zadetek.id, item: zadetek.item, score: ocena, ...classes ? { classes } : {} });
|
|
2325
|
-
}
|
|
2326
|
-
najdeni.sort((a, b) => {
|
|
2327
|
-
if (b.score !== a.score)
|
|
2328
|
-
return b.score - a.score;
|
|
2329
|
-
return (primaryTextOf(a.item) ?? "").localeCompare(primaryTextOf(b.item) ?? "");
|
|
2330
|
-
});
|
|
2331
|
-
if (najdeni.length > limit)
|
|
2332
|
-
najdeni.length = limit;
|
|
2333
|
-
return { kandidati: najdeni, zadetkov: zadetki.length };
|
|
2334
|
-
};
|
|
2335
|
-
let { kandidati, zadetkov } = poisciKandidate(text, queryClasses);
|
|
2336
|
-
const poskusiAlternative = kandidati.length === 0 && (options.alternativneLeCeNiZadetkov ? zadetkov === 0 : true);
|
|
2337
|
-
if (poskusiAlternative && options.alternativnePoizvedbe) {
|
|
2338
|
-
for (const alternativa of options.alternativnePoizvedbe(query)) {
|
|
2339
|
-
const altBesedilo = typeof alternativa === "string" ? alternativa : alternativa.text;
|
|
2340
|
-
if (!altBesedilo?.trim() || altBesedilo === text)
|
|
2341
|
-
continue;
|
|
2342
|
-
const altRazredi = typeof alternativa === "string" ? undefined : naSezname(alternativa.classes);
|
|
2343
|
-
({ kandidati } = poisciKandidate(altBesedilo, altRazredi));
|
|
2344
|
-
if (kandidati.length)
|
|
2345
|
-
break;
|
|
2346
|
-
}
|
|
2347
|
-
}
|
|
2348
|
-
if (porabljeni) {
|
|
2349
|
-
for (const kandidat of kandidati)
|
|
2350
|
-
porabljeni.add(kandidat.id);
|
|
2292
|
+
const vhod = queryOf(query);
|
|
2293
|
+
const text = typeof vhod === "string" ? vhod : vhod.text;
|
|
2294
|
+
const queryClasses = typeof vhod === "string" ? undefined : naSezname(vhod.classes);
|
|
2295
|
+
const id = idOf ? idOf(query, indeks) : String(query["_id"] ?? query["id"] ?? indeks);
|
|
2296
|
+
const poisciKandidate = (besedilo, razredi) => {
|
|
2297
|
+
if (!besedilo.trim())
|
|
2298
|
+
return { kandidati: [], zadetkov: 0 };
|
|
2299
|
+
const zadetki = searchAndRankNumeric(besedilo, prepared.data, prepared.metadata, {
|
|
2300
|
+
primaryTextFn: primaryTextOf,
|
|
2301
|
+
...options.exactKeysOf ? { exactKeysFn: options.exactKeysOf } : {},
|
|
2302
|
+
...opts ? { opts } : {},
|
|
2303
|
+
limit: retrievalLimit
|
|
2304
|
+
});
|
|
2305
|
+
const poizvedbaZaDomeno = { text: besedilo, ...razredi ? { classes: razredi } : {} };
|
|
2306
|
+
const najdeni = [];
|
|
2307
|
+
for (const zadetek of zadetki) {
|
|
2308
|
+
const classes = itemClasses(prepared.metadata, zadetek.id);
|
|
2309
|
+
const kandidat = {
|
|
2310
|
+
id: zadetek.id,
|
|
2311
|
+
item: zadetek.item,
|
|
2312
|
+
...classes ? { classes } : {}
|
|
2313
|
+
};
|
|
2314
|
+
if (accept && !accept(kandidat, poizvedbaZaDomeno))
|
|
2315
|
+
continue;
|
|
2316
|
+
const ocena = rank ? rank(kandidat, poizvedbaZaDomeno) : zadetek.score;
|
|
2317
|
+
if (ocena < minScore)
|
|
2318
|
+
continue;
|
|
2319
|
+
if (porabljeni?.has(zadetek.id))
|
|
2320
|
+
continue;
|
|
2321
|
+
najdeni.push({ id: zadetek.id, item: zadetek.item, score: ocena, ...classes ? { classes } : {} });
|
|
2351
2322
|
}
|
|
2352
|
-
|
|
2353
|
-
|
|
2354
|
-
|
|
2355
|
-
|
|
2323
|
+
najdeni.sort((a, b) => {
|
|
2324
|
+
if (b.score !== a.score)
|
|
2325
|
+
return b.score - a.score;
|
|
2326
|
+
return (primaryTextOf(a.item) ?? "").localeCompare(primaryTextOf(b.item) ?? "");
|
|
2356
2327
|
});
|
|
2328
|
+
if (najdeni.length > limit)
|
|
2329
|
+
najdeni.length = limit;
|
|
2330
|
+
return { kandidati: najdeni, zadetkov: zadetki.length };
|
|
2331
|
+
};
|
|
2332
|
+
let { kandidati, zadetkov } = poisciKandidate(text, queryClasses);
|
|
2333
|
+
const poskusiAlternative = kandidati.length === 0 && (options.alternativneLeCeNiZadetkov ? zadetkov === 0 : true);
|
|
2334
|
+
if (poskusiAlternative && options.alternativnePoizvedbe) {
|
|
2335
|
+
for (const alternativa of options.alternativnePoizvedbe(query)) {
|
|
2336
|
+
const altBesedilo = typeof alternativa === "string" ? alternativa : alternativa.text;
|
|
2337
|
+
if (!altBesedilo?.trim() || altBesedilo === text)
|
|
2338
|
+
continue;
|
|
2339
|
+
const altRazredi = typeof alternativa === "string" ? undefined : naSezname(alternativa.classes);
|
|
2340
|
+
({ kandidati } = poisciKandidate(altBesedilo, altRazredi));
|
|
2341
|
+
if (kandidati.length)
|
|
2342
|
+
break;
|
|
2343
|
+
}
|
|
2344
|
+
}
|
|
2345
|
+
if (porabljeni) {
|
|
2346
|
+
for (const kandidat of kandidati)
|
|
2347
|
+
porabljeni.add(kandidat.id);
|
|
2348
|
+
}
|
|
2349
|
+
return {
|
|
2350
|
+
id,
|
|
2351
|
+
...queryClasses ? { queryClasses } : {},
|
|
2352
|
+
kandidati
|
|
2353
|
+
};
|
|
2354
|
+
}
|
|
2355
|
+
function matchManySync(prepared, queries, options) {
|
|
2356
|
+
const porabljeni = options.samoEnolicno ? new Set : undefined;
|
|
2357
|
+
const izhod = new Array(queries.length);
|
|
2358
|
+
for (let indeks = 0;indeks < queries.length; indeks++) {
|
|
2359
|
+
izhod[indeks] = matchOne(prepared, queries[indeks], indeks, options, porabljeni);
|
|
2360
|
+
}
|
|
2361
|
+
return izhod;
|
|
2362
|
+
}
|
|
2363
|
+
async function* matchMany(prepared, queries, options) {
|
|
2364
|
+
const kos = options.kos ?? 50;
|
|
2365
|
+
const porabljeni = options.samoEnolicno ? new Set : undefined;
|
|
2366
|
+
let kosZbirka = [];
|
|
2367
|
+
for (let indeks = 0;indeks < queries.length; indeks++) {
|
|
2368
|
+
kosZbirka.push(matchOne(prepared, queries[indeks], indeks, options, porabljeni));
|
|
2357
2369
|
if (kosZbirka.length >= kos) {
|
|
2358
2370
|
yield kosZbirka;
|
|
2359
2371
|
kosZbirka = [];
|
|
@@ -2435,7 +2447,9 @@ async function* upariArtikle(prepared, artikli, nastavitve = {}) {
|
|
|
2435
2447
|
opts: vetQueryOpts(),
|
|
2436
2448
|
primaryTextOf: (item) => item.naziv,
|
|
2437
2449
|
rank: (kandidat, poizvedba) => oceni(poizvedba.text, String(kandidat.item.naziv), poizvedba.classes, kandidat.classes).ocena,
|
|
2438
|
-
|
|
2450
|
+
...nastavitve.vrniNesprejete ? {} : {
|
|
2451
|
+
accept: (kandidat, poizvedba) => oceni(poizvedba.text, String(kandidat.item.naziv), poizvedba.classes, kandidat.classes).sprejeto
|
|
2452
|
+
},
|
|
2439
2453
|
...uporabiZozeno ? {
|
|
2440
2454
|
alternativnePoizvedbe: (z) => zoziPoizvedbo(z.naziv),
|
|
2441
2455
|
alternativneLeCeNiZadetkov: true
|
|
@@ -2460,6 +2474,58 @@ async function* upariArtikle(prepared, artikli, nastavitve = {}) {
|
|
|
2460
2474
|
yield izhod;
|
|
2461
2475
|
}
|
|
2462
2476
|
}
|
|
2477
|
+
function upariVseSync(prepared, artikli, nastavitve = {}) {
|
|
2478
|
+
const { limit = 3, retrievalLimit = 10, samoEnolicno, ocena: pragOcene } = nastavitve;
|
|
2479
|
+
const uporabiZozeno = nastavitve.zozenaPoizvedba !== false;
|
|
2480
|
+
const nazivPoId = new Map;
|
|
2481
|
+
for (const artikel of artikli)
|
|
2482
|
+
nazivPoId.set(String(artikel._id), artikel.naziv);
|
|
2483
|
+
const pomnilnik = new Map;
|
|
2484
|
+
const oceni = (poizvedba, kandidat, razrediPoizvedbe, razrediKandidata) => {
|
|
2485
|
+
const kljuc2 = `${poizvedba}\x00${kandidat}`;
|
|
2486
|
+
let rezultat = pomnilnik.get(kljuc2);
|
|
2487
|
+
if (!rezultat) {
|
|
2488
|
+
rezultat = oceniPar(poizvedba, kandidat, pragOcene, {
|
|
2489
|
+
...razrediPoizvedbe ? { poizvedba: razrediPoizvedbe } : {},
|
|
2490
|
+
...razrediKandidata ? { kandidat: razrediKandidata } : {}
|
|
2491
|
+
});
|
|
2492
|
+
pomnilnik.set(kljuc2, rezultat);
|
|
2493
|
+
}
|
|
2494
|
+
return rezultat;
|
|
2495
|
+
};
|
|
2496
|
+
const rezultati = matchManySync(prepared, artikli, {
|
|
2497
|
+
queryOf: (z) => {
|
|
2498
|
+
const { classes } = normalizeQueryWithOpts(z.naziv, vetQueryOpts());
|
|
2499
|
+
return { text: z.naziv, ...Object.keys(classes).length ? { classes } : {} };
|
|
2500
|
+
},
|
|
2501
|
+
idOf: (z) => String(z._id),
|
|
2502
|
+
limit,
|
|
2503
|
+
retrievalLimit,
|
|
2504
|
+
...samoEnolicno ? { samoEnolicno: true } : {},
|
|
2505
|
+
opts: vetQueryOpts(),
|
|
2506
|
+
primaryTextOf: (item) => item.naziv,
|
|
2507
|
+
rank: (kandidat, poizvedba) => oceni(poizvedba.text, String(kandidat.item.naziv), poizvedba.classes, kandidat.classes).ocena,
|
|
2508
|
+
...nastavitve.vrniNesprejete ? {} : {
|
|
2509
|
+
accept: (kandidat, poizvedba) => oceni(poizvedba.text, String(kandidat.item.naziv), poizvedba.classes, kandidat.classes).sprejeto
|
|
2510
|
+
},
|
|
2511
|
+
...uporabiZozeno ? { alternativnePoizvedbe: (z) => zoziPoizvedbo(z.naziv), alternativneLeCeNiZadetkov: true } : {}
|
|
2512
|
+
});
|
|
2513
|
+
return rezultati.map((rezultat) => ({
|
|
2514
|
+
id: rezultat.id,
|
|
2515
|
+
kandidati: rezultat.kandidati.map((kandidat) => {
|
|
2516
|
+
const classes = itemClasses(prepared.metadata, kandidat.id);
|
|
2517
|
+
const ocena = oceni(nazivPoId.get(rezultat.id) ?? "", String(kandidat.item.naziv), rezultat.queryClasses, classes);
|
|
2518
|
+
return {
|
|
2519
|
+
id: String(kandidat.id),
|
|
2520
|
+
item: kandidat.item,
|
|
2521
|
+
score: kandidat.score,
|
|
2522
|
+
sprejeto: ocena.sprejeto,
|
|
2523
|
+
ocena,
|
|
2524
|
+
...classes ? { classes } : {}
|
|
2525
|
+
};
|
|
2526
|
+
})
|
|
2527
|
+
}));
|
|
2528
|
+
}
|
|
2463
2529
|
async function upariVse(prepared, artikli, nastavitve = {}) {
|
|
2464
2530
|
const izhod = [];
|
|
2465
2531
|
for await (const kos of upariArtikle(prepared, artikli, nastavitve))
|
package/dist/vet/index.d.cts
CHANGED
|
@@ -18,7 +18,7 @@ export { vetArtikelSpec, vetQueryOpts, type VetSpecNastavitve } from './spec';
|
|
|
18
18
|
/** Iz jedra ponovno izvoženo, ker je del vet pogodbe (razredi poizvedbe). */
|
|
19
19
|
export { normalizeQueryWithOpts } from '../common/numeric/prepareQueryVariants';
|
|
20
20
|
export { oceniPar, type VetOcena, type VetOcenaNastavitve, type VetRazredi } from './ocena';
|
|
21
|
-
export { pripraviVetIndeks, upariArtikle, upariVse, type VetArtikel, type VetKandidat, type VetPar, type VetUparjanjeNastavitve, } from './uparjanje';
|
|
21
|
+
export { pripraviVetIndeks, upariArtikle, upariVse, upariVseSync, type VetArtikel, type VetKandidat, type VetPar, type VetUparjanjeNastavitve, } from './uparjanje';
|
|
22
22
|
export { ZNAMKE_GEN, type OkrajsavaZnamke, type LinijaZnamke } from './data/znamke.gen';
|
|
23
23
|
export { ENOTE_SINONIMI, VRSTE_SINONIMI } from './data/enote';
|
|
24
24
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/vet/index.d.ts
CHANGED
|
@@ -18,7 +18,7 @@ export { vetArtikelSpec, vetQueryOpts, type VetSpecNastavitve } from './spec';
|
|
|
18
18
|
/** Iz jedra ponovno izvoženo, ker je del vet pogodbe (razredi poizvedbe). */
|
|
19
19
|
export { normalizeQueryWithOpts } from '../common/numeric/prepareQueryVariants';
|
|
20
20
|
export { oceniPar, type VetOcena, type VetOcenaNastavitve, type VetRazredi } from './ocena';
|
|
21
|
-
export { pripraviVetIndeks, upariArtikle, upariVse, type VetArtikel, type VetKandidat, type VetPar, type VetUparjanjeNastavitve, } from './uparjanje';
|
|
21
|
+
export { pripraviVetIndeks, upariArtikle, upariVse, upariVseSync, type VetArtikel, type VetKandidat, type VetPar, type VetUparjanjeNastavitve, } from './uparjanje';
|
|
22
22
|
export { ZNAMKE_GEN, type OkrajsavaZnamke, type LinijaZnamke } from './data/znamke.gen';
|
|
23
23
|
export { ENOTE_SINONIMI, VRSTE_SINONIMI } from './data/enote';
|
|
24
24
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/vet/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vet/index.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC7J,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAC9E,6EAA6E;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAE,KAAK,QAAQ,EAAE,KAAK,kBAAkB,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AAC5F,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,QAAQ,EACR,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,MAAM,EACX,KAAK,sBAAsB,GAC5B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACxF,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vet/index.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC7J,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAC9E,6EAA6E;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAE,KAAK,QAAQ,EAAE,KAAK,kBAAkB,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AAC5F,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,QAAQ,EACR,YAAY,EACZ,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,MAAM,EACX,KAAK,sBAAsB,GAC5B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACxF,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/vet/index.js
CHANGED
|
@@ -2222,76 +2222,87 @@ function naSezname(classes) {
|
|
|
2222
2222
|
}
|
|
2223
2223
|
return Object.keys(out).length ? out : undefined;
|
|
2224
2224
|
}
|
|
2225
|
-
|
|
2226
|
-
const { queryOf, idOf, limit = 3, minScore = 0,
|
|
2225
|
+
function matchOne(prepared, query, indeks, options, porabljeni) {
|
|
2226
|
+
const { queryOf, idOf, limit = 3, minScore = 0, rank, accept, opts } = options;
|
|
2227
2227
|
const retrievalLimit = options.retrievalLimit ?? Math.max(20, limit * 4);
|
|
2228
2228
|
const primaryTextOf = options.primaryTextOf ?? ((item) => item["naziv"]);
|
|
2229
|
-
const
|
|
2230
|
-
|
|
2231
|
-
|
|
2232
|
-
|
|
2233
|
-
|
|
2234
|
-
|
|
2235
|
-
|
|
2236
|
-
const
|
|
2237
|
-
|
|
2238
|
-
|
|
2239
|
-
|
|
2240
|
-
|
|
2241
|
-
|
|
2242
|
-
|
|
2243
|
-
|
|
2244
|
-
|
|
2245
|
-
|
|
2246
|
-
const
|
|
2247
|
-
|
|
2248
|
-
|
|
2249
|
-
|
|
2250
|
-
|
|
2251
|
-
|
|
2252
|
-
|
|
2253
|
-
|
|
2254
|
-
|
|
2255
|
-
|
|
2256
|
-
|
|
2257
|
-
|
|
2258
|
-
|
|
2259
|
-
continue;
|
|
2260
|
-
if (porabljeni?.has(zadetek.id))
|
|
2261
|
-
continue;
|
|
2262
|
-
najdeni.push({ id: zadetek.id, item: zadetek.item, score: ocena, ...classes ? { classes } : {} });
|
|
2263
|
-
}
|
|
2264
|
-
najdeni.sort((a, b) => {
|
|
2265
|
-
if (b.score !== a.score)
|
|
2266
|
-
return b.score - a.score;
|
|
2267
|
-
return (primaryTextOf(a.item) ?? "").localeCompare(primaryTextOf(b.item) ?? "");
|
|
2268
|
-
});
|
|
2269
|
-
if (najdeni.length > limit)
|
|
2270
|
-
najdeni.length = limit;
|
|
2271
|
-
return { kandidati: najdeni, zadetkov: zadetki.length };
|
|
2272
|
-
};
|
|
2273
|
-
let { kandidati, zadetkov } = poisciKandidate(text, queryClasses);
|
|
2274
|
-
const poskusiAlternative = kandidati.length === 0 && (options.alternativneLeCeNiZadetkov ? zadetkov === 0 : true);
|
|
2275
|
-
if (poskusiAlternative && options.alternativnePoizvedbe) {
|
|
2276
|
-
for (const alternativa of options.alternativnePoizvedbe(query)) {
|
|
2277
|
-
const altBesedilo = typeof alternativa === "string" ? alternativa : alternativa.text;
|
|
2278
|
-
if (!altBesedilo?.trim() || altBesedilo === text)
|
|
2279
|
-
continue;
|
|
2280
|
-
const altRazredi = typeof alternativa === "string" ? undefined : naSezname(alternativa.classes);
|
|
2281
|
-
({ kandidati } = poisciKandidate(altBesedilo, altRazredi));
|
|
2282
|
-
if (kandidati.length)
|
|
2283
|
-
break;
|
|
2284
|
-
}
|
|
2285
|
-
}
|
|
2286
|
-
if (porabljeni) {
|
|
2287
|
-
for (const kandidat of kandidati)
|
|
2288
|
-
porabljeni.add(kandidat.id);
|
|
2229
|
+
const vhod = queryOf(query);
|
|
2230
|
+
const text = typeof vhod === "string" ? vhod : vhod.text;
|
|
2231
|
+
const queryClasses = typeof vhod === "string" ? undefined : naSezname(vhod.classes);
|
|
2232
|
+
const id = idOf ? idOf(query, indeks) : String(query["_id"] ?? query["id"] ?? indeks);
|
|
2233
|
+
const poisciKandidate = (besedilo, razredi) => {
|
|
2234
|
+
if (!besedilo.trim())
|
|
2235
|
+
return { kandidati: [], zadetkov: 0 };
|
|
2236
|
+
const zadetki = searchAndRankNumeric(besedilo, prepared.data, prepared.metadata, {
|
|
2237
|
+
primaryTextFn: primaryTextOf,
|
|
2238
|
+
...options.exactKeysOf ? { exactKeysFn: options.exactKeysOf } : {},
|
|
2239
|
+
...opts ? { opts } : {},
|
|
2240
|
+
limit: retrievalLimit
|
|
2241
|
+
});
|
|
2242
|
+
const poizvedbaZaDomeno = { text: besedilo, ...razredi ? { classes: razredi } : {} };
|
|
2243
|
+
const najdeni = [];
|
|
2244
|
+
for (const zadetek of zadetki) {
|
|
2245
|
+
const classes = itemClasses(prepared.metadata, zadetek.id);
|
|
2246
|
+
const kandidat = {
|
|
2247
|
+
id: zadetek.id,
|
|
2248
|
+
item: zadetek.item,
|
|
2249
|
+
...classes ? { classes } : {}
|
|
2250
|
+
};
|
|
2251
|
+
if (accept && !accept(kandidat, poizvedbaZaDomeno))
|
|
2252
|
+
continue;
|
|
2253
|
+
const ocena = rank ? rank(kandidat, poizvedbaZaDomeno) : zadetek.score;
|
|
2254
|
+
if (ocena < minScore)
|
|
2255
|
+
continue;
|
|
2256
|
+
if (porabljeni?.has(zadetek.id))
|
|
2257
|
+
continue;
|
|
2258
|
+
najdeni.push({ id: zadetek.id, item: zadetek.item, score: ocena, ...classes ? { classes } : {} });
|
|
2289
2259
|
}
|
|
2290
|
-
|
|
2291
|
-
|
|
2292
|
-
|
|
2293
|
-
|
|
2260
|
+
najdeni.sort((a, b) => {
|
|
2261
|
+
if (b.score !== a.score)
|
|
2262
|
+
return b.score - a.score;
|
|
2263
|
+
return (primaryTextOf(a.item) ?? "").localeCompare(primaryTextOf(b.item) ?? "");
|
|
2294
2264
|
});
|
|
2265
|
+
if (najdeni.length > limit)
|
|
2266
|
+
najdeni.length = limit;
|
|
2267
|
+
return { kandidati: najdeni, zadetkov: zadetki.length };
|
|
2268
|
+
};
|
|
2269
|
+
let { kandidati, zadetkov } = poisciKandidate(text, queryClasses);
|
|
2270
|
+
const poskusiAlternative = kandidati.length === 0 && (options.alternativneLeCeNiZadetkov ? zadetkov === 0 : true);
|
|
2271
|
+
if (poskusiAlternative && options.alternativnePoizvedbe) {
|
|
2272
|
+
for (const alternativa of options.alternativnePoizvedbe(query)) {
|
|
2273
|
+
const altBesedilo = typeof alternativa === "string" ? alternativa : alternativa.text;
|
|
2274
|
+
if (!altBesedilo?.trim() || altBesedilo === text)
|
|
2275
|
+
continue;
|
|
2276
|
+
const altRazredi = typeof alternativa === "string" ? undefined : naSezname(alternativa.classes);
|
|
2277
|
+
({ kandidati } = poisciKandidate(altBesedilo, altRazredi));
|
|
2278
|
+
if (kandidati.length)
|
|
2279
|
+
break;
|
|
2280
|
+
}
|
|
2281
|
+
}
|
|
2282
|
+
if (porabljeni) {
|
|
2283
|
+
for (const kandidat of kandidati)
|
|
2284
|
+
porabljeni.add(kandidat.id);
|
|
2285
|
+
}
|
|
2286
|
+
return {
|
|
2287
|
+
id,
|
|
2288
|
+
...queryClasses ? { queryClasses } : {},
|
|
2289
|
+
kandidati
|
|
2290
|
+
};
|
|
2291
|
+
}
|
|
2292
|
+
function matchManySync(prepared, queries, options) {
|
|
2293
|
+
const porabljeni = options.samoEnolicno ? new Set : undefined;
|
|
2294
|
+
const izhod = new Array(queries.length);
|
|
2295
|
+
for (let indeks = 0;indeks < queries.length; indeks++) {
|
|
2296
|
+
izhod[indeks] = matchOne(prepared, queries[indeks], indeks, options, porabljeni);
|
|
2297
|
+
}
|
|
2298
|
+
return izhod;
|
|
2299
|
+
}
|
|
2300
|
+
async function* matchMany(prepared, queries, options) {
|
|
2301
|
+
const kos = options.kos ?? 50;
|
|
2302
|
+
const porabljeni = options.samoEnolicno ? new Set : undefined;
|
|
2303
|
+
let kosZbirka = [];
|
|
2304
|
+
for (let indeks = 0;indeks < queries.length; indeks++) {
|
|
2305
|
+
kosZbirka.push(matchOne(prepared, queries[indeks], indeks, options, porabljeni));
|
|
2295
2306
|
if (kosZbirka.length >= kos) {
|
|
2296
2307
|
yield kosZbirka;
|
|
2297
2308
|
kosZbirka = [];
|
|
@@ -2373,7 +2384,9 @@ async function* upariArtikle(prepared, artikli, nastavitve = {}) {
|
|
|
2373
2384
|
opts: vetQueryOpts(),
|
|
2374
2385
|
primaryTextOf: (item) => item.naziv,
|
|
2375
2386
|
rank: (kandidat, poizvedba) => oceni(poizvedba.text, String(kandidat.item.naziv), poizvedba.classes, kandidat.classes).ocena,
|
|
2376
|
-
|
|
2387
|
+
...nastavitve.vrniNesprejete ? {} : {
|
|
2388
|
+
accept: (kandidat, poizvedba) => oceni(poizvedba.text, String(kandidat.item.naziv), poizvedba.classes, kandidat.classes).sprejeto
|
|
2389
|
+
},
|
|
2377
2390
|
...uporabiZozeno ? {
|
|
2378
2391
|
alternativnePoizvedbe: (z) => zoziPoizvedbo(z.naziv),
|
|
2379
2392
|
alternativneLeCeNiZadetkov: true
|
|
@@ -2398,6 +2411,58 @@ async function* upariArtikle(prepared, artikli, nastavitve = {}) {
|
|
|
2398
2411
|
yield izhod;
|
|
2399
2412
|
}
|
|
2400
2413
|
}
|
|
2414
|
+
function upariVseSync(prepared, artikli, nastavitve = {}) {
|
|
2415
|
+
const { limit = 3, retrievalLimit = 10, samoEnolicno, ocena: pragOcene } = nastavitve;
|
|
2416
|
+
const uporabiZozeno = nastavitve.zozenaPoizvedba !== false;
|
|
2417
|
+
const nazivPoId = new Map;
|
|
2418
|
+
for (const artikel of artikli)
|
|
2419
|
+
nazivPoId.set(String(artikel._id), artikel.naziv);
|
|
2420
|
+
const pomnilnik = new Map;
|
|
2421
|
+
const oceni = (poizvedba, kandidat, razrediPoizvedbe, razrediKandidata) => {
|
|
2422
|
+
const kljuc2 = `${poizvedba}\x00${kandidat}`;
|
|
2423
|
+
let rezultat = pomnilnik.get(kljuc2);
|
|
2424
|
+
if (!rezultat) {
|
|
2425
|
+
rezultat = oceniPar(poizvedba, kandidat, pragOcene, {
|
|
2426
|
+
...razrediPoizvedbe ? { poizvedba: razrediPoizvedbe } : {},
|
|
2427
|
+
...razrediKandidata ? { kandidat: razrediKandidata } : {}
|
|
2428
|
+
});
|
|
2429
|
+
pomnilnik.set(kljuc2, rezultat);
|
|
2430
|
+
}
|
|
2431
|
+
return rezultat;
|
|
2432
|
+
};
|
|
2433
|
+
const rezultati = matchManySync(prepared, artikli, {
|
|
2434
|
+
queryOf: (z) => {
|
|
2435
|
+
const { classes } = normalizeQueryWithOpts(z.naziv, vetQueryOpts());
|
|
2436
|
+
return { text: z.naziv, ...Object.keys(classes).length ? { classes } : {} };
|
|
2437
|
+
},
|
|
2438
|
+
idOf: (z) => String(z._id),
|
|
2439
|
+
limit,
|
|
2440
|
+
retrievalLimit,
|
|
2441
|
+
...samoEnolicno ? { samoEnolicno: true } : {},
|
|
2442
|
+
opts: vetQueryOpts(),
|
|
2443
|
+
primaryTextOf: (item) => item.naziv,
|
|
2444
|
+
rank: (kandidat, poizvedba) => oceni(poizvedba.text, String(kandidat.item.naziv), poizvedba.classes, kandidat.classes).ocena,
|
|
2445
|
+
...nastavitve.vrniNesprejete ? {} : {
|
|
2446
|
+
accept: (kandidat, poizvedba) => oceni(poizvedba.text, String(kandidat.item.naziv), poizvedba.classes, kandidat.classes).sprejeto
|
|
2447
|
+
},
|
|
2448
|
+
...uporabiZozeno ? { alternativnePoizvedbe: (z) => zoziPoizvedbo(z.naziv), alternativneLeCeNiZadetkov: true } : {}
|
|
2449
|
+
});
|
|
2450
|
+
return rezultati.map((rezultat) => ({
|
|
2451
|
+
id: rezultat.id,
|
|
2452
|
+
kandidati: rezultat.kandidati.map((kandidat) => {
|
|
2453
|
+
const classes = itemClasses(prepared.metadata, kandidat.id);
|
|
2454
|
+
const ocena = oceni(nazivPoId.get(rezultat.id) ?? "", String(kandidat.item.naziv), rezultat.queryClasses, classes);
|
|
2455
|
+
return {
|
|
2456
|
+
id: String(kandidat.id),
|
|
2457
|
+
item: kandidat.item,
|
|
2458
|
+
score: kandidat.score,
|
|
2459
|
+
sprejeto: ocena.sprejeto,
|
|
2460
|
+
ocena,
|
|
2461
|
+
...classes ? { classes } : {}
|
|
2462
|
+
};
|
|
2463
|
+
})
|
|
2464
|
+
}));
|
|
2465
|
+
}
|
|
2401
2466
|
async function upariVse(prepared, artikli, nastavitve = {}) {
|
|
2402
2467
|
const izhod = [];
|
|
2403
2468
|
for await (const kos of upariArtikle(prepared, artikli, nastavitve))
|
|
@@ -2419,6 +2484,7 @@ export {
|
|
|
2419
2484
|
pripraviVetIndeks,
|
|
2420
2485
|
upariArtikle,
|
|
2421
2486
|
upariVse,
|
|
2487
|
+
upariVseSync,
|
|
2422
2488
|
vetArtikelSpec,
|
|
2423
2489
|
vetQueryOpts,
|
|
2424
2490
|
vrstaNormalizator,
|
package/dist/vet/uparjanje.d.ts
CHANGED
|
@@ -48,6 +48,13 @@ export interface VetUparjanjeNastavitve {
|
|
|
48
48
|
dodatniNormalizatorji?: readonly ValueNormalizer[];
|
|
49
49
|
/** Ali naj se poskusi drugi prehod z zoženo poizvedbo (privzeto da). */
|
|
50
50
|
zozenaPoizvedba?: boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Vrni tudi **nesprejete** kandidate (privzeto `false`: nesprejeti se izločijo).
|
|
53
|
+
*
|
|
54
|
+
* Uporabno v UI, kjer želimo uporabniku pokazati vse kandidate in le označiti,
|
|
55
|
+
* kateri prestanejo pravilo sprejema (kandidat nosi `sprejeto`).
|
|
56
|
+
*/
|
|
57
|
+
vrniNesprejete?: boolean;
|
|
51
58
|
}
|
|
52
59
|
/** Pripravi indeks desne strani (npr. Pantheonovi artikli). */
|
|
53
60
|
export declare function pripraviVetIndeks<T extends VetArtikel>(artikli: readonly T[], nastavitve?: {
|
|
@@ -64,6 +71,14 @@ export declare function upariArtikle<T extends VetArtikel>(prepared: {
|
|
|
64
71
|
data: SearchableData<T>;
|
|
65
72
|
metadata: NumericSearchMetadata;
|
|
66
73
|
}, artikli: readonly VetArtikel[], nastavitve?: VetUparjanjeNastavitve): AsyncGenerator<VetPar<T>[], void, void>;
|
|
74
|
+
/**
|
|
75
|
+
* Sinhrona različica `upariArtikle` v enem kosu — za klicoče, katerih API ni
|
|
76
|
+
* async (npr. predpomnilnik gatewaya).
|
|
77
|
+
*/
|
|
78
|
+
export declare function upariVseSync<T extends VetArtikel>(prepared: {
|
|
79
|
+
data: SearchableData<T>;
|
|
80
|
+
metadata: NumericSearchMetadata;
|
|
81
|
+
}, artikli: readonly VetArtikel[], nastavitve?: VetUparjanjeNastavitve): VetPar<T>[];
|
|
67
82
|
/** Zbere vse pare (za teste in manjše nabore). */
|
|
68
83
|
export declare function upariVse<T extends VetArtikel>(prepared: {
|
|
69
84
|
data: SearchableData<T>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uparjanje.d.ts","sourceRoot":"","sources":["../../src/vet/uparjanje.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AACzG,OAAO,EAAE,QAAQ,EAAE,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAC;AAKlD,uDAAuD;AACvD,MAAM,WAAW,UAAW,SAAQ,gBAAgB;IAClD,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED,4BAA4B;AAC5B,MAAM,WAAW,WAAW,CAAC,CAAC,SAAS,gBAAgB,GAAG,UAAU;IAClE,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,CAAC,CAAC;IACR,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,yCAAyC;IACzC,QAAQ,EAAE,OAAO,CAAC;IAClB,oCAAoC;IACpC,KAAK,EAAE,QAAQ,CAAC;IAChB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACpC;AAED,0CAA0C;AAC1C,MAAM,WAAW,MAAM,CAAC,CAAC,SAAS,gBAAgB,GAAG,UAAU;IAC7D,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;CAC7B;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,SAAI,GAAG,MAAM,EAAE,CAoBjE;AAED,MAAM,WAAW,sBAAsB;IACrC,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0FAA0F;IAC1F,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wDAAwD;IACxD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,iFAAiF;IACjF,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,kDAAkD;IAClD,KAAK,CAAC,EAAE,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,+CAA+C;IAC/C,qBAAqB,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IACnD,wEAAwE;IACxE,eAAe,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"uparjanje.d.ts","sourceRoot":"","sources":["../../src/vet/uparjanje.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cry-search",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.1",
|
|
4
4
|
"description": "A fast, memory-efficient search library for large datasets with support for tokenized matching, linked collections, and per-field match modes.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|