@memberjunction/search-engine 6.1.4 → 6.2.0-edge.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/README.md +101 -0
- package/dist/generic/EntitySearchProvider.d.ts +26 -0
- package/dist/generic/EntitySearchProvider.d.ts.map +1 -1
- package/dist/generic/EntitySearchProvider.js +40 -6
- package/dist/generic/EntitySearchProvider.js.map +1 -1
- package/dist/generic/FullTextSearchProvider.js +2 -2
- package/dist/generic/SearchEngine.d.ts +3 -2
- package/dist/generic/SearchEngine.d.ts.map +1 -1
- package/dist/generic/SearchEngine.js +14 -8
- package/dist/generic/SearchEngine.js.map +1 -1
- package/dist/generic/SearchEnricher.d.ts +15 -7
- package/dist/generic/SearchEnricher.d.ts.map +1 -1
- package/dist/generic/SearchEnricher.js +164 -34
- package/dist/generic/SearchEnricher.js.map +1 -1
- package/dist/generic/SearchFusion.d.ts.map +1 -1
- package/dist/generic/SearchFusion.js +10 -1
- package/dist/generic/SearchFusion.js.map +1 -1
- package/dist/generic/TagSearchProvider.d.ts +72 -0
- package/dist/generic/TagSearchProvider.d.ts.map +1 -0
- package/dist/generic/TagSearchProvider.js +425 -0
- package/dist/generic/TagSearchProvider.js.map +1 -0
- package/dist/generic/VectorSearchProvider.d.ts +3 -3
- package/dist/generic/VectorSearchProvider.d.ts.map +1 -1
- package/dist/generic/VectorSearchProvider.js +17 -14
- package/dist/generic/VectorSearchProvider.js.map +1 -1
- package/dist/generic/env-config.d.ts +2 -0
- package/dist/generic/env-config.d.ts.map +1 -1
- package/dist/generic/env-config.js +5 -1
- package/dist/generic/env-config.js.map +1 -1
- package/dist/generic/search.types.d.ts +7 -1
- package/dist/generic/search.types.d.ts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/providers/ElasticsearchSearchProvider.d.ts +2 -0
- package/dist/providers/ElasticsearchSearchProvider.d.ts.map +1 -1
- package/dist/providers/ElasticsearchSearchProvider.js +5 -1
- package/dist/providers/ElasticsearchSearchProvider.js.map +1 -1
- package/dist/rerankers/BGEReRanker.d.ts +2 -0
- package/dist/rerankers/BGEReRanker.d.ts.map +1 -1
- package/dist/rerankers/BGEReRanker.js +5 -1
- package/dist/rerankers/BGEReRanker.js.map +1 -1
- package/dist/rerankers/OpenAIReRanker.d.ts.map +1 -1
- package/dist/rerankers/OpenAIReRanker.js +20 -4
- package/dist/rerankers/OpenAIReRanker.js.map +1 -1
- package/dist/rerankers/VoyageReRanker.d.ts.map +1 -1
- package/dist/rerankers/VoyageReRanker.js +10 -2
- package/dist/rerankers/VoyageReRanker.js.map +1 -1
- package/package.json +9 -8
|
@@ -132,10 +132,19 @@ export class SearchFusion {
|
|
|
132
132
|
const preferred = existing.SourceType === 'entity' ? existing :
|
|
133
133
|
result.SourceType === 'entity' ? result :
|
|
134
134
|
result.Score > existing.Score ? result : existing;
|
|
135
|
+
const mergedTags = Array.from(new Set([...(existing.Tags ?? []), ...(result.Tags ?? [])]));
|
|
136
|
+
const other = preferred === existing ? result : existing;
|
|
137
|
+
let snippet = preferred.Snippet;
|
|
138
|
+
const isGeneric = (s) => !s || s === 'Matched record' || s.startsWith('Matched in ');
|
|
139
|
+
if (isGeneric(snippet) && !isGeneric(other.Snippet)) {
|
|
140
|
+
snippet = other.Snippet;
|
|
141
|
+
}
|
|
135
142
|
seen.set(key, {
|
|
136
143
|
...preferred,
|
|
144
|
+
Snippet: snippet,
|
|
137
145
|
Score: maxScore,
|
|
138
|
-
ScoreBreakdown: mergedBreakdown
|
|
146
|
+
ScoreBreakdown: mergedBreakdown,
|
|
147
|
+
Tags: mergedTags
|
|
139
148
|
});
|
|
140
149
|
}
|
|
141
150
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchFusion.js","sourceRoot":"","sources":["../../src/generic/SearchFusion.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"SearchFusion.js","sourceRoot":"","sources":["../../src/generic/SearchFusion.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Tag search provider using TagEngineBase and RunView.
|
|
3
|
+
*
|
|
4
|
+
* Matches search queries against the taxonomy graph (tags and synonyms)
|
|
5
|
+
* and retrieves the associated records from MJ: Tagged Items (and
|
|
6
|
+
* MJ: Content Item Tags), weighted by the tag match confidence multiplied
|
|
7
|
+
* by the tagged item's continuous relevance weight (0.0 to 1.0).
|
|
8
|
+
*
|
|
9
|
+
* @module @memberjunction/search-engine
|
|
10
|
+
*/
|
|
11
|
+
import { UserInfo } from '@memberjunction/core';
|
|
12
|
+
import { BaseSearchProvider, SearchProviderConfig } from './ISearchProvider.js';
|
|
13
|
+
import { SearchFilters, SearchResultItem, SearchSource, ScopeConstraints } from './search.types.js';
|
|
14
|
+
/**
|
|
15
|
+
* Provides tag-weighted record search.
|
|
16
|
+
* Matches search terms against taxonomy tags and synonyms, then retrieves
|
|
17
|
+
* records linked via MJ: Tagged Items and MJ: Content Item Tags.
|
|
18
|
+
*/
|
|
19
|
+
export declare class TagSearchProvider extends BaseSearchProvider {
|
|
20
|
+
readonly SourceType: SearchSource;
|
|
21
|
+
/**
|
|
22
|
+
* Minimum query length to evaluate for tag matching.
|
|
23
|
+
*/
|
|
24
|
+
private static readonly MIN_TERM_LENGTH;
|
|
25
|
+
/**
|
|
26
|
+
* Initialize the provider and ensure TagEngineBase is loaded.
|
|
27
|
+
*/
|
|
28
|
+
Initialize(config: SearchProviderConfig, contextUser: UserInfo): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Check whether the provider is operational by verifying tag taxonomy availability.
|
|
31
|
+
*/
|
|
32
|
+
CheckAvailability(contextUser: UserInfo): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Whether this provider is available.
|
|
35
|
+
* Available when TagEngineBase has at least one tag configured.
|
|
36
|
+
*/
|
|
37
|
+
IsAvailable(): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Execute a tag-weighted search.
|
|
40
|
+
*
|
|
41
|
+
* 1. Matches query terms to active tags in the taxonomy graph (including synonyms).
|
|
42
|
+
* 2. If no tags match, immediately returns [] (zero database overhead).
|
|
43
|
+
* 3. Retrieves records linked to matched tags via `MJ: Tagged Items` (and `MJ: Content Item Tags`).
|
|
44
|
+
* 4. Multiplies tag match confidence by tagged item weight to produce final relevance score.
|
|
45
|
+
*
|
|
46
|
+
* @param query - The search query text
|
|
47
|
+
* @param topK - Maximum number of results to return
|
|
48
|
+
* @param filters - Optional filters (e.g. EntityNames to restrict scope)
|
|
49
|
+
* @param contextUser - The user performing the search
|
|
50
|
+
* @param scopeConstraints - Optional per-scope constraints
|
|
51
|
+
*/
|
|
52
|
+
Search(query: string, topK: number, filters: SearchFilters | undefined, contextUser: UserInfo, scopeConstraints?: ScopeConstraints): Promise<SearchResultItem[]>;
|
|
53
|
+
/**
|
|
54
|
+
* Matches the search query text against active tags and tag synonyms.
|
|
55
|
+
* Returns matching tags sorted by confidence descending.
|
|
56
|
+
*/
|
|
57
|
+
private matchQueryToTags;
|
|
58
|
+
/**
|
|
59
|
+
* Resolves the set of entity names eligible to return records.
|
|
60
|
+
* Respects AllowUserSearchAPI, taxonomy exclusions, and search filters.
|
|
61
|
+
*/
|
|
62
|
+
private resolveAllowedEntities;
|
|
63
|
+
/**
|
|
64
|
+
* Queries MJ: Tagged Items for records associated with the matched tags.
|
|
65
|
+
*/
|
|
66
|
+
private searchTaggedItems;
|
|
67
|
+
/**
|
|
68
|
+
* Queries MJ: Content Item Tags if MJ: Content Items is an allowed entity.
|
|
69
|
+
*/
|
|
70
|
+
private searchContentItemTags;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=TagSearchProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TagSearchProvider.d.ts","sourceRoot":"","sources":["../../src/generic/TagSearchProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAKH,QAAQ,EACX,MAAM,sBAAsB,CAAC;AAI9B,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EACH,aAAa,EACb,gBAAgB,EAEhB,YAAY,EACZ,gBAAgB,EACnB,MAAM,gBAAgB,CAAC;AAwCxB;;;;GAIG;AACH,qBACa,iBAAkB,SAAQ,kBAAkB;IACrD,SAAgB,UAAU,EAAE,YAAY,CAAS;IAEjD;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAK;IAE5C;;OAEG;IACmB,UAAU,CAAC,MAAM,EAAE,oBAAoB,EAAE,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAUpG;;OAEG;IACmB,iBAAiB,CAAC,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAS7E;;;OAGG;IACa,WAAW,IAAI,OAAO;IAItC;;;;;;;;;;;;;OAaG;IACU,MAAM,CACf,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,aAAa,GAAG,SAAS,EAClC,WAAW,EAAE,QAAQ,EACrB,gBAAgB,CAAC,EAAE,gBAAgB,GACpC,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAoF9B;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAyFxB;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAoB9B;;OAEG;YACW,iBAAiB;IAoF/B;;OAEG;YACW,qBAAqB;CA8EtC"}
|
|
@@ -0,0 +1,425 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Tag search provider using TagEngineBase and RunView.
|
|
3
|
+
*
|
|
4
|
+
* Matches search queries against the taxonomy graph (tags and synonyms)
|
|
5
|
+
* and retrieves the associated records from MJ: Tagged Items (and
|
|
6
|
+
* MJ: Content Item Tags), weighted by the tag match confidence multiplied
|
|
7
|
+
* by the tagged item's continuous relevance weight (0.0 to 1.0).
|
|
8
|
+
*
|
|
9
|
+
* @module @memberjunction/search-engine
|
|
10
|
+
*/
|
|
11
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
12
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
13
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
14
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
15
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
16
|
+
};
|
|
17
|
+
var TagSearchProvider_1;
|
|
18
|
+
import { LogError, RunView } from '@memberjunction/core';
|
|
19
|
+
import { RegisterClass } from '@memberjunction/global';
|
|
20
|
+
import { TagEngineBase } from '@memberjunction/tag-engine-base';
|
|
21
|
+
import { BaseSearchProvider } from './ISearchProvider.js';
|
|
22
|
+
/**
|
|
23
|
+
* Taxonomy entity names that must never be surfaced as direct search results.
|
|
24
|
+
*/
|
|
25
|
+
const TAXONOMY_ENTITIES = new Set([
|
|
26
|
+
'mj: tags',
|
|
27
|
+
'mj: tagged items',
|
|
28
|
+
'mj: tag synonyms',
|
|
29
|
+
'mj: tag scopes',
|
|
30
|
+
'mj: tag co-occurrences',
|
|
31
|
+
]);
|
|
32
|
+
/**
|
|
33
|
+
* Escape special regex characters in a query token.
|
|
34
|
+
*/
|
|
35
|
+
function escapeRegex(str) {
|
|
36
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Provides tag-weighted record search.
|
|
40
|
+
* Matches search terms against taxonomy tags and synonyms, then retrieves
|
|
41
|
+
* records linked via MJ: Tagged Items and MJ: Content Item Tags.
|
|
42
|
+
*/
|
|
43
|
+
let TagSearchProvider = class TagSearchProvider extends BaseSearchProvider {
|
|
44
|
+
constructor() {
|
|
45
|
+
super(...arguments);
|
|
46
|
+
this.SourceType = 'tag';
|
|
47
|
+
}
|
|
48
|
+
static { TagSearchProvider_1 = this; }
|
|
49
|
+
/**
|
|
50
|
+
* Minimum query length to evaluate for tag matching.
|
|
51
|
+
*/
|
|
52
|
+
static { this.MIN_TERM_LENGTH = 2; }
|
|
53
|
+
/**
|
|
54
|
+
* Initialize the provider and ensure TagEngineBase is loaded.
|
|
55
|
+
*/
|
|
56
|
+
async Initialize(config, contextUser) {
|
|
57
|
+
await super.Initialize(config, contextUser);
|
|
58
|
+
try {
|
|
59
|
+
await TagEngineBase.Instance.EnsureLoaded(contextUser, this.Provider);
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
63
|
+
LogError(`TagSearchProvider: Failed to initialize TagEngineBase: ${msg}`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Check whether the provider is operational by verifying tag taxonomy availability.
|
|
68
|
+
*/
|
|
69
|
+
async CheckAvailability(contextUser) {
|
|
70
|
+
try {
|
|
71
|
+
await TagEngineBase.Instance.EnsureLoaded(contextUser, this.Provider);
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
75
|
+
LogError(`TagSearchProvider: CheckAvailability failed: ${msg}`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Whether this provider is available.
|
|
80
|
+
* Available when TagEngineBase has at least one tag configured.
|
|
81
|
+
*/
|
|
82
|
+
IsAvailable() {
|
|
83
|
+
return TagEngineBase.Instance.Tags.length > 0;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Execute a tag-weighted search.
|
|
87
|
+
*
|
|
88
|
+
* 1. Matches query terms to active tags in the taxonomy graph (including synonyms).
|
|
89
|
+
* 2. If no tags match, immediately returns [] (zero database overhead).
|
|
90
|
+
* 3. Retrieves records linked to matched tags via `MJ: Tagged Items` (and `MJ: Content Item Tags`).
|
|
91
|
+
* 4. Multiplies tag match confidence by tagged item weight to produce final relevance score.
|
|
92
|
+
*
|
|
93
|
+
* @param query - The search query text
|
|
94
|
+
* @param topK - Maximum number of results to return
|
|
95
|
+
* @param filters - Optional filters (e.g. EntityNames to restrict scope)
|
|
96
|
+
* @param contextUser - The user performing the search
|
|
97
|
+
* @param scopeConstraints - Optional per-scope constraints
|
|
98
|
+
*/
|
|
99
|
+
async Search(query, topK, filters, contextUser, scopeConstraints) {
|
|
100
|
+
const trimmed = (query ?? '').trim();
|
|
101
|
+
if (trimmed.length < TagSearchProvider_1.MIN_TERM_LENGTH || topK <= 0) {
|
|
102
|
+
return [];
|
|
103
|
+
}
|
|
104
|
+
try {
|
|
105
|
+
// Honor per-provider query transform if supplied
|
|
106
|
+
const rawQuery = scopeConstraints?.QueryTransforms?.[this.SourceType] ?? query;
|
|
107
|
+
const effectiveQuery = rawQuery.trim();
|
|
108
|
+
if (effectiveQuery.length < TagSearchProvider_1.MIN_TERM_LENGTH) {
|
|
109
|
+
return [];
|
|
110
|
+
}
|
|
111
|
+
// Ensure TagEngineBase is loaded
|
|
112
|
+
await TagEngineBase.Instance.EnsureLoaded(contextUser, this.Provider);
|
|
113
|
+
// Step 1: Match query against taxonomy tags and synonyms
|
|
114
|
+
const matchedTags = this.matchQueryToTags(effectiveQuery);
|
|
115
|
+
if (matchedTags.length === 0) {
|
|
116
|
+
return [];
|
|
117
|
+
}
|
|
118
|
+
// Step 2: Determine allowed searchable entities
|
|
119
|
+
const md = this.Provider;
|
|
120
|
+
const allowedEntityNames = this.resolveAllowedEntities(md, filters, scopeConstraints);
|
|
121
|
+
if (allowedEntityNames.size === 0) {
|
|
122
|
+
return [];
|
|
123
|
+
}
|
|
124
|
+
// Step 3: Retrieve tagged records from MJ: Tagged Items and MJ: Content Item Tags
|
|
125
|
+
const candidateMap = new Map();
|
|
126
|
+
await Promise.all([
|
|
127
|
+
this.searchTaggedItems(matchedTags, allowedEntityNames, topK, contextUser, candidateMap),
|
|
128
|
+
this.searchContentItemTags(matchedTags, allowedEntityNames, topK, contextUser, candidateMap)
|
|
129
|
+
]);
|
|
130
|
+
if (candidateMap.size === 0) {
|
|
131
|
+
return [];
|
|
132
|
+
}
|
|
133
|
+
// Step 4: Convert candidate records to SearchResultItems
|
|
134
|
+
const results = [];
|
|
135
|
+
for (const candidate of candidateMap.values()) {
|
|
136
|
+
if (candidate.bestScore <= 0 || !candidate.recordID) {
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
const entityInfo = md.EntityByName(candidate.entityName);
|
|
140
|
+
const entityDisplayName = entityInfo?.DisplayName || candidate.entityName;
|
|
141
|
+
const tagNames = candidate.tags.map(t => t.name);
|
|
142
|
+
const snippet = candidate.tags.length === 1
|
|
143
|
+
? `Tagged with "${candidate.tags[0].name}" (${Math.round(candidate.tags[0].weight * 100)}% relevance)`
|
|
144
|
+
: `Tagged with ` + candidate.tags.map(t => `"${t.name}" (${Math.round(t.weight * 100)}%)`).join(', ');
|
|
145
|
+
results.push({
|
|
146
|
+
ID: candidate.recordID,
|
|
147
|
+
EntityName: candidate.entityName,
|
|
148
|
+
EntityDisplayName: entityDisplayName,
|
|
149
|
+
RecordID: candidate.recordID,
|
|
150
|
+
SourceType: 'tag',
|
|
151
|
+
ResultType: 'entity-record',
|
|
152
|
+
Title: `${entityDisplayName} Record`,
|
|
153
|
+
Snippet: snippet,
|
|
154
|
+
Score: candidate.bestScore,
|
|
155
|
+
ScoreBreakdown: {
|
|
156
|
+
Tag: candidate.bestScore
|
|
157
|
+
},
|
|
158
|
+
Tags: tagNames,
|
|
159
|
+
EntityIcon: entityInfo?.Icon ?? undefined,
|
|
160
|
+
MatchedAt: new Date()
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
// Sort by score descending and return topK
|
|
164
|
+
results.sort((a, b) => b.Score - a.Score);
|
|
165
|
+
return results.slice(0, topK);
|
|
166
|
+
}
|
|
167
|
+
catch (error) {
|
|
168
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
169
|
+
LogError(`TagSearchProvider: Search failed: ${msg}`);
|
|
170
|
+
return [];
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Matches the search query text against active tags and tag synonyms.
|
|
175
|
+
* Returns matching tags sorted by confidence descending.
|
|
176
|
+
*/
|
|
177
|
+
matchQueryToTags(query) {
|
|
178
|
+
const queryLower = query.toLowerCase();
|
|
179
|
+
const words = queryLower.split(/\s+/).filter(w => w.length >= 2);
|
|
180
|
+
const matched = new Map();
|
|
181
|
+
const addMatch = (tag, confidence, term) => {
|
|
182
|
+
if (tag.Status !== 'Active')
|
|
183
|
+
return;
|
|
184
|
+
const existing = matched.get(tag.ID);
|
|
185
|
+
if (!existing || confidence > existing.confidence) {
|
|
186
|
+
matched.set(tag.ID, { tag, confidence, matchedTerm: term });
|
|
187
|
+
}
|
|
188
|
+
};
|
|
189
|
+
const allTags = TagEngineBase.Instance.Tags;
|
|
190
|
+
// Tier 1: Check exact matches and word matches on Tag Name and DisplayName
|
|
191
|
+
for (const tag of allTags) {
|
|
192
|
+
if (tag.Status !== 'Active')
|
|
193
|
+
continue;
|
|
194
|
+
const nameLower = tag.Name.trim().toLowerCase();
|
|
195
|
+
const displayLower = (tag.DisplayName ?? '').trim().toLowerCase();
|
|
196
|
+
// Exact match on Name or DisplayName
|
|
197
|
+
if (nameLower === queryLower || displayLower === queryLower) {
|
|
198
|
+
addMatch(tag, 1.0, tag.DisplayName || tag.Name);
|
|
199
|
+
continue;
|
|
200
|
+
}
|
|
201
|
+
// Multi-word / token match: tag name equals one of the query words
|
|
202
|
+
if (words.includes(nameLower) || (displayLower && words.includes(displayLower))) {
|
|
203
|
+
addMatch(tag, 0.90, tag.DisplayName || tag.Name);
|
|
204
|
+
continue;
|
|
205
|
+
}
|
|
206
|
+
// Query contains tag name as a full word boundary
|
|
207
|
+
if (nameLower.length >= 3) {
|
|
208
|
+
const regex = new RegExp(`\\b${escapeRegex(nameLower)}\\b`, 'i');
|
|
209
|
+
if (regex.test(queryLower)) {
|
|
210
|
+
addMatch(tag, 0.90, tag.DisplayName || tag.Name);
|
|
211
|
+
continue;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
// Tag name contains query as a full word boundary (e.g. tag "Cheddar Cheese", query "Cheddar")
|
|
215
|
+
if (queryLower.length >= 3) {
|
|
216
|
+
const regex = new RegExp(`\\b${escapeRegex(queryLower)}\\b`, 'i');
|
|
217
|
+
if (regex.test(nameLower) || (displayLower && regex.test(displayLower))) {
|
|
218
|
+
addMatch(tag, 0.85, tag.DisplayName || tag.Name);
|
|
219
|
+
continue;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
// Substring containment fallback (minimum 3 chars to prevent noise)
|
|
223
|
+
if (queryLower.length >= 3 && nameLower.length >= 3) {
|
|
224
|
+
if (nameLower.includes(queryLower) || queryLower.includes(nameLower)) {
|
|
225
|
+
addMatch(tag, 0.75, tag.DisplayName || tag.Name);
|
|
226
|
+
continue;
|
|
227
|
+
}
|
|
228
|
+
if (displayLower && (displayLower.includes(queryLower) || queryLower.includes(displayLower))) {
|
|
229
|
+
addMatch(tag, 0.75, tag.DisplayName || tag.Name);
|
|
230
|
+
continue;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
// Tier 2: Check synonyms
|
|
235
|
+
const allSynonyms = TagEngineBase.Instance.TagSynonyms;
|
|
236
|
+
for (const syn of allSynonyms) {
|
|
237
|
+
const synText = (syn.Synonym ?? '').trim().toLowerCase();
|
|
238
|
+
if (!synText || !syn.TagID)
|
|
239
|
+
continue;
|
|
240
|
+
const tag = TagEngineBase.Instance.GetTagByID(syn.TagID);
|
|
241
|
+
if (!tag || tag.Status !== 'Active')
|
|
242
|
+
continue;
|
|
243
|
+
if (synText === queryLower) {
|
|
244
|
+
addMatch(tag, 1.0, syn.Synonym);
|
|
245
|
+
}
|
|
246
|
+
else if (words.includes(synText)) {
|
|
247
|
+
addMatch(tag, 0.85, syn.Synonym);
|
|
248
|
+
}
|
|
249
|
+
else if (synText.length >= 3 && queryLower.length >= 3) {
|
|
250
|
+
const regex = new RegExp(`\\b${escapeRegex(synText)}\\b`, 'i');
|
|
251
|
+
if (regex.test(queryLower)) {
|
|
252
|
+
addMatch(tag, 0.85, syn.Synonym);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
return Array.from(matched.values()).sort((a, b) => b.confidence - a.confidence);
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Resolves the set of entity names eligible to return records.
|
|
260
|
+
* Respects AllowUserSearchAPI, taxonomy exclusions, and search filters.
|
|
261
|
+
*/
|
|
262
|
+
resolveAllowedEntities(md, filters, scopeConstraints) {
|
|
263
|
+
let entities = md.Entities.filter(e => e.AllowUserSearchAPI && !TAXONOMY_ENTITIES.has(e.Name.toLowerCase()));
|
|
264
|
+
if (scopeConstraints?.Entities && scopeConstraints.Entities.length > 0) {
|
|
265
|
+
const scopedSet = new Set(scopeConstraints.Entities.map(e => e.EntityName.toLowerCase()));
|
|
266
|
+
entities = entities.filter(e => scopedSet.has(e.Name.toLowerCase()));
|
|
267
|
+
}
|
|
268
|
+
if (filters?.EntityNames && filters.EntityNames.length > 0) {
|
|
269
|
+
const filterSet = new Set(filters.EntityNames.map(n => n.toLowerCase()));
|
|
270
|
+
entities = entities.filter(e => filterSet.has(e.Name.toLowerCase()));
|
|
271
|
+
}
|
|
272
|
+
return new Set(entities.map(e => e.Name.toLowerCase()));
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Queries MJ: Tagged Items for records associated with the matched tags.
|
|
276
|
+
*/
|
|
277
|
+
async searchTaggedItems(matchedTags, allowedEntities, topK, contextUser, candidateMap) {
|
|
278
|
+
try {
|
|
279
|
+
// Take top 10 matched tags to keep SQL IN-clause compact
|
|
280
|
+
const topTags = matchedTags.slice(0, 10);
|
|
281
|
+
const tagMap = new Map();
|
|
282
|
+
for (const t of topTags) {
|
|
283
|
+
tagMap.set(t.tag.ID.toLowerCase(), t);
|
|
284
|
+
}
|
|
285
|
+
const tagIdList = topTags.map(t => `'${t.tag.ID}'`).join(',');
|
|
286
|
+
let filterClause = `TagID IN (${tagIdList})`;
|
|
287
|
+
// If a specific subset of entities was requested via filters, push down to SQL
|
|
288
|
+
const md = this.Provider;
|
|
289
|
+
if (allowedEntities.size < md.Entities.length) {
|
|
290
|
+
const entityValues = Array.from(allowedEntities).map(name => {
|
|
291
|
+
const entity = md.EntityByName(name);
|
|
292
|
+
const actualName = entity ? entity.Name : name;
|
|
293
|
+
return `'${actualName.replace(/'/g, "''")}'`;
|
|
294
|
+
}).join(',');
|
|
295
|
+
if (entityValues.length > 0) {
|
|
296
|
+
filterClause += ` AND Entity IN (${entityValues})`;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
const rv = new RunView();
|
|
300
|
+
const fetchLimit = Math.min(topK * 3, 100);
|
|
301
|
+
const rvResult = await rv.RunView({
|
|
302
|
+
EntityName: 'MJ: Tagged Items',
|
|
303
|
+
ExtraFilter: filterClause,
|
|
304
|
+
OrderBy: 'Weight DESC',
|
|
305
|
+
MaxRows: fetchLimit,
|
|
306
|
+
ResultType: 'entity_object'
|
|
307
|
+
}, contextUser);
|
|
308
|
+
if (!rvResult.Success || !rvResult.Results) {
|
|
309
|
+
if (!rvResult.Success) {
|
|
310
|
+
LogError(`TagSearchProvider: RunView failed on "MJ: Tagged Items": ${rvResult.ErrorMessage}`);
|
|
311
|
+
}
|
|
312
|
+
return;
|
|
313
|
+
}
|
|
314
|
+
for (const item of rvResult.Results) {
|
|
315
|
+
const entityName = item.Entity;
|
|
316
|
+
const recordID = item.RecordID;
|
|
317
|
+
if (!entityName || !recordID || !allowedEntities.has(entityName.toLowerCase())) {
|
|
318
|
+
continue;
|
|
319
|
+
}
|
|
320
|
+
const matchedTag = tagMap.get(item.TagID.toLowerCase());
|
|
321
|
+
const tagConfidence = matchedTag?.confidence ?? 0.85;
|
|
322
|
+
const tagName = matchedTag?.tag.DisplayName || matchedTag?.tag.Name || item.Tag || 'Tag';
|
|
323
|
+
const itemWeight = item.Weight != null ? Number(item.Weight) : 1.0;
|
|
324
|
+
const score = Math.round(tagConfidence * itemWeight * 100) / 100;
|
|
325
|
+
const key = `${entityName}::${recordID}`;
|
|
326
|
+
const existing = candidateMap.get(key);
|
|
327
|
+
if (!existing) {
|
|
328
|
+
candidateMap.set(key, {
|
|
329
|
+
id: recordID,
|
|
330
|
+
entityName,
|
|
331
|
+
recordID,
|
|
332
|
+
bestScore: score,
|
|
333
|
+
tags: [{ name: tagName, weight: itemWeight }]
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
else {
|
|
337
|
+
existing.bestScore = Math.max(existing.bestScore, score);
|
|
338
|
+
if (!existing.tags.some(t => t.name.toLowerCase() === tagName.toLowerCase())) {
|
|
339
|
+
existing.tags.push({ name: tagName, weight: itemWeight });
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
catch (error) {
|
|
345
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
346
|
+
LogError(`TagSearchProvider: searchTaggedItems error: ${msg}`);
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* Queries MJ: Content Item Tags if MJ: Content Items is an allowed entity.
|
|
351
|
+
*/
|
|
352
|
+
async searchContentItemTags(matchedTags, allowedEntities, topK, contextUser, candidateMap) {
|
|
353
|
+
if (!allowedEntities.has('mj: content items')) {
|
|
354
|
+
return;
|
|
355
|
+
}
|
|
356
|
+
try {
|
|
357
|
+
const topTags = matchedTags.slice(0, 10);
|
|
358
|
+
const tagLookup = new Map();
|
|
359
|
+
const tagNames = [];
|
|
360
|
+
for (const t of topTags) {
|
|
361
|
+
const n1 = t.tag.Name.trim();
|
|
362
|
+
const n2 = (t.tag.DisplayName ?? '').trim();
|
|
363
|
+
if (n1) {
|
|
364
|
+
tagNames.push(`'${n1.replace(/'/g, "''")}'`);
|
|
365
|
+
tagLookup.set(n1.toLowerCase(), t);
|
|
366
|
+
}
|
|
367
|
+
if (n2 && n2.toLowerCase() !== n1.toLowerCase()) {
|
|
368
|
+
tagNames.push(`'${n2.replace(/'/g, "''")}'`);
|
|
369
|
+
tagLookup.set(n2.toLowerCase(), t);
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
if (tagNames.length === 0)
|
|
373
|
+
return;
|
|
374
|
+
const rv = new RunView();
|
|
375
|
+
const fetchLimit = Math.min(topK * 3, 100);
|
|
376
|
+
const rvResult = await rv.RunView({
|
|
377
|
+
EntityName: 'MJ: Content Item Tags',
|
|
378
|
+
ExtraFilter: `Tag IN (${tagNames.join(',')})`,
|
|
379
|
+
OrderBy: 'Weight DESC',
|
|
380
|
+
MaxRows: fetchLimit,
|
|
381
|
+
ResultType: 'entity_object'
|
|
382
|
+
}, contextUser);
|
|
383
|
+
if (!rvResult.Success || !rvResult.Results) {
|
|
384
|
+
return;
|
|
385
|
+
}
|
|
386
|
+
for (const item of rvResult.Results) {
|
|
387
|
+
const recordID = item.ItemID;
|
|
388
|
+
if (!recordID)
|
|
389
|
+
continue;
|
|
390
|
+
const itemTag = item.Tag?.trim() ?? '';
|
|
391
|
+
const matchedTag = tagLookup.get(itemTag.toLowerCase());
|
|
392
|
+
const tagConfidence = matchedTag?.confidence ?? 1.0;
|
|
393
|
+
const itemWeight = item.Weight != null ? Number(item.Weight) : 1.0;
|
|
394
|
+
const score = Math.round(tagConfidence * itemWeight * 100) / 100;
|
|
395
|
+
const entityName = 'MJ: Content Items';
|
|
396
|
+
const key = `${entityName}::${recordID}`;
|
|
397
|
+
const existing = candidateMap.get(key);
|
|
398
|
+
if (!existing) {
|
|
399
|
+
candidateMap.set(key, {
|
|
400
|
+
id: recordID,
|
|
401
|
+
entityName,
|
|
402
|
+
recordID,
|
|
403
|
+
bestScore: score,
|
|
404
|
+
tags: [{ name: itemTag, weight: itemWeight }]
|
|
405
|
+
});
|
|
406
|
+
}
|
|
407
|
+
else {
|
|
408
|
+
existing.bestScore = Math.max(existing.bestScore, score);
|
|
409
|
+
if (!existing.tags.some(t => t.name.toLowerCase() === itemTag.toLowerCase())) {
|
|
410
|
+
existing.tags.push({ name: itemTag, weight: itemWeight });
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
catch (error) {
|
|
416
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
417
|
+
LogError(`TagSearchProvider: searchContentItemTags error: ${msg}`);
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
};
|
|
421
|
+
TagSearchProvider = TagSearchProvider_1 = __decorate([
|
|
422
|
+
RegisterClass(BaseSearchProvider, 'TagSearchProvider')
|
|
423
|
+
], TagSearchProvider);
|
|
424
|
+
export { TagSearchProvider };
|
|
425
|
+
//# sourceMappingURL=TagSearchProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TagSearchProvider.js","sourceRoot":"","sources":["../../src/generic/TagSearchProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,7 +16,7 @@ export declare class VectorSearchProvider extends BaseSearchProvider {
|
|
|
16
16
|
readonly SourceType: SearchSource;
|
|
17
17
|
private available;
|
|
18
18
|
/** LRU cache for query embeddings. Key = `${modelDriverClass}::${query}`, Value = embedding vector */
|
|
19
|
-
private static
|
|
19
|
+
private static embeddingCache;
|
|
20
20
|
private static readonly CACHE_MAX_SIZE;
|
|
21
21
|
private static readonly CACHE_TTL_MS;
|
|
22
22
|
/**
|
|
@@ -108,7 +108,7 @@ export declare class VectorSearchProvider extends BaseSearchProvider {
|
|
|
108
108
|
* Entities a content source is allowed to declare its vectors to be: the content-item entities
|
|
109
109
|
* themselves, or anything that IS-A one of them.
|
|
110
110
|
*/
|
|
111
|
-
private static readonly
|
|
111
|
+
private static readonly attributionRoots;
|
|
112
112
|
/**
|
|
113
113
|
* Validate a declared attribution before it is trusted, and return the entity's CANONICAL name.
|
|
114
114
|
*
|
|
@@ -155,7 +155,7 @@ export declare class VectorSearchProvider extends BaseSearchProvider {
|
|
|
155
155
|
/** Convert vector DB matches to SearchResultItem[] */
|
|
156
156
|
private convertMatches;
|
|
157
157
|
/** How many vector ids to name in the unattributed-match warning. */
|
|
158
|
-
private static readonly
|
|
158
|
+
private static readonly unattributedSampleSize;
|
|
159
159
|
/**
|
|
160
160
|
* Report matches that no attribution step could name, because they are about to disappear.
|
|
161
161
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VectorSearchProvider.d.ts","sourceRoot":"","sources":["../../src/generic/VectorSearchProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAsD,QAAQ,EAAgB,MAAM,sBAAsB,CAAC;AAMlH,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAoB,gBAAgB,EAAgC,MAAM,gBAAgB,CAAC;AACjJ,OAAO,EAAwB,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAY5E,qBACa,oBAAqB,SAAQ,kBAAkB;IACxD,SAAgB,UAAU,EAAE,YAAY,CAAY;IAEpD,OAAO,CAAC,SAAS,CAAS;IAE1B,sGAAsG;IACtG,OAAO,CAAC,MAAM,CAAC,cAAc,CAA0C;IACvE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAO;IAC7C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAiB;IAErD;;;OAGG;IACU,iBAAiB,CAAC,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAe7D,WAAW,IAAI,OAAO;IAI7B;;;OAGG;IACU,MAAM,CACf,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,aAAa,GAAG,SAAS,EAClC,WAAW,EAAE,QAAQ,EACrB,gBAAgB,CAAC,EAAE,gBAAgB,GACpC,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAoE9B,mFAAmF;IACnF,OAAO,CAAC,kBAAkB;IAa1B,gFAAgF;IAChF,OAAO,CAAC,kBAAkB;IAa1B,qDAAqD;IACrD,OAAO,CAAC,mBAAmB;IAc3B;;OAEG;YACW,kBAAkB;IAqFhC;;;;;;;;;;;;OAYG;YACW,aAAa;IA8E3B;;;;OAIG;YACW,qBAAqB;IAWnC;;;;;;;;;;;;;;;;;;;;;OAqBG;YACW,4BAA4B;IAwE1C;;;;;;;;;;;;;;;;;;;OAmBG;IACH,OAAO,CAAC,wBAAwB;IAWhC;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAuE;IAE/G;;;;;;;;;;;;;;;;;OAiBG;IACH,OAAO,CAAC,0BAA0B;IAqBlC;;;;;;;;;OASG;IACH,OAAO,CAAC,mBAAmB;IAqB3B;;;;;;;;;;;OAWG;YACW,sBAAsB;IAsBpC,sDAAsD;IACtD,OAAO,CAAC,cAAc;
|
|
1
|
+
{"version":3,"file":"VectorSearchProvider.d.ts","sourceRoot":"","sources":["../../src/generic/VectorSearchProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAsD,QAAQ,EAAgB,MAAM,sBAAsB,CAAC;AAMlH,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAoB,gBAAgB,EAAgC,MAAM,gBAAgB,CAAC;AACjJ,OAAO,EAAwB,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAY5E,qBACa,oBAAqB,SAAQ,kBAAkB;IACxD,SAAgB,UAAU,EAAE,YAAY,CAAY;IAEpD,OAAO,CAAC,SAAS,CAAS;IAE1B,sGAAsG;IACtG,OAAO,CAAC,MAAM,CAAC,cAAc,CAA0C;IACvE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAO;IAC7C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAiB;IAErD;;;OAGG;IACU,iBAAiB,CAAC,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAe7D,WAAW,IAAI,OAAO;IAI7B;;;OAGG;IACU,MAAM,CACf,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,aAAa,GAAG,SAAS,EAClC,WAAW,EAAE,QAAQ,EACrB,gBAAgB,CAAC,EAAE,gBAAgB,GACpC,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAoE9B,mFAAmF;IACnF,OAAO,CAAC,kBAAkB;IAa1B,gFAAgF;IAChF,OAAO,CAAC,kBAAkB;IAa1B,qDAAqD;IACrD,OAAO,CAAC,mBAAmB;IAc3B;;OAEG;YACW,kBAAkB;IAqFhC;;;;;;;;;;;;OAYG;YACW,aAAa;IA8E3B;;;;OAIG;YACW,qBAAqB;IAWnC;;;;;;;;;;;;;;;;;;;;;OAqBG;YACW,4BAA4B;IAwE1C;;;;;;;;;;;;;;;;;;;OAmBG;IACH,OAAO,CAAC,wBAAwB;IAWhC;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAuE;IAE/G;;;;;;;;;;;;;;;;;OAiBG;IACH,OAAO,CAAC,0BAA0B;IAqBlC;;;;;;;;;OASG;IACH,OAAO,CAAC,mBAAmB;IAqB3B;;;;;;;;;;;OAWG;YACW,sBAAsB;IAsBpC,sDAAsD;IACtD,OAAO,CAAC,cAAc;IAmEtB,qEAAqE;IACrE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAK;IAEnD;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,yBAAyB;IAcjC;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAuC3B,wDAAwD;IACxD,OAAO,CAAC,qBAAqB;IAwB7B;;;;;OAKG;IACH,SAAS,CAAC,oBAAoB,CAC1B,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,WAAW,EAAE,OAAO,GACrB,gBAAgB,CAAC,MAAM,CAAC;IAe3B,qEAAqE;IACrE,OAAO,CAAC,mBAAmB;IAmB3B;;;;;;;;OAQG;IACH,OAAO,CAAC,+BAA+B;CAoB1C"}
|