cry-search 2.0.3 → 2.1.0
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/CLAUDE.md +8 -2
- package/README.md +53 -0
- package/UNIVERSE.md +12 -0
- package/dist/common/numeric/createSearchArrayMetadata.d.ts +10 -0
- package/dist/common/numeric/createSearchArrayMetadata.d.ts.map +1 -1
- package/dist/common/numeric/matchMany.d.ts +111 -0
- package/dist/common/numeric/matchMany.d.ts.map +1 -0
- package/dist/common/numeric/prepareQueryVariants.d.ts +24 -0
- package/dist/common/numeric/prepareQueryVariants.d.ts.map +1 -1
- package/dist/common/numeric/searchAndRank.d.ts.map +1 -1
- package/dist/common/numeric/searchInData.d.ts.map +1 -1
- package/dist/common/numeric/syncSearchArrayMetadata.d.ts.map +1 -1
- package/dist/common/numeric/updateSearchMetadata.d.ts.map +1 -1
- package/dist/index.cjs +300 -113
- package/dist/index.d.cts +5 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +300 -113
- package/dist/types/index.d.ts +65 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/vet/data/enote.d.ts +40 -0
- package/dist/vet/data/enote.d.ts.map +1 -0
- package/dist/vet/data/znamke.gen.d.ts +41 -0
- package/dist/vet/data/znamke.gen.d.ts.map +1 -0
- package/dist/vet/index.cjs +2468 -0
- package/dist/vet/index.d.cts +24 -0
- package/dist/vet/index.d.ts +24 -0
- package/dist/vet/index.d.ts.map +1 -0
- package/dist/vet/index.js +2426 -0
- package/dist/vet/normalizatorji.d.ts +104 -0
- package/dist/vet/normalizatorji.d.ts.map +1 -0
- package/dist/vet/ocena.d.ts +46 -0
- package/dist/vet/ocena.d.ts.map +1 -0
- package/dist/vet/spec.d.ts +35 -0
- package/dist/vet/spec.d.ts.map +1 -0
- package/dist/vet/uparjanje.d.ts +72 -0
- package/dist/vet/uparjanje.d.ts.map +1 -0
- package/package.json +29 -11
package/CLAUDE.md
CHANGED
|
@@ -337,7 +337,12 @@ Override match behavior per token at search time. Priority: query prefix > field
|
|
|
337
337
|
1. prepareStringForSearch pipeline minus the trailing .sort()
|
|
338
338
|
2. required for any positional / order-aware scoring
|
|
339
339
|
3. do NOT use these tokens for candidate retrieval (sorted lists required)
|
|
340
|
-
16.
|
|
340
|
+
16. compareTokenized(a: string, b: string): number
|
|
341
|
+
1. tokenizes both strings with prepareStringForSearch (same pipeline)
|
|
342
|
+
2. returns Jaccard similarity of the token sets: |A∩B| / |A∪B| ∈ [0, 1]
|
|
343
|
+
3. order-independent, case/diacritics-insensitive, dedupes repeated tokens
|
|
344
|
+
4. both empty → 1; empty vs non-empty → 0
|
|
345
|
+
17. Scoring primitives (in src/common/numeric/scoring.ts, re-exported from main)
|
|
341
346
|
1. scoreOne(query, qTokens, itemTokens, exactKeys?): number
|
|
342
347
|
- feature-rich scoring: +100_000 exact, +50 base, +100 all-matched, +50 first-word,
|
|
343
348
|
+80 perfect prefix, +30*(matched/span) density, -0.1*Σitemtoken.length penalty
|
|
@@ -392,7 +397,8 @@ src/
|
|
|
392
397
|
│ ├── normalizeDates.ts
|
|
393
398
|
│ ├── preprocessString.ts
|
|
394
399
|
│ ├── sanitiseString.ts
|
|
395
|
-
│
|
|
400
|
+
│ ├── tokenize.ts
|
|
401
|
+
│ └── compareTokenized.ts # Jaccard token-set similarity (0..1)
|
|
396
402
|
├── types/
|
|
397
403
|
│ └── index.ts
|
|
398
404
|
└── index.ts # Public API
|
package/README.md
CHANGED
|
@@ -12,6 +12,7 @@ A fast, memory-efficient search library for large datasets with support for toke
|
|
|
12
12
|
- **Search prefixes** - use `-word`, `--word`, or `~word` to exclude, `..word` for suffix, `=word` for exact match
|
|
13
13
|
- **Automatic normalization** - Handles diacritics, case, dates, and number formatting
|
|
14
14
|
- **Ranked search** - `searchAndRank` returns results scored by positional relevance (token order, contiguity, perfect-prefix, length)
|
|
15
|
+
- **String similarity** - `compareTokenized(a, b)` returns Jaccard token-set similarity (`0..1`) for fuzzy name/label matching
|
|
15
16
|
- **[Universal search](./UNIVERSE.md)** - Search and update across linked collections (e.g., customers with their pets)
|
|
16
17
|
|
|
17
18
|
## Table of Contents
|
|
@@ -26,6 +27,7 @@ A fast, memory-efficient search library for large datasets with support for toke
|
|
|
26
27
|
- [Updating Existing Data](#updating-existing-data)
|
|
27
28
|
- [Augmented Metadata - Local Search Context](#augmented-metadata---local-search-context)
|
|
28
29
|
- [Ranked Search with Positional Scoring](#ranked-search-with-positional-scoring)
|
|
30
|
+
- [String Similarity](#string-similarity)
|
|
29
31
|
- [Architecture](#architecture)
|
|
30
32
|
- [Text Processing Pipeline](#text-processing-pipeline)
|
|
31
33
|
- [Metadata Building](#metadata-building)
|
|
@@ -86,6 +88,17 @@ const results3 = searchInDataReturnObjects('IPHONE', metadata, data);
|
|
|
86
88
|
// Returns: Map with product 1
|
|
87
89
|
```
|
|
88
90
|
|
|
91
|
+
### String Similarity
|
|
92
|
+
|
|
93
|
+
```typescript
|
|
94
|
+
import { compareTokenized } from 'cry-search';
|
|
95
|
+
|
|
96
|
+
// Jaccard similarity of the token sets (0 = no overlap, 1 = identical).
|
|
97
|
+
compareTokenized('Janez Novak', 'novak janez'); // 1 (order-independent)
|
|
98
|
+
compareTokenized('Janes Novak', 'novak'); // 0.5 (one of two tokens shared)
|
|
99
|
+
compareTokenized('Janez Novak', 'ana'); // 0 (no shared tokens)
|
|
100
|
+
```
|
|
101
|
+
|
|
89
102
|
### SearchUniverse with Linked Collections
|
|
90
103
|
|
|
91
104
|
For related data (like customers and their pets), use `SearchUniverse` to search across collections:
|
|
@@ -518,3 +531,43 @@ See [CLAUDE.md](./CLAUDE.md) for the complete technical specification including:
|
|
|
518
531
|
## License
|
|
519
532
|
|
|
520
533
|
See [LICENSE.md](./LICENSE.md) for license terms.
|
|
534
|
+
|
|
535
|
+
## Domain extensions and the `cry-search/vet` entry point
|
|
536
|
+
|
|
537
|
+
The core exposes a narrow seam for domain logic (all optional, no behaviour change when unused):
|
|
538
|
+
|
|
539
|
+
- `SearchableObjectSpec.valueNormalizers` — index-time normalizers for field values, able to
|
|
540
|
+
return `{ text, classes }`; the classes land in `metadata.classes` (accessible via
|
|
541
|
+
`itemClasses(metadata, id)`) and **never take part in retrieval** — they are soft.
|
|
542
|
+
- `SearchOpts.queryNormalizers` + `normalizeQueryWithOpts(query, opts)` — the same mapping on
|
|
543
|
+
the query side, with the query classes returned to the caller.
|
|
544
|
+
- `matchMany(prepared, queries, opts)` — mass matching: an index of one collection, the other
|
|
545
|
+
collection as queries; asynchronous iterator (chunked), top-K candidates per item with scores,
|
|
546
|
+
optional `samoEnolicno` (greedy 1:1), optional domain `rank`/`accept`, and
|
|
547
|
+
`alternativnePoizvedbe` (retry with a narrowed query).
|
|
548
|
+
|
|
549
|
+
A ready-made veterinary implementation ships as a subpath (optional peer dependency on
|
|
550
|
+
`cry-vetzdravila`):
|
|
551
|
+
|
|
552
|
+
```bash
|
|
553
|
+
bun add cry-search cry-vetzdravila
|
|
554
|
+
```
|
|
555
|
+
|
|
556
|
+
```typescript
|
|
557
|
+
import { pripraviVetIndeks, upariArtikle, vetArtikelSpec, vetQueryOpts, oceniPar } from 'cry-search/vet';
|
|
558
|
+
|
|
559
|
+
const indeks = pripraviVetIndeks(pantheonArtikli); // { data, metadata }
|
|
560
|
+
for await (const kos of upariArtikle(indeks, klikvetArtikli, { limit: 3 })) {
|
|
561
|
+
for (const par of kos) {
|
|
562
|
+
const k = par.kandidati[0];
|
|
563
|
+
if (k?.sprejeto) console.log(par.id, '->', k.item.naziv, k.ocena.razlog);
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
```
|
|
567
|
+
|
|
568
|
+
It normalizes units (`tbl`/`tableta`), ranges (`15kg-30kg`, `15 - 30 kg`), decimal commas,
|
|
569
|
+
brand abbreviations (`RC` → `Royal Canin`) and brand lines (`SHN` → `Royal Canin SHN`), lemmatizes
|
|
570
|
+
animal species (`race`/`raca` → `raca`) with dogs/cats as a class, removes Pantheon type markers,
|
|
571
|
+
suppliers and professional markers, and accepts a pair only when both names cover each other
|
|
572
|
+
(whole-word coverage) — see `VET.md` for the measured quality (99.9 % on identical names,
|
|
573
|
+
~68 % on similar names) and the generation of the bundled brand table (`bun run gen:vet-data`).
|
package/UNIVERSE.md
CHANGED
|
@@ -875,3 +875,15 @@ priority over the ordinary segmented query. If no phone variant finds a result,
|
|
|
875
875
|
SearchUniverse falls back to its usual raw-token search. Caller-supplied
|
|
876
876
|
`phoneQueryNormalizers` are additional variants; they do not replace the
|
|
877
877
|
collection-derived normalizers.
|
|
878
|
+
|
|
879
|
+
## String similarity (compareTokenized)
|
|
880
|
+
|
|
881
|
+
`compareTokenized(a, b)` compares two strings through the same
|
|
882
|
+
`prepareStringForSearch` pipeline and returns the Jaccard similarity of their
|
|
883
|
+
token sets (`|A∩B| / |A∪B|`, `0..1`). Order-independent and
|
|
884
|
+
case/diacritics-insensitive. Useful for fuzzy name/label matching.
|
|
885
|
+
|
|
886
|
+
```text
|
|
887
|
+
compareTokenized('Janez Novak', 'novak janez') // 1
|
|
888
|
+
compareTokenized('Janes Novak', 'novak') // 0.5
|
|
889
|
+
```
|
|
@@ -59,7 +59,17 @@ export declare function decodeMatchMode(encoded: number): MatchMode;
|
|
|
59
59
|
export interface PreparedObjectTokens {
|
|
60
60
|
sorted: NumericTokenSortedList;
|
|
61
61
|
firstN: NumericTokenUnsortedList | undefined;
|
|
62
|
+
/**
|
|
63
|
+
* Domain classes produced by `spec.valueNormalizers` (e.g. `{ razpon: ['15-30'] }`).
|
|
64
|
+
* `undefined` when no normalizer produced classes.
|
|
65
|
+
*/
|
|
66
|
+
classes?: Record<string, string[]>;
|
|
62
67
|
}
|
|
68
|
+
/**
|
|
69
|
+
* Domain classes of one item, always normalised to lists.
|
|
70
|
+
* `undefined` when the item has none.
|
|
71
|
+
*/
|
|
72
|
+
export declare function itemClasses(metadata: NumericSearchMetadata, id: string): Record<string, string[]> | undefined;
|
|
63
73
|
/**
|
|
64
74
|
* Prepares an object for search, returning numeric token IDs for both retrieval and ranking.
|
|
65
75
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createSearchArrayMetadata.d.ts","sourceRoot":"","sources":["../../../src/common/numeric/createSearchArrayMetadata.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"createSearchArrayMetadata.d.ts","sourceRoot":"","sources":["../../../src/common/numeric/createSearchArrayMetadata.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,SAAS,EAET,qBAAqB,EACrB,sBAAsB,EACtB,wBAAwB,EACxB,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EAErB,MAAM,aAAa,CAAC;AAUrB;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAEjE;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAMzD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAS1D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAMrD,CAAC;AAKF,mDAAmD;AACnD,eAAO,MAAM,aAAa,QAAwB,CAAC;AAEnD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,MAAM,CAE5E;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAS1D;AAoED;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,sBAAsB,CAAC;IAC/B,MAAM,EAAE,wBAAwB,GAAG,SAAS,CAAC;IAC7C;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACpC;AA4CD;;;GAGG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,qBAAqB,EAC/B,EAAE,EAAE,MAAM,GACT,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,SAAS,CAGtC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,6BAA6B,CAAC,CAAC,SAAS,gBAAgB,EAAE,CAAC,GAAG,OAAO,EACnF,GAAG,EAAE,CAAC,EACN,IAAI,EAAE,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,EAC5C,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,oBAAoB,GAAG,SAAS,CA4BlC;AAqJD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,gCAAgC,CAAC,CAAC,SAAS,gBAAgB,EAAE,CAAC,GAAG,OAAO,EACtF,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,EACvB,IAAI,CAAC,EAAE,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,GAChC,qBAAqB,CAuBvB;AAED,yDAAyD;AACzD,wBAAgB,0BAA0B,IAAI,qBAAqB,CAElE"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import type { Id, NormalizedValue, NumericSearchMetadata, SearchableData, SearchableObject, SearchOpts } from '../../types';
|
|
2
|
+
/**
|
|
3
|
+
* Kandidat pri masovnem uparjanju: zapis desne strani z oceno in domenskimi razredi.
|
|
4
|
+
*/
|
|
5
|
+
export interface MatchManyKandidat<T extends SearchableObject> {
|
|
6
|
+
id: Id;
|
|
7
|
+
item: T;
|
|
8
|
+
/** Ocena jedra (`scoreOne`) ali domenska ocena, če je podana `rank`. */
|
|
9
|
+
score: number;
|
|
10
|
+
/** Domenski razredi kandidata (`metadata.classes`), če jih ima. */
|
|
11
|
+
classes?: Record<string, string[]>;
|
|
12
|
+
}
|
|
13
|
+
/** Rezultat za en element leve strani. */
|
|
14
|
+
export interface MatchManyRezultat<T extends SearchableObject> {
|
|
15
|
+
/** ID elementa leve strani (kot ga vrne `idOf`). */
|
|
16
|
+
id: string;
|
|
17
|
+
/** Razredi poizvedbe, če jih je vrnil `queryOf`. */
|
|
18
|
+
queryClasses?: Record<string, string[]>;
|
|
19
|
+
/** Kandidati, urejeni padajoče po oceni (največ `limit`). */
|
|
20
|
+
kandidati: MatchManyKandidat<T>[];
|
|
21
|
+
}
|
|
22
|
+
/** Nastavitve masovnega uparjanja. */
|
|
23
|
+
export interface MatchManyOptions<T extends SearchableObject, TQuery> {
|
|
24
|
+
/**
|
|
25
|
+
* Besedilo poizvedbe za en element leve strani; lahko vrne tudi razrede
|
|
26
|
+
* (`{ text, classes }`), ki jih dobi domenski ocenjevalec.
|
|
27
|
+
*/
|
|
28
|
+
queryOf: (query: TQuery) => string | NormalizedValue;
|
|
29
|
+
/** ID elementa leve strani (privzeto `_id`, nato `id`, nazadnje zaporedna številka). */
|
|
30
|
+
idOf?: (query: TQuery, indeks: number) => string;
|
|
31
|
+
/** Največ kandidatov na element (privzeto 3). */
|
|
32
|
+
limit?: number;
|
|
33
|
+
/**
|
|
34
|
+
* Koliko kandidatov preberemo iz jedra, PREDEN jih oceni domenski `rank`/`accept`.
|
|
35
|
+
* Privzeto `max(20, limit * 4)`: domenski ocenjevalec pogosto prerazporedi
|
|
36
|
+
* kandidate, zato mora videti širši nabor od končnega `limit`.
|
|
37
|
+
*/
|
|
38
|
+
retrievalLimit?: number;
|
|
39
|
+
/** Spodnji prag ocene (privzeto 0). */
|
|
40
|
+
minScore?: number;
|
|
41
|
+
/** Koliko elementov na kos izhodnega iteratorja (privzeto 50). */
|
|
42
|
+
kos?: number;
|
|
43
|
+
/**
|
|
44
|
+
* Poželjiva 1:1 dodelitev: vsak kandidat (element desne strani) se porabi
|
|
45
|
+
* največ enkrat. Uporabno za množične uvoze; iterator je treba porabljati
|
|
46
|
+
* po vrsti, ker se odločitve sprejemajo sproti.
|
|
47
|
+
*/
|
|
48
|
+
samoEnolicno?: boolean;
|
|
49
|
+
/** Vrstni red po elementih leve strani (privzeto podan vrstni red). */
|
|
50
|
+
primaryTextOf?: (item: T) => string | undefined;
|
|
51
|
+
/** Natančni ključi kandidata (npr. črtna koda) za `+100000` bonus. */
|
|
52
|
+
exactKeysOf?: (item: T) => readonly string[] | undefined;
|
|
53
|
+
/** Domenska ocena: če podana, zamenja jedrno oceno. */
|
|
54
|
+
rank?: (kandidat: {
|
|
55
|
+
id: Id;
|
|
56
|
+
item: T;
|
|
57
|
+
classes?: Record<string, string[]>;
|
|
58
|
+
}, poizvedba: {
|
|
59
|
+
text: string;
|
|
60
|
+
classes?: Record<string, string[]>;
|
|
61
|
+
}) => number;
|
|
62
|
+
/** Domenski sprejem: če podana, se nesprejeti kandidati izločijo. */
|
|
63
|
+
accept?: (kandidat: {
|
|
64
|
+
id: Id;
|
|
65
|
+
item: T;
|
|
66
|
+
classes?: Record<string, string[]>;
|
|
67
|
+
}, poizvedba: {
|
|
68
|
+
text: string;
|
|
69
|
+
classes?: Record<string, string[]>;
|
|
70
|
+
}) => boolean;
|
|
71
|
+
/** Dodatne iskalne nastavitve (načini ujemanja, normalizatorji poizvedbe). */
|
|
72
|
+
opts?: SearchOpts;
|
|
73
|
+
/**
|
|
74
|
+
* Nadomestne poizvedbe, ki se poskusijo, kadar glavna poizvedba ne vrne NOBENEGA
|
|
75
|
+
* kandidata (po `accept`). Uporablja domena, kadar zna poizvedbo zožiti
|
|
76
|
+
* (npr. izpust najmanj informativnih besed); vsaka varianta gre skozi isto
|
|
77
|
+
* iskanje in ocenjevanje, zato se natančnost ne more poslabšati.
|
|
78
|
+
*/
|
|
79
|
+
alternativnePoizvedbe?: (query: TQuery) => readonly (string | NormalizedValue)[];
|
|
80
|
+
/**
|
|
81
|
+
* Kadar je `true`, se nadomestne poizvedbe poskusijo le, če prva ni vrnila
|
|
82
|
+
* NOBENEGA zadetka (ne pa tudi, kadar so bili vsi zavrnjeni s `accept`).
|
|
83
|
+
* Privzeto `false` (več priklica, počasneje).
|
|
84
|
+
*/
|
|
85
|
+
alternativneLeCeNiZadetkov?: boolean;
|
|
86
|
+
}
|
|
87
|
+
/** Pripravljen indeks ene strani (`data` + `metadata`). */
|
|
88
|
+
export interface PreparedCollection<T extends SearchableObject> {
|
|
89
|
+
data: SearchableData<T>;
|
|
90
|
+
metadata: NumericSearchMetadata;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Masovno uparjanje: indeks ene strani, elementi druge strani kot poizvedbe.
|
|
94
|
+
*
|
|
95
|
+
* 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
|
+
* element vrne največ `limit` kandidatov nad `minScore`, urejenih padajoče.
|
|
98
|
+
*
|
|
99
|
+
* Uporablja isto iskalno logiko kot `searchAndRank` (retrieval po `metadata.sorted`
|
|
100
|
+
* z AND-ujemanjem + ocena po `metadata.unsorted`), zato so rezultati skladni z
|
|
101
|
+
* 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
|
+
*/
|
|
110
|
+
export declare function matchMany<T extends SearchableObject, TQuery>(prepared: PreparedCollection<T>, queries: readonly TQuery[], options: MatchManyOptions<T, TQuery>): AsyncGenerator<MatchManyRezultat<T>[], void, void>;
|
|
111
|
+
//# sourceMappingURL=matchMany.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matchMany.d.ts","sourceRoot":"","sources":["../../../src/common/numeric/matchMany.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,10 +5,34 @@ export interface PreparedQueryVariants {
|
|
|
5
5
|
rawTokenStrs: string[];
|
|
6
6
|
rawTokens: PreparedQueryToken[];
|
|
7
7
|
phoneTokens: PreparedQueryToken[][];
|
|
8
|
+
/** Dopolnilni razredi, ki jih vrnejo `opts.queryNormalizers` (npr. `razpon`). */
|
|
9
|
+
classes: Record<string, string[]>;
|
|
8
10
|
}
|
|
11
|
+
/**
|
|
12
|
+
* Uporabi domenske normalizatorje poizvedbe (`opts.queryNormalizers`) in vrne
|
|
13
|
+
* kanonično besedilo + domenske razrede poizvedbe.
|
|
14
|
+
*
|
|
15
|
+
* Klicoči to uporabi, kadar mora iste razrede primerjati s kandidatovimi
|
|
16
|
+
* (`itemClasses(metadata, id)`) — npr. domenski ocenjevalec, ki enak razpon
|
|
17
|
+
* nagradi, nasprotnega pa kaznuje. Iskalne funkcije normalizatorje uporabijo
|
|
18
|
+
* samodejno; ta funkcija je za ocenjevalce.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```typescript
|
|
22
|
+
* const { text, classes } = normalizeQueryWithOpts('Nexgard 15-30 kg', opts);
|
|
23
|
+
* // classes.razpon === ['15-30']
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export declare function normalizeQueryWithOpts(query: string, opts?: SearchOpts): {
|
|
27
|
+
text: string;
|
|
28
|
+
classes: Record<string, string[]>;
|
|
29
|
+
};
|
|
9
30
|
/**
|
|
10
31
|
* Produces deduplicated phone alternatives without changing ordinary query tokens.
|
|
11
32
|
*
|
|
33
|
+
* Domain normalizers (`opts.queryNormalizers`) run FIRST, so both the ordinary
|
|
34
|
+
* tokens and the phone variants see the canonical text.
|
|
35
|
+
*
|
|
12
36
|
* @feature [phone-search]
|
|
13
37
|
*/
|
|
14
38
|
export declare function prepareQueryVariants(query: string, opts?: SearchOpts): PreparedQueryVariants;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepareQueryVariants.d.ts","sourceRoot":"","sources":["../../../src/common/numeric/prepareQueryVariants.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAIxE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,0EAA0E;AAC1E,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,kBAAkB,EAAE,CAAC;IAChC,WAAW,EAAE,kBAAkB,EAAE,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"prepareQueryVariants.d.ts","sourceRoot":"","sources":["../../../src/common/numeric/prepareQueryVariants.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAIxE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,0EAA0E;AAC1E,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,kBAAkB,EAAE,CAAC;IAChC,WAAW,EAAE,kBAAkB,EAAE,EAAE,CAAC;IACpC,iFAAiF;IACjF,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACnC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,UAAU,GAChB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;CAAE,CAyBrD;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,qBAAqB,CAoB5F"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"searchAndRank.d.ts","sourceRoot":"","sources":["../../../src/common/numeric/searchAndRank.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,EAAE,EACF,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EAChB,UAAU,EACX,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"searchAndRank.d.ts","sourceRoot":"","sources":["../../../src/common/numeric/searchAndRank.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,EAAE,EACF,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EAChB,UAAU,EACX,MAAM,aAAa,CAAC;AAOrB,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACvF,YAAY,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AAgBzD;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC,SAAS,gBAAgB;IACtD,EAAE,EAAE,EAAE,CAAC;IACP,IAAI,EAAE,CAAC,CAAC;IACR,sEAAsE;IACtE,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB,CAAC,CAAC,SAAS,gBAAgB;IAC9D;;;;OAIG;IACH,aAAa,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,GAAG,SAAS,CAAC;IAC/C;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IACzD,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,gBAAgB,EAC7D,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,EACvB,QAAQ,EAAE,qBAAqB,EAC/B,OAAO,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAC/B,YAAY,CAAC,CAAC,CAAC,EAAE,CAmCnB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"searchInData.d.ts","sourceRoot":"","sources":["../../../src/common/numeric/searchInData.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,EAAE,EACF,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EAChB,UAAU,EACX,MAAM,aAAa,CAAC;AAMrB;;;;;;;;;;;;GAYG;AACH,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,qBAAqB,EAC/B,IAAI,CAAC,EAAE,UAAU,GAChB,EAAE,EAAE,CAEN;AAED;;;;;;;;GAQG;AACH,wBAAgB,gCAAgC,CAAC,CAAC,SAAS,gBAAgB,EACzE,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,qBAAqB,EAC/B,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,EACvB,IAAI,CAAC,EAAE,UAAU,GAChB,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAYZ;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,qCAAqC,CACnD,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,qBAAqB,EAC/B,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,UAAU,GAChB,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"searchInData.d.ts","sourceRoot":"","sources":["../../../src/common/numeric/searchInData.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,EAAE,EACF,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EAChB,UAAU,EACX,MAAM,aAAa,CAAC;AAMrB;;;;;;;;;;;;GAYG;AACH,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,qBAAqB,EAC/B,IAAI,CAAC,EAAE,UAAU,GAChB,EAAE,EAAE,CAEN;AAED;;;;;;;;GAQG;AACH,wBAAgB,gCAAgC,CAAC,CAAC,SAAS,gBAAgB,EACzE,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,qBAAqB,EAC/B,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,EACvB,IAAI,CAAC,EAAE,UAAU,GAChB,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAYZ;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,qCAAqC,CACnD,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,qBAAqB,EAC/B,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,UAAU,GAChB,EAAE,EAAE,CA8CN"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"syncSearchArrayMetadata.d.ts","sourceRoot":"","sources":["../../../src/common/numeric/syncSearchArrayMetadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EAGpB,UAAU,EACV,WAAW,EACZ,MAAM,sBAAsB,CAAA;AAK7B,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"syncSearchArrayMetadata.d.ts","sourceRoot":"","sources":["../../../src/common/numeric/syncSearchArrayMetadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EAGpB,UAAU,EACV,WAAW,EACZ,MAAM,sBAAsB,CAAA;AAK7B,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AA4CnE;;;;;;;;;GASG;AACH,wBAAgB,8BAA8B,CAAC,CAAC,SAAS,gBAAgB,EAAE,CAAC,GAAG,OAAO,EACpF,QAAQ,EAAE,qBAAqB,EAC/B,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,EAC1B,IAAI,CAAC,EAAE,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,GAChC,UAAU,CAqDZ;AAED;;;;;GAKG;AACH,wBAAgB,0CAA0C,CAAC,CAAC,SAAS,gBAAgB,EAAE,CAAC,GAAG,OAAO,EAChG,QAAQ,EAAE,qBAAqB,EAC/B,YAAY,EAAE,cAAc,CAAC,CAAC,CAAC,EAC/B,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,EAC1B,OAAO,CAAC,EAAE,WAAW,EACrB,IAAI,CAAC,EAAE,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,GAChC,UAAU,CAsDZ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updateSearchMetadata.d.ts","sourceRoot":"","sources":["../../../src/common/numeric/updateSearchMetadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,EAAE,EACF,qBAAqB,EACrB,gBAAgB,EAChB,oBAAoB,EACpB,6BAA6B,EAC9B,MAAM,aAAa,CAAC;AAIrB;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,2BAA2B,CAAC,CAAC,SAAS,gBAAgB,EAAE,CAAC,GAAG,OAAO,EACjF,QAAQ,EAAE,qBAAqB,EAC/B,QAAQ,EAAE,EAAE,EACZ,GAAG,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,EACzB,IAAI,EAAE,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,EAC5C,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,OAAO,
|
|
1
|
+
{"version":3,"file":"updateSearchMetadata.d.ts","sourceRoot":"","sources":["../../../src/common/numeric/updateSearchMetadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,EAAE,EACF,qBAAqB,EACrB,gBAAgB,EAChB,oBAAoB,EACpB,6BAA6B,EAC9B,MAAM,aAAa,CAAC;AAIrB;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,2BAA2B,CAAC,CAAC,SAAS,gBAAgB,EAAE,CAAC,GAAG,OAAO,EACjF,QAAQ,EAAE,qBAAqB,EAC/B,QAAQ,EAAE,EAAE,EACZ,GAAG,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,EACzB,IAAI,EAAE,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,EAC5C,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,OAAO,CAuBT;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,gCAAgC,CAAC,CAAC,SAAS,gBAAgB,EAAE,CAAC,GAAG,OAAO,EACtF,QAAQ,EAAE,qBAAqB,EAC/B,KAAK,EAAE,6BAA6B,CAAC,CAAC,CAAC,EAAE,EACzC,IAAI,CAAC,EAAE,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,GAChC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CA0BtC;AAED;;;;;;GAMG;AACH,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,qBAAqB,EAC/B,QAAQ,EAAE,EAAE,GACX,OAAO,CAIT;AAED;;;;;;GAMG;AACH,wBAAgB,oCAAoC,CAClD,QAAQ,EAAE,qBAAqB,EAC/B,SAAS,EAAE,EAAE,EAAE,GACd,MAAM,CAYR"}
|